Public Types | Public Member Functions | Protected Member Functions | Protected Attributes | List of all members
oomph::RefineableTriangleMesh< ELEMENT > Class Template Reference

Unstructured refineable Triangle Mesh. More...

#include <triangle_mesh.template.h>

+ Inheritance diagram for oomph::RefineableTriangleMesh< ELEMENT >:

Public Types

typedef void(* MeshUpdateFctPt )(Mesh *mesh_pt)
 Function pointer to function that updates the mesh following the snapping of boundary nodes to the boundaries (e.g. to move boundary nodes very slightly to satisfy volume constraints) More...
 
typedef void(* InternalHolePointUpdateFctPt )(const unsigned &ihole, TriangleMeshPolygon *poly_pt)
 Function pointer to a function that can generate a point within the ihole-th hole, so that this can be overloaded by the user if they have a better way of doing it than our clunky default. The function should update the components of the Vector poly_pt->internal_point() More...
 
- Public Types inherited from oomph::Mesh
typedef void(FiniteElement::* SteadyExactSolutionFctPt )(const Vector< double > &x, Vector< double > &soln)
 Typedef for function pointer to function that computes steady exact solution. More...
 
typedef void(FiniteElement::* UnsteadyExactSolutionFctPt )(const double &time, const Vector< double > &x, Vector< double > &soln)
 Typedef for function pointer to function that computes unsteady exact solution. More...
 

Public Member Functions

 RefineableTriangleMesh (TriangleMeshParameters &triangle_mesh_parameters, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 Build mesh, based on the specifications on TriangleMeshParameters. More...
 
 RefineableTriangleMesh (const std::string &node_file_name, const std::string &element_file_name, const std::string &poly_file_name, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper, const bool &allow_automatic_creation_of_vertices_on_boundaries=true)
 Build mesh, based on the polyfiles. More...
 
virtual ~RefineableTriangleMesh ()
 Empty Destructor. More...
 
void enable_timings_tranfering_target_areas ()
 Enables info. and timings for tranferring of target areas. More...
 
void disable_timings_tranfering_target_areas ()
 Disables info. and timings for tranferring of target areas. More...
 
void enable_projection ()
 Enables the solution projection step during adaptation. More...
 
void disable_projection ()
 Disables the solution projection step during adaptation. More...
 
void enable_timings_projection ()
 Enables info. and timings for projection. More...
 
void disable_timings_projection ()
 Disables info. and timings for projection. More...
 
unsigned & nbin_x_for_area_transfer ()
 Read/write access to number of bins in the x-direction when transferring target areas by bin method. More...
 
unsigned & nbin_y_for_area_transfer ()
 Read/write access to number of bins in the y-direction when transferring target areas by bin method. More...
 
unsigned & nbin_x_for_projection ()
 Read/write access to number of bins in the x-direction when projecting old solution onto new mesh. More...
 
unsigned & nbin_y_for_projection ()
 Read/write access to number of bins in the y-direction when projecting old solution onto new mesh. More...
 
double & max_element_size ()
 Max element size allowed during adaptation. More...
 
double & min_element_size ()
 Min element size allowed during adaptation. More...
 
double & min_permitted_angle ()
 Min angle before remesh gets triggered. More...
 
bool use_iterative_solver_for_projection ()
 
void enable_iterative_solver_for_projection ()
 
void disable_iterative_solver_for_projection ()
 
void enable_print_timings_adaptation (const unsigned &print_level=1)
 Enables printing of timings for adaptation. More...
 
void disable_print_timings_adaptation ()
 Disables printing of timings for adaptation. More...
 
void set_print_level_timings_adaptation (const unsigned &print_level)
 Sets the printing level of timings for adaptation. More...
 
void enable_print_timings_load_balance (const unsigned &print_level=1)
 Enables printing of timings for load balance. More...
 
void disable_print_timings_load_balance ()
 Disables printing of timings for load balance. More...
 
void set_print_level_timings_load_balance (const unsigned &print_level)
 Sets the printing level of timings for load balance. More...
 
void doc_adaptivity_targets (std::ostream &outfile)
 Doc the targets for mesh adaptation. More...
 
void refine_uniformly (DocInfo &doc_info)
 Refine mesh uniformly and doc process. More...
 
unsigned unrefine_uniformly ()
 Unrefine mesh uniformly: Return 0 for success, 1 for failure (if unrefinement has reached the coarsest permitted level) More...
 
void adapt (const Vector< double > &elem_error)
 Adapt mesh, based on elemental error provided. More...
 
MeshUpdateFctPtmesh_update_fct_pt ()
 Access to function pointer to function that updates the mesh following the snapping of boundary nodes to the boundaries (e.g. to move boundary nodes very slightly to satisfy volume constraints) More...
 
InternalHolePointUpdateFctPtinternal_hole_point_update_fct_pt ()
 Access to function pointer to can be used to generate the internal point for the ihole-th hole. More...
 
unsigned nsorted_shared_boundary_node (unsigned &b)
 
void flush_sorted_shared_boundary_node ()
 
Nodesorted_shared_boundary_node_pt (unsigned &b, unsigned &i)
 
Vector< Node * > sorted_shared_boundary_node_pt (unsigned &b)
 
void create_polylines_from_polyfiles (const std::string &node_file_name, const std::string &poly_file_name)
 Helper function to create polylines and fill associate data. More...
 
void fill_boundary_elements_and_nodes_for_internal_boundaries ()
 
void fill_boundary_elements_and_nodes_for_internal_boundaries (std::ofstream &outfile)
 
void reestablish_distribution_info_for_restart (OomphCommunicator *comm_pt, std::istream &restart_file)
 
void update_polyline_representation_from_restart ()
 Method used to update the polylines representation after restart. More...
 
void load_balance (const Vector< unsigned > &input_target_domain_for_local_non_halo_element)
 Performs the load balancing for unstructured meshes, the load balancing strategy is based on mesh migration. More...
 
void get_shared_boundary_elements_and_face_indexes (const Vector< FiniteElement * > &first_element_pt, const Vector< FiniteElement * > &second_element_pt, Vector< FiniteElement * > &first_shared_boundary_element_pt, Vector< unsigned > &first_shared_boundary_element_face_index, Vector< FiniteElement * > &second_shared_boundary_element_pt, Vector< unsigned > &second_shared_boundary_element_face_index)
 
void create_new_shared_boundaries (std::set< FiniteElement * > &element_in_processor_pt, Vector< Vector< FiniteElement * > > &new_shared_boundary_element_pt, Vector< Vector< unsigned > > &new_shared_boundary_element_face_index)
 Creates the new shared boundaries, this method is also in charge of computing the shared boundaries ids of each processor and send that info. to all the processors. More...
 
void compute_shared_node_degree_helper (Vector< Vector< FiniteElement * > > &unsorted_face_ele_pt, std::map< Node *, unsigned > &global_node_degree)
 
void create_adjacency_matrix_new_shared_edges_helper (Vector< Vector< FiniteElement * > > &unsorted_face_ele_pt, Vector< Vector< Node * > > &tmp_sorted_shared_node_pt, std::map< Node *, Vector< Vector< unsigned > > > &node_alias, Vector< Vector< Vector< unsigned > > > &adjacency_matrix)
 
void get_shared_boundary_segment_nodes_helper (const unsigned &shd_bnd_id, Vector< Vector< Node * > > &tmp_segment_nodes)
 Get the nodes on the shared boundary (b), these are stored in the segment they belong. More...
 
void get_boundary_segment_nodes_helper (const unsigned &b, Vector< Vector< Node * > > &tmp_segment_nodes)
 Get the nodes on the boundary (b), these are stored in the segment they belong (also used by the load balance method to re-set the number of segments per boundary after load balance has taken place) More...
 
void enable_boundary_unrefinement_constrained_by_target_areas ()
 
void disable_boundary_unrefinement_constrained_by_target_areas ()
 
void enable_boundary_refinement_constrained_by_target_areas ()
 
void disable_boundary_refinement_constrained_by_target_areas ()
 
void enable_shared_boundary_unrefinement_constrained_by_target_areas ()
 
void disable_shared_boundary_unrefinement_constrained_by_target_areas ()
 
void enable_shared_boundary_refinement_constrained_by_target_areas ()
 
void disable_shared_boundary_refinement_constrained_by_target_areas ()
 
- Public Member Functions inherited from oomph::TriangleMesh< ELEMENT >
 TriangleMesh ()
 Empty constructor. More...
 
 TriangleMesh (const std::string &node_file_name, const std::string &element_file_name, const std::string &poly_file_name, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper, const bool &allow_automatic_creation_of_vertices_on_boundaries=true)
 Constructor with the input files. More...
 
 TriangleMesh (TriangleMeshParameters &triangle_mesh_parameters, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 Build mesh, based on the specifications on TriangleMeshParameters. More...
 
 TriangleMesh (const std::string &poly_file_name, const double &element_area, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper, const bool &allow_automatic_creation_of_vertices_on_boundaries=true)
 Build mesh from poly file, with specified target area for all elements. More...
 
 TriangleMesh (const TriangleMesh &dummy)
 Broken copy constructor. More...
 
void operator= (const TriangleMesh &)
 Broken assignment operator. More...
 
virtual ~TriangleMesh ()
 Destructor. More...
 
void set_mesh_level_time_stepper (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
 Overload set_mesh_level_time_stepper so that the stored time stepper now corresponds to the new timestepper. More...
 
void compute_boundary_segments_connectivity_and_initial_zeta_values (const unsigned &b)
 Compute the boundary segments connectivity for those boundaries that were splited during the distribution process. More...
 
void re_assign_initial_zeta_values_for_internal_boundary (const unsigned &b, Vector< std::list< FiniteElement * > > &old_segment_sorted_ele_pt, std::map< FiniteElement *, bool > &old_is_inverted)
 Re-assign the boundary segments initial zeta (arclength) value for those internal boundaries that were splited during the distribution process. Those boundaries that have one face element at each side of the boundary. More...
 
void re_scale_re_assigned_initial_zeta_values_for_internal_boundary (const unsigned &b)
 Re-scale the re-assigned zeta values for the boundary nodes, apply only for internal boundaries. More...
 
void identify_boundary_segments_and_assign_initial_zeta_values (const unsigned &b, Vector< FiniteElement * > &input_face_ele_pt, const bool &is_internal_boundary, std::map< FiniteElement *, FiniteElement * > &face_to_bulk_element_pt)
 Identify the segments from the old mesh (original mesh) in the new mesh (this) and assign initial and final boundary coordinates for the segments that create the boundary. (This is the version called from the original mesh to identify its own segments) More...
 
void identify_boundary_segments_and_assign_initial_zeta_values (const unsigned &b, TriangleMesh< ELEMENT > *original_mesh_pt)
 Identify the segments from the old mesh (original mesh) in the new mesh (this) and assign initial and final boundary coordinates for the segments that create the boundary. More...
 
void synchronize_boundary_coordinates (const unsigned &b)
 In charge of sinchronize the boundary coordinates for internal boundaries that were split as part of the distribution process. Called after setup_boundary_coordinates() for the original mesh only. More...
 
void select_boundary_face_elements (Vector< FiniteElement * > &face_el_pt, const unsigned &b, bool &is_internal_boundary, std::map< FiniteElement *, FiniteElement * > &face_to_bulk_element_pt)
 Select face element from boundary using the criteria to decide which of the two face elements should be used on internal boundaries. More...
 
Vector< Vector< Node * > > & boundary_segment_node_pt (const unsigned &b)
 Return direct access to nodes associated with a boundary but sorted in segments. More...
 
Vector< Node * > & boundary_segment_node_pt (const unsigned &b, const unsigned &s)
 Return direct access to nodes associated with a segment of a given boundary. More...
 
Node *& boundary_segment_node_pt (const unsigned &b, const unsigned &s, const unsigned &n)
 Return pointer to node n on boundary b. More...
 
void update_triangulateio (Vector< Vector< double > > &internal_point)
 Update the TriangulateIO object to the current nodal position and the centre hole coordinates. More...
 
void update_triangulateio ()
 Update the triangulateio object to the current nodal positions. More...
 
void dump_distributed_info_for_restart (std::ostream &dump_file)
 Used to dump info. related with distributed triangle meshes. More...
 
const unsigned read_unsigned_line_helper (std::istream &read_file)
 
void read_distributed_info_for_restart (std::istream &restart_file)
 Used to read info. related with distributed triangle meshes. More...
 
void remesh_from_internal_triangulateio ()
 Completely regenerate the mesh from the trianglateio structure. More...
 
bool triangulateio_exists ()
 Boolean defining if Triangulateio object has been built or not. More...
 
Vector< unsigned > oomph_vertex_nodes_id ()
 Return the vector that contains the oomph-lib node number for all vertex nodes in the TriangulateIO representation of the mesh. More...
 
const unsigned initial_shared_boundary_id ()
 
const unsigned final_shared_boundary_id ()
 
virtual void reset_boundary_element_info (Vector< unsigned > &ntmp_boundary_elements, Vector< Vector< unsigned > > &ntmp_boundary_elements_in_region, Vector< FiniteElement * > &deleted_elements)
 Reset the boundary elements info. after load balance have taken place. More...
 
void output_boundary_coordinates (const unsigned &b, std::ostream &outfile)
 
- Public Member Functions inherited from oomph::TriangleMeshBase
 TriangleMeshBase ()
 Constructor. More...
 
 TriangleMeshBase (const TriangleMeshBase &node)
 Broken copy constructor. More...
 
virtual ~TriangleMeshBase ()
 Broken assignment operator. More...
 
void setup_boundary_element_info ()
 
void setup_boundary_element_info (std::ostream &outfile)
 Setup lookup schemes which establish which elements are located next to mesh's boundaries. Doc in outfile (if it's open). More...
 
bool use_triangulateio_restart () const
 const access for Use_triangulateio_restart. More...
 
void enable_triangulateio_restart ()
 write access for Use_triangulateio_restart. More...
 
void disable_triangulateio_restart ()
 write access for Use_triangulateio_restart. More...
 
TriangulateIOtriangulateio_representation ()
 Access to the triangulateio representation of the mesh. More...
 
void write_triangulateio (TriangulateIO &triangulate_io, std::string &s)
 Helper function. Write a TriangulateIO object file with all the triangulateio fields. String s is add to assign a different value for the input and/or output structure. More...
 
void clear_triangulateio ()
 Helper function. Clean up the memory associated with the TriangulateIO object. This should really only be used to save memory in extremely tight situations. More...
 
void dump_triangulateio (std::ostream &dump_file)
 Dump the triangulateio structure to a dump file and record boundary coordinates of boundary nodes. More...
 
virtual void dump_info_to_reset_halo_haloed_scheme (std::ostream &dump_file)
 
void remesh_from_triangulateio (std::istream &restart_file)
 Regenerate the mesh from a dumped triangulateio file and dumped boundary coordinates of boundary nodes. More...
 
- Public Member Functions inherited from oomph::UnstructuredTwoDMeshGeometryBase
 UnstructuredTwoDMeshGeometryBase ()
 Empty constructor. More...
 
 UnstructuredTwoDMeshGeometryBase (const UnstructuredTwoDMeshGeometryBase &dummy)
 Broken copy constructor. More...
 
void operator= (const UnstructuredTwoDMeshGeometryBase &)
 Broken assignment operator. More...
 
 ~UnstructuredTwoDMeshGeometryBase ()
 Empty destructor. More...
 
unsigned nregion ()
 Return the number of regions specified by attributes. More...
 
unsigned nregion_element (const unsigned &i)
 Return the number of elements in the i-th region. More...
 
FiniteElementregion_element_pt (const unsigned &i, const unsigned &e)
 Return the e-th element in the i-th region. More...
 
unsigned nregion_attribute ()
 Return the number of attributes used in the mesh. More...
 
double region_attribute (const unsigned &i)
 Return the attribute associated with region i. More...
 
GeomObjectboundary_geom_object_pt (const unsigned &b)
 Return the geometric object associated with the b-th boundary or null if the boundary has associated geometric object. More...
 
std::map< unsigned, GeomObject * > & boundary_geom_object_pt ()
 Return direct access to the geometric object storage. More...
 
std::map< unsigned, Vector
< double > > & 
boundary_coordinate_limits ()
 Return access to the vector of boundary coordinates associated with each geometric object. More...
 
Vector< double > & boundary_coordinate_limits (const unsigned &b)
 Return access to the coordinate limits associated with the geometric object associated with boundary b. More...
 
unsigned nboundary_element_in_region (const unsigned &b, const unsigned &r) const
 Return the number of elements adjacent to boundary b in region r. More...
 
FiniteElementboundary_element_in_region_pt (const unsigned &b, const unsigned &r, const unsigned &e) const
 Return pointer to the e-th element adjacent to boundary b in region r. More...
 
int face_index_at_boundary_in_region (const unsigned &b, const unsigned &r, const unsigned &e) const
 Return face index of the e-th element adjacent to boundary b in region r. More...
 
TriangleMeshPolyLineboundary_polyline_pt (const unsigned &b)
 Return pointer to the current polyline that describes the b-th mesh boundary. More...
 
std::map< unsigned, std::set
< Node * > > & 
nodes_on_boundary_pt ()
 Gets a pointer to a set with all the nodes related with a boundary. More...
 
const bool get_connected_vertex_number_on_destination_polyline (TriangleMeshPolyLine *dst_polyline_pt, Vector< double > &vertex_coordinates, unsigned &vertex_number)
 Gets the vertex number on the destination polyline (used to create the connections among shared boundaries) More...
 
void check_contiguousness_on_polylines_helper (Vector< TriangleMeshPolyLine * > &polylines_pt, unsigned &index)
 Sort the polylines coming from joining them. Check whether it is necessary to reverse them or not. Used when joining two curve polylines in order to create a polygon. More...
 
void check_contiguousness_on_polylines_helper (Vector< TriangleMeshPolyLine * > &polylines_pt, unsigned &index_halo_start, unsigned &index_halo_end)
 Sort the polylines coming from joining them. Check whether it is necessary to reverse them or not. Used when joining polylines and they still do not create a polygon. More...
 
bool is_point_inside_polygon_helper (Vector< Vector< double > > polygon_vertices, Vector< double > point)
 Helper function that checks if a given point is inside a polygon. More...
 
void enable_automatic_creation_of_vertices_on_boundaries ()
 
void disable_automatic_creation_of_vertices_on_boundaries ()
 
bool is_automatic_creation_of_vertices_on_boundaries_allowed ()
 
void flush_boundary_segment_node (const unsigned &b)
 Flush the boundary segment node storage. More...
 
void set_nboundary_segment_node (const unsigned &b, const unsigned &s)
 Set the number of segments associated with a boundary. More...
 
unsigned nboundary_segment (const unsigned &b)
 Return the number of segments associated with a boundary. More...
 
unsigned long nboundary_segment_node (const unsigned &b)
 Return the number of segments associated with a boundary. More...
 
unsigned long nboundary_segment_node (const unsigned &b, const unsigned &s)
 
void add_boundary_segment_node (const unsigned &b, const unsigned &s, Node *const &node_pt)
 
std::map< unsigned, Vector
< double > > & 
boundary_initial_coordinate ()
 Return direct access to the initial coordinates of a boundary. More...
 
std::map< unsigned, Vector
< double > > & 
boundary_final_coordinate ()
 Return direct access to the final coordinates of a boundary. More...
 
std::map< unsigned, Vector
< double > > & 
boundary_initial_zeta_coordinate ()
 Return direct access to the initial zeta coordinate of a boundary. More...
 
std::map< unsigned, Vector
< double > > & 
boundary_final_zeta_coordinate ()
 Return direct access to the final zeta coordinates of a boundary. More...
 
std::map< unsigned, Vector
< unsigned > > & 
boundary_segment_inverted ()
 Return the info. to know if it is necessary to reverse the segment based on a previous mesh. More...
 
std::map< unsigned, Vector
< Vector< double > > > & 
boundary_segment_initial_coordinate ()
 Return direct access to the initial coordinates for the segments that are part of a boundary. More...
 
std::map< unsigned, Vector
< Vector< double > > > & 
boundary_segment_final_coordinate ()
 Return direct access to the final coordinates for the segments that are part of a boundary. More...
 
std::map< unsigned, Vector
< double > > & 
boundary_segment_initial_arclength ()
 Return direct access to the initial arclength for the segments that are part of a boundary. More...
 
std::map< unsigned, Vector
< double > > & 
boundary_segment_final_arclength ()
 Return direct access to the final arclength for the segments that are part of a boundary. More...
 
std::map< unsigned, Vector
< double > > & 
boundary_segment_initial_zeta ()
 Return direct access to the initial zeta for the segments that are part of a boundary. More...
 
std::map< unsigned, Vector
< double > > & 
boundary_segment_final_zeta ()
 Return direct access to the final zeta for the segments that are part of a boundary. More...
 
Vector< double > & boundary_segment_initial_zeta (const unsigned &b)
 Return the initial zeta for the segments that are part of a boundary. More...
 
Vector< double > & boundary_segment_final_zeta (const unsigned &b)
 Return the final zeta for the segments that are part of a boundary. More...
 
Vector< double > & boundary_initial_coordinate (const unsigned &b)
 Return the initial coordinates for the boundary. More...
 
Vector< double > & boundary_final_coordinate (const unsigned &b)
 Return the final coordinates for the boundary. More...
 
const Vector< unsigned > boundary_segment_inverted (const unsigned &b) const
 Return the info. to know if it is necessary to reverse the segment based on a previous mesh. More...
 
Vector< unsigned > & boundary_segment_inverted (const unsigned &b)
 Return the info. to know if it is necessary to reverse the segment based on a previous mesh. More...
 
Vector< double > & boundary_initial_zeta_coordinate (const unsigned &b)
 Return the initial zeta coordinate for the boundary. More...
 
Vector< double > & boundary_final_zeta_coordinate (const unsigned &b)
 Return the final zeta coordinate for the boundary. More...
 
Vector< double > & boundary_segment_initial_arclength (const unsigned &b)
 Return the initial arclength for the segments that are part of a boundary. More...
 
Vector< double > & boundary_segment_final_arclength (const unsigned &b)
 Return the final arclength for the segments that are part of a boundary. More...
 
Vector< Vector< double > > & boundary_segment_initial_coordinate (const unsigned &b)
 Return the initial coordinates for the segments that are part of a boundary. More...
 
Vector< Vector< double > > & boundary_segment_final_coordinate (const unsigned &b)
 Return the final coordinates for the segments that are part of a boundary. More...
 
template<class ELEMENT >
void setup_boundary_coordinates (const unsigned &b)
 Setup boundary coordinate on boundary b. Boundary coordinate increases continously along polygonal boundary. It's zero at the lowest left node on the boundary. More...
 
template<class ELEMENT >
void setup_boundary_coordinates (const unsigned &b, std::ofstream &outfile)
 Setup boundary coordinate on boundary b. Doc Faces in outfile. Boundary coordinate increases continously along polygonal boundary. It's zero at the lowest left node on the boundary. More...
 
- Public Member Functions inherited from oomph::Mesh
void resize_halo_nodes ()
 Helper function that resizes halo nodes to the same size as their non-halo counterparts if required. (A discrepancy can arise if a FaceElement that introduces additional unknowns are attached to a bulk element that shares a node with a haloed element. In that case the joint node between haloed and non-haloed element is resized on that processor but not on the one that holds the halo counterpart (because no FaceElement is attached to the halo element) More...
 
 Mesh ()
 Default constructor. More...
 
 Mesh (const Vector< Mesh * > &sub_mesh_pt)
 Constructor builds combined mesh from the meshes specified. Note: This simply merges the meshes' elements and nodes (ignoring duplicates; no boundary information etc. is created). More...
 
void merge_meshes (const Vector< Mesh * > &sub_mesh_pt)
 Merge meshes. Note: This simply merges the meshes' elements and nodes (ignoring duplicates; no boundary information etc. is created). More...
 
template<class BULK_ELEMENT >
void doc_boundary_coordinates (const unsigned &b, std::ofstream &the_file)
 Output boundary coordinates on boundary b – template argument specifies the bulk element type (needed to create FaceElement of appropriate type on mesh boundary). More...
 
virtual void scale_mesh (const double &factor)
 Scale all nodal coordinates by given factor. Virtual so it can be overloaded in SolidMesh class where it also re-assigns the Lagrangian coordinates. More...
 
 Mesh (const Mesh &dummy)
 Broken copy constructor. More...
 
void operator= (const Mesh &)
 Broken assignment operator. More...
 
virtual ~Mesh ()
 Virtual Destructor to clean up all memory. More...
 
void flush_element_and_node_storage ()
 Flush storage for elements and nodes by emptying the vectors that store the pointers to them. This is useful if a particular mesh is only built to generate a small part of a bigger mesh. Once the elements and nodes have been created, they are typically copied into the new mesh and the auxiliary mesh can be deleted. However, if we simply call the destructor of the auxiliary mesh, it will also wipe out the nodes and elements, because it still "thinks" it's in charge of these... More...
 
void flush_element_storage ()
 Flush storage for elements (only) by emptying the vectors that store the pointers to them. This is useful if a particular mesh is only built to generate a small part of a bigger mesh. Once the elements and nodes have been created, they are typically copied into the new mesh and the auxiliary mesh can be deleted. However, if we simply call the destructor of the auxiliary mesh, it will also wipe out the nodes and elements, because it still "thinks" it's in charge of these... More...
 
void flush_node_storage ()
 Flush storage for nodes (only) by emptying the vectors that store the pointers to them. More...
 
Node *& node_pt (const unsigned long &n)
 Return pointer to global node n. More...
 
Nodenode_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...
 
GeneralisedElementelement_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...
 
FiniteElementfinite_element_pt (const unsigned &e) const
 Upcast (downcast?) to FiniteElement (needed to access FiniteElement member functions). More...
 
Node *& boundary_node_pt (const unsigned &b, const unsigned &n)
 Return pointer to node n on boundary b. More...
 
Nodeboundary_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)
 Remove all information about nodes stored on the b-th boundary of the mesh. More...
 
void remove_boundary_node (const unsigned &b, Node *const &node_pt)
 
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)
 Update nodal positions in response to changes in the domain shape. Uses the FiniteElement::get_x(...) function for FiniteElements and doesn't do anything for other element types. If a MacroElement pointer has been set for a FiniteElement, the MacroElement representation is used to update the nodal positions; if not get_x(...) uses the FE interpolation and thus leaves the nodal positions unchanged. Virtual, so it can be overloaded by specific meshes, such as AlgebraicMeshes or SpineMeshes. Generally, this function updates the position of all nodes in response to changes in the boundary position. However, we ignore all SolidNodes since their position is computed as part of the solution – unless the bool flag is set to true. Such calls are typically made when the initial mesh is created and/or after a mesh has been refined repeatedly before the start of the computation. More...
 
virtual void reorder_nodes (const bool &use_old_ordering=true)
 Re-order nodes in the order in which they appear in elements – can be overloaded for more efficient re-ordering. More...
 
virtual void get_node_reordering (Vector< Node * > &reordering, const bool &use_old_ordering=true) const
 Get a reordering of the nodes in the order in which they appear in elements – can be overloaded for more efficient re-ordering. More...
 
template<class BULK_ELEMENT , template< class > class FACE_ELEMENT>
void build_face_mesh (const unsigned &b, Mesh *const &face_mesh_pt)
 Constuct a Mesh of FACE_ELEMENTs along the b-th boundary of the mesh (which contains elements of type BULK_ELEMENT) More...
 
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)
 Determine max and min area for all FiniteElements in the mesh (non-FiniteElements are ignored) More...
 
double total_size ()
 Determine the sum of all "sizes" of the FiniteElements in the mesh (non-FiniteElements are ignored). This gives the length/area/volume occupied by the mesh. More...
 
void check_inverted_elements (bool &mesh_has_inverted_elements, std::ofstream &inverted_element_file)
 Check for inverted elements and report outcome in boolean variable. This visits all elements at their integration points and checks if the Jacobian of the mapping between local and global coordinates is positive – using the same test that would be carried out (but only in PARANOID mode) during the assembly of the elements' Jacobian matrices. Inverted elements are output in inverted_element_file (if the stream is open). More...
 
void check_inverted_elements (bool &mesh_has_inverted_elements)
 Check for inverted elements and report outcome. More...
 
unsigned check_for_repeated_nodes (const double &epsilon=1.0e-12)
 Check for repeated nodes within a given spatial tolerance. Return (0/1) for (pass/fail). More...
 
Vector< Node * > prune_dead_nodes ()
 Prune nodes. Nodes that have been marked as obsolete are removed from the mesh (and its boundary-node scheme). Returns vector of pointers to deleted nodes. More...
 
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...
 
FiniteElementboundary_element_pt (const unsigned &b, const unsigned &e) const
 Return pointer to e-th finite element on boundary b. More...
 
Nodeget_some_non_boundary_node () const
 Find a node not on any boundary in mesh_pt (useful for pinning a single node in a purely Neumann problem so that it is fully determined). More...
 
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
 For the e-th finite element on boundary b, return int to indicate the face_index of the face adjacent to the boundary. This is consistent with input required during the generation of FaceElements. More...
 
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
 Output in paraview format into specified file. Breaks up each element into sub-elements for plotting purposes. We assume that all elements are of the same type (fct will break break (in paranoid mode) if paraview output fcts of the elements are inconsistent). More...
 
void output_fct_paraview (std::ofstream &file_out, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt) const
 Output in paraview format into specified file. Breaks up each element into sub-elements for plotting purposes. We assume that all elements are of the same type (fct will break break (in paranoid mode) if paraview output fcts of the elements are inconsistent). More...
 
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)
 Output a given time-dep. Vector function at f(n_plot) points in each element. More...
 
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 output_boundary_coordinates (const unsigned &b, const std::string &output_filename)
 
void output_boundaries_coordinates (std::ostream &outfile)
 
void output_boundaries_coordinates (const std::string &output_filename)
 
void assign_initial_values_impulsive ()
 Assign initial values for an impulsive start. More...
 
void shift_time_values ()
 Shift time-dependent data along for next timestep: Deal with nodal Data/positions and the element's internal Data. More...
 
void calculate_predictions ()
 Calculate predictions for all Data and positions associated with the mesh, usually used in adaptive time-stepping. More...
 
void set_nodal_and_elemental_time_stepper (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
 Set the timestepper associated with all nodal and elemental data stored in the mesh. More...
 
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 &parameter_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)
 Set the timestepper associated with the internal data stored within elements in the meah. More...
 
virtual void compute_norm (double &norm)
 Compute norm of solution by summing contributions of compute_norm(...) for all constituent elements in the mesh. What that norm means depends on what's defined in the element's function; may need to take the square root afterwards if the elements compute the square of the L2 norm, say. More...
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 Plot error when compared against a given exact solution. Also returns the norm of the error and that of the exact solution. More...
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 Plot error when compared against a given time-depdendent exact solution. Also returns the norm of the error and that of the exact solution. More...
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm)
 Plot error when compared against a given time-depdendent exact solution. Also returns the norm of the error and that of the exact solution. Version with vectors of norms and errors so that different variables' norms and errors can be returned individually. More...
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
 Plot error when compared against a given time-depdendent exact solution. Also returns the norm of the error and that of the exact solution. Version with vectors of norms and errors so that different variables' norms and errors can be returned individually. More...
 
bool is_mesh_distributed () const
 Boolean to indicate if Mesh has been distributed. More...
 
OomphCommunicatorcommunicator_pt () const
 
void set_communicator_pt (OomphCommunicator *comm_pt)
 
void set_keep_all_elements_as_halos ()
 Call this function to keep all the elements as halo elements. More...
 
void unset_keep_all_elements_as_halos ()
 Calll this function to unset the flag that keeps all elements in the mesh as halo elements. More...
 
virtual void distribute (OomphCommunicator *comm_pt, const Vector< unsigned > &element_domain, Vector< GeneralisedElement * > &deleted_element_pt, DocInfo &doc_info, const bool &report_stats, const bool &overrule_keep_as_halo_element_status)
 Distribute the problem and doc; make this virtual to allow overloading for particular meshes where further work is required. Add to vector of pointers to deleted elements. More...
 
void distribute (OomphCommunicator *comm_pt, const Vector< unsigned > &element_domain, Vector< GeneralisedElement * > &deleted_element_pt, const bool &report_stats=false)
 Distribute the problem Add to vector of pointers to deleted elements. More...
 
void prune_halo_elements_and_nodes (Vector< GeneralisedElement * > &deleted_element_pt, const bool &report_stats=false)
 (Irreversibly) prune halo(ed) elements and nodes, usually after another round of refinement, to get rid of excessively wide halo layers. Note that the current mesh will be now regarded as the base mesh and no unrefinement relative to it will be possible once this function has been called. More...
 
void prune_halo_elements_and_nodes (Vector< GeneralisedElement * > &deleted_element_pt, DocInfo &doc_info, const bool &report_stats)
 (Irreversibly) prune halo(ed) elements and nodes, usually after another round of refinement, to get rid of excessively wide halo layers. Note that the current mesh will be now regarded as the base mesh and no unrefinement relative to it will be possible once this function has been called. More...
 
void get_efficiency_of_mesh_distribution (double &av_efficiency, double &max_efficiency, double &min_efficiency)
 Get efficiency of mesh distribution: In an ideal distribution without halo overhead, each processor would only hold its own elements. Efficieny per processor = (number of non-halo elements)/ (total number of elements). More...
 
void doc_mesh_distribution (DocInfo &doc_info)
 Doc the mesh distribution, to be processed with tecplot macros. More...
 
void check_halo_schemes (DocInfo &doc_info, double &max_permitted_error_for_halo_check)
 Check halo and shared schemes on the mesh. More...
 
virtual void classify_halo_and_haloed_nodes (DocInfo &doc_info, const bool &report_stats)
 Classify the halo and haloed nodes in the mesh. Virtual so it can be overloaded to perform additional functionality (such as synchronising hanging nodes) in refineable meshes, say. More...
 
virtual void classify_halo_and_haloed_nodes (const bool &report_stats=false)
 
void synchronise_shared_nodes (const bool &report_stats)
 Synchronise shared node lookup schemes to cater for the the case where: (1) a certain node on the current processor is halo with proc p (i.e. its non-halo counterpart lives on processor p) (2) that node is also exists (also as a halo) on another processor (q, say) where its non-halo counter part is also known to be on processor p. However, without calling this function the current processor does not necessarily know that it shares a node with processor q. This information can be required, e.g. when synchronising hanging node schemes over all processors. More...
 
void get_all_halo_data (std::map< unsigned, double * > &map_of_halo_data)
 Get all the halo data stored in the mesh and add pointers to the data to the map, indexed by global equation number. More...
 
Vector< GeneralisedElement * > halo_element_pt (const unsigned &p)
 Return vector of halo elements in this Mesh whose non-halo counterpart is held on processor p. More...
 
Vector< GeneralisedElement * > haloed_element_pt (const unsigned &p)
 Return vector of haloed elements in this Mesh whose haloing counterpart is held on processor p. More...
 
unsigned nnon_halo_element ()
 Total number of non-halo elements in this mesh (Costly call computes result on the fly) More...
 
unsigned nroot_halo_element ()
 Total number of root halo elements in this Mesh. More...
 
unsigned nroot_halo_element (const unsigned &p)
 Number of root halo elements in this Mesh whose non-halo counterpart is held on processor p. More...
 
Vector< GeneralisedElement * > root_halo_element_pt (const unsigned &p)
 Vector of pointers to root halo elements in this Mesh whose non-halo counterpart is held on processor p. More...
 
GeneralisedElement *& root_halo_element_pt (const unsigned &p, const unsigned &e)
 Access fct to the e-th root halo element in this Mesh whose non-halo counterpart is held on processor p. More...
 
void add_root_halo_element_pt (const unsigned &p, GeneralisedElement *&el_pt)
 Add root halo element whose non-halo counterpart is held on processor p to this Mesh. More...
 
unsigned nhalo_node ()
 Total number of halo nodes in this Mesh. More...
 
unsigned nhalo_node (const unsigned &p)
 Number of halo nodes in this Mesh whose non-halo counterpart is held on processor p. More...
 
void add_halo_node_pt (const unsigned &p, Node *&nod_pt)
 Add halo node whose non-halo counterpart is held on processor p to the storage scheme for halo nodes. More...
 
Nodehalo_node_pt (const unsigned &p, const unsigned &j)
 Access fct to the j-th halo node in this Mesh whose non-halo counterpart is held on processor p. More...
 
unsigned nroot_haloed_element ()
 Total number of root haloed elements in this Mesh. More...
 
unsigned nroot_haloed_element (const unsigned &p)
 Number of root haloed elements in this Mesh whose non-halo counterpart is held on processor p. More...
 
Vector< GeneralisedElement * > root_haloed_element_pt (const unsigned &p)
 Vector of pointers to root haloed elements in this Mesh whose non-halo counterpart is held on processor p. More...
 
GeneralisedElement *& root_haloed_element_pt (const unsigned &p, const unsigned &e)
 Access fct to the e-th root haloed element in this Mesh whose non-halo counterpart is held on processor p. More...
 
void add_root_haloed_element_pt (const unsigned &p, GeneralisedElement *&el_pt)
 Add root haloed element whose non-halo counterpart is held on processor p to the storage scheme for haloed elements. Note: This does not add the element to the storage scheme for elements as it's understood to naturally live on this processor anyway! More...
 
unsigned nhaloed_node ()
 Total number of haloed nodes in this Mesh. More...
 
unsigned nhaloed_node (const unsigned &p)
 Number of haloed nodes in this Mesh whose haloed counterpart is held on processor p. More...
 
Nodehaloed_node_pt (const unsigned &p, const unsigned &j)
 Access fct to the j-th haloed node in this Mesh whose halo counterpart is held on processor p. More...
 
void add_haloed_node_pt (const unsigned &p, Node *&nod_pt)
 Add haloed node whose halo counterpart is held on processor p to the storage scheme for haloed nodes. More...
 
void disable_resizing_of_halo_nodes ()
 Function to suppress resizing of halo nodes – optmisation but call it at your own risk! More...
 
void enable_resizing_of_halo_nodes ()
 Function to (re-)enable resizing of halo nodes – this returns things to the default behaviour. More...
 
void disable_output_of_halo_elements ()
 Function to disable halo element output. More...
 
void enable_output_of_halo_elements ()
 Function to enable halo element output. More...
 
unsigned nshared_node ()
 Total number of shared nodes in this Mesh. More...
 
void doc_shared_nodes ()
 Doc shared nodes. More...
 
unsigned nshared_node (const unsigned &p)
 Number of shared nodes in this Mesh who have a counterpart on processor p. More...
 
Nodeshared_node_pt (const unsigned &p, const unsigned &j)
 Access fct to the j-th shared node in this Mesh who has a counterpart on processor p. More...
 
void get_shared_node_pt (const unsigned &p, Vector< Node * > &shared_node_pt)
 Get vector of pointers to shared nodes with processor p. Required for faster search in Missing_masters_functions::add_external_haloed_node_helper() and Missing_masters_functions::add_external_haloed_master_node_helper() More...
 
void add_shared_node_pt (const unsigned &p, Node *&nod_pt)
 Add shared node whose counterpart is held on processor p to the storage scheme for shared nodes. (NB: ensure that this routine is called twice, once for each process) More...
 
void get_halo_node_stats (double &av_number, unsigned &max_number, unsigned &min_number)
 Get halo node stats for this distributed mesh: Average/max/min number of halo nodes over all processors. Careful: Involves MPI Broadcasts and must therefore be called on all processors! More...
 
void get_haloed_node_stats (double &av_number, unsigned &max_number, unsigned &min_number)
 Get haloed node stats for this distributed mesh: Average/max/min number of haloed nodes over all processors. Careful: Involves MPI Broadcasts and must therefore be called on all processors! More...
 
void output_external_halo_elements (std::ostream &outfile, const unsigned &n_plot=5)
 Output all external halo elements. More...
 
void output_external_halo_elements (const unsigned &p, std::ostream &outfile, const unsigned &n_plot=5)
 Output all external halo elements with processor p. More...
 
void output_external_haloed_elements (std::ostream &outfile, const unsigned &n_plot=5)
 Output all external haloed elements. More...
 
void output_external_haloed_elements (const unsigned &p, std::ostream &outfile, const unsigned &n_plot=5)
 Output all external haloed elements with processor p. More...
 
unsigned nexternal_halo_element ()
 Total number of external halo elements in this Mesh. More...
 
unsigned nexternal_halo_element (const unsigned &p)
 Number of external halo elements in this Mesh whose non-halo counterpart is held on processor p. More...
 
GeneralisedElement *& external_halo_element_pt (const unsigned &p, const unsigned &e)
 Access fct to the e-th external halo element in this Mesh whose non-halo counterpart is held on processor p. More...
 
void add_external_halo_element_pt (const unsigned &p, GeneralisedElement *&el_pt)
 Add external halo element whose non-halo counterpart is held on processor p to this Mesh. More...
 
unsigned nexternal_haloed_element ()
 Total number of external haloed elements in this Mesh. More...
 
unsigned nexternal_haloed_element (const unsigned &p)
 Number of external haloed elements in this Mesh whose non-halo counterpart is held on processor p. More...
 
GeneralisedElement *& external_haloed_element_pt (const unsigned &p, const unsigned &e)
 Access fct to the e-th external haloed element in this Mesh whose non-halo counterpart is held on processor p. More...
 
unsigned add_external_haloed_element_pt (const unsigned &p, GeneralisedElement *&el_pt)
 Add external haloed element whose non-halo counterpart is held on processor p to the storage scheme for haloed elements. More...
 
unsigned nexternal_halo_node ()
 Total number of external halo nodes in this Mesh. More...
 
void get_external_halo_node_pt (Vector< Node * > &external_halo_node_pt)
 Get vector of pointers to all external halo nodes. More...
 
unsigned nexternal_halo_node (const unsigned &p)
 Number of external halo nodes in this Mesh whose non-halo (external) counterpart is held on processor p. More...
 
void add_external_halo_node_pt (const unsigned &p, Node *&nod_pt)
 Add external halo node whose non-halo (external) counterpart is held on processor p to the storage scheme for halo nodes. More...
 
Node *& external_halo_node_pt (const unsigned &p, const unsigned &j)
 Access fct to the j-th external halo node in this Mesh whose non-halo external counterpart is held on processor p. More...
 
Vector< Node * > external_halo_node_pt (const unsigned &p)
 Access fct to vector of external halo node in this Mesh whose non-halo external counterpart is held on processor p. (read only) More...
 
void set_external_halo_node_pt (const unsigned &p, const Vector< Node * > &external_halo_node_pt)
 Set vector of external halo node in this Mesh whose non-halo external counterpart is held on processor p. More...
 
void null_external_halo_node (const unsigned &p, Node *nod_pt)
 Null out specified external halo node (used when deleting duplicates) More...
 
void remove_null_pointers_from_external_halo_node_storage ()
 Consolidate external halo node storage by removing nulled out pointes in external halo and haloed schemes. More...
 
unsigned nexternal_haloed_node ()
 Total number of external haloed nodes in this Mesh. More...
 
unsigned nexternal_haloed_node (const unsigned &p)
 Number of external haloed nodes in this Mesh whose halo (external) counterpart is held on processor p. More...
 
Node *& external_haloed_node_pt (const unsigned &p, const unsigned &j)
 Access fct to the j-th external haloed node in this Mesh whose halo external counterpart is held on processor p. More...
 
unsigned add_external_haloed_node_pt (const unsigned &p, Node *&nod_pt)
 Add external haloed node whose halo (external) counterpart is held on processor p to the storage scheme for haloed nodes. More...
 
Vector< Node * > external_haloed_node_pt (const unsigned &p)
 Access fct to vector of external haloed node in this Mesh whose halo external counterpart is held on processor p. (read only) More...
 
void set_external_haloed_node_pt (const unsigned &p, const Vector< Node * > &external_haloed_node_pt)
 Set vector of external haloed node in this Mesh whose halo external counterpart is held on processor p. More...
 
std::set< int > external_halo_proc ()
 Return the set of processors that hold external halo nodes. This is required to avoid having to pass a communicator into the node_update functions for Algebraic-based and MacroElement-based Meshes. More...
 
void delete_all_external_storage ()
 Wipe the storage for all externally-based elements. More...
 
- Public Member Functions inherited from oomph::RefineableMeshBase
bool adapt_flag ()
 
 RefineableMeshBase ()
 
 RefineableMeshBase (const RefineableMeshBase &dummy)
 Broken copy constructor. More...
 
void operator= (const RefineableMeshBase &)
 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 ()
 Number of elements that would have liked to be refined further but can't because they've reached the max. refinement level. More...
 
unsigned & max_keep_unrefined ()
 Max. number of elements that we allow to remain unrefined if no other mesh adaptation is required (to avoid mesh-adaptations that would only unrefine a few elements and then force a new solve – this can't be worth our while!) More...
 
ErrorEstimator *& spatial_error_estimator_pt ()
 Access to spatial error estimator. More...
 
ErrorEstimatorspatial_error_estimator_pt () const
 Access to spatial error estimator (const version. More...
 
double & min_permitted_error ()
 Access fct for min. error (i.e. (try to) merge elements if their error is smaller) More...
 
double & max_permitted_error ()
 Access fct for max. error (i.e. split elements if their error is larger) More...
 
double & min_error ()
 Access fct for min. actual error in present solution (i.e. before re-solve on adapted mesh) More...
 
double & max_error ()
 Access fct for max. actual error in present solution (i.e. before re-solve on adapted mesh) More...
 
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...
 
virtual void p_adapt (const Vector< double > &elemental_error)
 p-adapt mesh: Refine elements whose error is lager than err_max and (try to) unrefine those whose error is smaller than err_min More...
 
virtual void refine_uniformly ()
 Refine mesh uniformly. More...
 
virtual void p_refine_uniformly (DocInfo &doc_info)
 p-refine mesh uniformly and doc process More...
 
virtual void p_refine_uniformly ()
 p-refine mesh uniformly More...
 
void p_unrefine_uniformly (DocInfo &doc_info)
 p-unrefine mesh uniformly More...
 

Protected Member Functions

 RefineableTriangleMesh (const Vector< double > &target_area, TriangulateIO &triangulate_io, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper, const bool &use_attributes=false, const bool &allow_automatic_creation_of_vertices_on_boundaries=true, OomphCommunicator *comm_pt=0)
 Build mesh from specified triangulation and associated target areas for elements in it NOTE: This is used ONLY during adaptation and should not be used as a method of constructing a TriangleMesh object in demo drivers! More...
 
const bool boundary_connections (const unsigned &b, const unsigned &c, std::set< Vector< double > > &vertices)
 Verifies if the given boundary receives a connection, and if that is the case then returns the list of vertices that receive the connections. More...
 
const void synchronize_shared_boundary_connections ()
 Synchronise the vertices that are marked for non deletion. More...
 
void add_vertices_for_non_deletion ()
 Mark the vertices that are not allowed for deletion by the unrefienment/refinement polyline methods. In charge of filling the Boundary_chunk_connections_pt structure. More...
 
void add_non_delete_vertices_from_boundary_helper (Vector< Vector< Node * > > src_bound_segment_node_pt, Vector< Vector< Node * > > dst_bound_segment_node_pt, const unsigned &dst_bnd_id, const unsigned &dst_bnd_chunk)
 Adds the vertices from the sources boundary that are repeated in the destination boundary to the list of non delete-able vertices in the destination boundary. More...
 
void create_temporary_boundary_connections (Vector< TriangleMeshPolygon * > &tmp_outer_polygons_pt, Vector< TriangleMeshOpenCurve * > &tmp_open_curves_pt)
 After unrefinement and refinement has taken place compute the new vertices numbers of the temporary representation of the. More...
 
void restore_boundary_connections (Vector< TriangleMeshPolyLine * > &resume_initial_connection_polyline_pt, Vector< TriangleMeshPolyLine * > &resume_final_connection_polyline_pt)
 After unrefinement and refinement has taken place compute the new vertices numbers of the boundaries to connect (in a distributed scheme it may be possible that the destination boundary does no longer exist, therefore the connection is suspended and resumed after the adaptation processor. More...
 
void restore_polyline_connections_helper (TriangleMeshPolyLine *polyline_pt, Vector< TriangleMeshPolyLine * > &resume_initial_connection_polyline_pt, Vector< TriangleMeshPolyLine * > &resume_final_connection_polyline_pt)
 Restore the connections of the specific polyline The vertices numbering on the destination boundaries may have change because of (un)refinement in the destination boundaries. Also deals with connection that do not longer exist because the destination boundary does no longer exist because of the distribution process. More...
 
void resume_boundary_connections (Vector< TriangleMeshPolyLine * > &resume_initial_connection_polyline_pt, Vector< TriangleMeshPolyLine * > &resume_final_connection_polyline_pt)
 Resume the boundary connections that may have been suspended because the destination boundary is no part of the domain. The connections are no permanently suspended because if load balance takes place the destination boundary may be part of the new domain representation therefore the connection would exist. More...
 
bool get_connected_vertex_number_on_dst_boundary (Vector< double > &vertex_coordinates, const unsigned &dst_b_id, unsigned &vertex_number)
 Computes the associated vertex number on the destination boundary. More...
 
bool unrefine_boundary (const unsigned &b, const unsigned &c, Vector< Vector< double > > &vector_bnd_vertices, double &unrefinement_tolerance, const bool &check_only=false)
 Helper function that performs the unrefinement process. More...
 
bool refine_boundary (Mesh *face_mesh_pt, Vector< Vector< double > > &vector_bnd_vertices, double &refinement_tolerance, const bool &check_only=false)
 Helper function that performs the refinement process on the specified boundary by using the provided vertices representation. Optional boolean is used to run it as test only (if true is specified as input) in which case vertex coordinates aren't actually modified. Returned boolean indicates if polyline was (or would have been – if called with check_only=false) changed. More...
 
bool apply_max_length_constraint (Mesh *face_mesh_pt, Vector< Vector< double > > &vector_bnd_vertices, double &max_length_constraint)
 
bool unrefine_boundary_constrained_by_target_area (const unsigned &b, const unsigned &c, Vector< Vector< double > > &vector_bnd_vertices, double &unrefinement_tolerance, Vector< double > &area_constraint)
 Helper function that performs the unrefinement process on the specified boundary by using the provided vertices representation and the associated target area. Used only when the 'allow_automatic_creation_of_vertices_on_boundaries' flag is set to true. More...
 
bool refine_boundary_constrained_by_target_area (MeshAsGeomObject *mesh_geom_obj_pt, Vector< Vector< double > > &vector_bnd_vertices, double &refinement_tolerance, Vector< double > &area_constraint)
 Helper function that performs the refinement process on the specified boundary by using the provided vertices representation and the associated elements target area. Used only when the 'allow_automatic_creation_of_vertices_on_boundaries' flag is set to true. More...
 
bool unrefine_shared_boundary_constrained_by_target_area (const unsigned &b, const unsigned &c, Vector< Vector< double > > &vector_bnd_vertices, Vector< double > &area_constraint)
 Helper function that performs the unrefinement process on the specified boundary by using the provided vertices representation and the associated target area. NOTE: This is the version that applies unrefinement to shared boundaries. More...
 
bool refine_shared_boundary_constrained_by_target_area (Vector< Vector< double > > &vector_bnd_vertices, Vector< double > &area_constraint)
 Helper function that performs the refinement process on the specified boundary by using the provided vertices representation and the associated elements target area. NOTE: This is the version that applies refinement to shared boundaries. More...
 
void initialise_boundary_refinement_data ()
 
void sort_nodes_on_shared_boundaries ()
 
void reset_shared_boundary_elements_and_nodes (const bool flush_elements=true, const bool update_elements=true, const bool flush_nodes=true, const bool update_nodes=true)
 
void reset_halo_haloed_scheme ()
 
void compute_global_node_names_and_shared_nodes (Vector< Vector< Vector< std::map< unsigned, Node * > > > > &other_proc_shd_bnd_node_pt, Vector< Vector< Vector< unsigned > > > &global_node_names, std::map< Vector< unsigned >, unsigned > &node_name_to_global_index, Vector< Node * > &global_shared_node_pt)
 
void send_boundary_node_info_of_shared_nodes (Vector< Vector< Vector< unsigned > > > &global_node_names, std::map< Vector< unsigned >, unsigned > &node_name_to_global_index, Vector< Node * > &global_shared_node_pt)
 
void reset_halo_haloed_scheme_helper (Vector< Vector< Vector< std::map< unsigned, Node * > > > > &other_proc_shd_bnd_node_pt, Vector< Vector< Node * > > &iproc_currently_created_nodes_pt, Vector< Vector< Vector< unsigned > > > &global_node_names, std::map< Vector< unsigned >, unsigned > &node_name_to_global_index, Vector< Node * > &global_shared_node_pt)
 
unsigned try_to_add_element_pt_load_balance (Vector< FiniteElement * > &new_elements_on_domain, FiniteElement *&ele_pt)
 
void get_required_elemental_information_load_balance_helper (unsigned &iproc, Vector< Vector< FiniteElement * > > &f_haloed_ele_pt, FiniteElement *ele_pt)
 Helper function to get the required elemental information from the element to be sent. This info. involves the association of the element to a boundary or region, and if its part of the halo(ed) elements within a processor. More...
 
unsigned try_to_add_node_pt_load_balance (Vector< Node * > &new_nodes_on_domain, Node *&node_pt)
 
void add_node_load_balance_helper (unsigned &iproc, Vector< Vector< FiniteElement * > > &f_halo_ele_pt, Vector< Node * > &new_nodes_on_domain, Node *nod_pt)
 Helper function to add haloed node. More...
 
void get_required_nodal_information_load_balance_helper (Vector< Vector< FiniteElement * > > &f_halo_ele_pt, unsigned &iproc, Node *nod_pt)
 Helper function to get the required nodal information from an haloed node so that a fully-functional node (and therefore element) can be created on the receiving process (this is the specific version for the load balance strategy, the difference with the original method is that it checks if the node is on a shared boundary no associated with the current processor –my_rank–, or in a haloed element from other processors. More...
 
void create_element_load_balance_helper (unsigned &iproc, Vector< Vector< FiniteElement * > > &f_haloed_ele_pt, Vector< Vector< std::map< unsigned, FiniteElement * > > > &received_old_haloed_element_pt, Vector< FiniteElement * > &new_elements_on_domain, Vector< Node * > &new_nodes_on_domain, Vector< Vector< Vector< std::map< unsigned, Node * > > > > &other_proc_shd_bnd_node_pt, Vector< Vector< Vector< unsigned > > > &global_node_names, std::map< Vector< unsigned >, unsigned > &node_name_to_global_index, Vector< Node * > &global_shared_node_pt)
 Helper function to create elements on the loop process based on the info received in send_and_received_elements_nodes_info. More...
 
void add_element_load_balance_helper (const unsigned &iproc, Vector< Vector< std::map< unsigned, FiniteElement * > > > &received_old_haloed_element_pt, FiniteElement *ele_pt)
 Helper function to create elements on the loop process based on the info received in send_and_received_elements_nodes_info This function is in charge of verify if the element is associated to a boundary and associate to it if that is the case. More...
 
void add_received_node_load_balance_helper (Node *&new_nod_pt, Vector< Vector< FiniteElement * > > &f_haloed_ele_pt, Vector< Vector< std::map< unsigned, FiniteElement * > > > &received_old_haloed_element_pt, Vector< Node * > &new_nodes_on_domain, Vector< Vector< Vector< std::map< unsigned, Node * > > > > &other_proc_shd_bnd_node_pt, unsigned &iproc, unsigned &node_index, FiniteElement *const &new_el_pt, Vector< Vector< Vector< unsigned > > > &global_node_names, std::map< Vector< unsigned >, unsigned > &node_name_to_global_index, Vector< Node * > &global_shared_node_pt)
 Helper function to add a new node from load balance. More...
 
void construct_new_node_load_balance_helper (Node *&new_nod_pt, Vector< Vector< FiniteElement * > > &f_haloed_ele_pt, Vector< Vector< std::map< unsigned, FiniteElement * > > > &received_old_haloed_element_pt, Vector< Node * > &new_nodes_on_domain, Vector< Vector< Vector< std::map< unsigned, Node * > > > > &other_proc_shd_bnd_node_pt, unsigned &iproc, unsigned &node_index, FiniteElement *const &new_el_pt, Vector< Vector< Vector< unsigned > > > &global_node_names, std::map< Vector< unsigned >, unsigned > &node_name_to_global_index, Vector< Node * > &global_shared_node_pt)
 Helper function which constructs a new node (on an element) with the information sent from the load balance process. More...
 
unsigned try_to_add_root_haloed_element_pt (const unsigned &p, GeneralisedElement *&el_pt)
 
unsigned try_to_add_haloed_node_pt (const unsigned &p, Node *&nod_pt)
 
void get_required_elemental_information_helper (unsigned &iproc, FiniteElement *ele_pt)
 Helper function to get the required elemental information from an haloed element. This info. involves the association of the element to a boundary or region. More...
 
void get_required_nodal_information_helper (unsigned &iproc, Node *nod_pt)
 Helper function to get the required nodal information from a haloed node so that a fully-functional halo node (and therefore element) can be created on the receiving process. More...
 
void add_haloed_node_helper (unsigned &iproc, Node *nod_pt)
 Helper function to add haloed node. More...
 
void send_and_receive_elements_nodes_info (int &send_proc, int &recv_proc)
 Helper function to send back halo and haloed information. More...
 
void create_halo_element (unsigned &iproc, Vector< Node * > &new_nodes_on_domain, Vector< Vector< Vector< std::map< unsigned, Node * > > > > &other_proc_shd_bnd_node_pt, Vector< Vector< Vector< unsigned > > > &global_node_names, std::map< Vector< unsigned >, unsigned > &node_name_to_global_index, Vector< Node * > &global_shared_node_pt)
 Helper function to create (halo) elements on the loop process based on the info received in send_and_received_located_info. More...
 
void add_halo_element_helper (unsigned &iproc, FiniteElement *ele_pt)
 Helper function to create (halo) elements on the loop process based on the info received in send_and_received_located_info This function is in charge of verify if the element is associated to a boundary. More...
 
void add_halo_node_helper (Node *&new_nod_pt, Vector< Node * > &new_nodes_on_domain, Vector< Vector< Vector< std::map< unsigned, Node * > > > > &other_proc_shd_bnd_node_pt, unsigned &iproc, unsigned &node_index, FiniteElement *const &new_el_pt, Vector< Vector< Vector< unsigned > > > &global_node_names, std::map< Vector< unsigned >, unsigned > &node_name_to_global_index, Vector< Node * > &global_shared_node_pt)
 Helper function to add halo node. More...
 
void construct_new_halo_node_helper (Node *&new_nod_pt, Vector< Node * > &new_nodes_on_domain, Vector< Vector< Vector< std::map< unsigned, Node * > > > > &other_proc_shd_bnd_node_pt, unsigned &iproc, unsigned &node_index, FiniteElement *const &new_el_pt, Vector< Vector< Vector< unsigned > > > &global_node_names, std::map< Vector< unsigned >, unsigned > &node_name_to_global_index, Vector< Node * > &global_shared_node_pt)
 Helper function which constructs a new halo node (on an element) with the information sent from the haloed process. More...
 
void update_other_proc_shd_bnd_node_helper (Node *&new_nod_pt, Vector< Vector< Vector< std::map< unsigned, Node * > > > > &other_proc_shd_bnd_node_pt, Vector< unsigned > &other_processor_1, Vector< unsigned > &other_processor_2, Vector< unsigned > &other_shared_boundaries, Vector< unsigned > &other_indexes, Vector< Vector< Vector< unsigned > > > &global_node_names, std::map< Vector< unsigned >, unsigned > &node_name_to_global_index, Vector< Node * > &global_shared_node_pt)
 
bool update_polygon_using_face_mesh (TriangleMeshPolygon *polygon_pt, const bool &check_only=false)
 Helper function that updates the input polygon's PSLG by using the end-points of elements from FaceMesh(es) that are constructed for the boundaries associated with the segments of the polygon. Optional boolean is used to run it as test only (if true is specified as input) in which case polygon isn't actually modified. Returned boolean indicates if polygon was (or would have been – if called with check_only=false) changed. More...
 
bool update_open_curve_using_face_mesh (TriangleMeshOpenCurve *open_polyline_pt, const bool &check_only=false)
 Helper function that updates the input open curve by using end-points of elements from FaceMesh(es) that are constructed for the boundaries associated with the polylines. Optional boolean is used to run it as test only (if true is specified as input) in which case the polylines are not actually modified. Returned boolean indicates if polylines were (or would have been – if called with check_only=false) changed. More...
 
virtual bool surface_remesh_for_inner_hole_boundaries (Vector< Vector< double > > &internal_point_coord, const bool &check_only=false)
 Generate a new PSLG representation of the inner hole boundaries. Optional boolean is used to run it as test only (if true is specified as input) in which case PSLG isn't actually modified. Returned boolean indicates if PSLG was (or would have been – if called with check_only=false) changed. More...
 
void snap_nodes_onto_boundary (RefineableTriangleMesh< ELEMENT > *&new_mesh_pt, const unsigned &b)
 Snap the boundary nodes onto any curvilinear boundaries. More...
 
void create_unsorted_face_mesh_representation (const unsigned &boundary_id, Mesh *face_mesh_pt)
 Helper function Creates an unsorted face mesh representation from the specified boundary id. It means that the elements are not sorted along the boundary. More...
 
void create_sorted_face_mesh_representation (const unsigned &boundary_id, Mesh *face_mesh_pt, std::map< FiniteElement *, bool > &is_inverted, bool &inverted_face_mesh)
 Helper function Creates a sorted face mesh representation of the specified PolyLine It means that the elements are sorted along the boundary It also returns a map that indicated the inverted elements. More...
 
void get_face_mesh_representation (TriangleMeshPolygon *polygon_pt, Vector< Mesh * > &face_mesh_pt)
 Helper function to construct face mesh representation of all polylines, possibly with segments re-distributed between polylines to maintain an appxroximately even sub-division of the polygon. More...
 
void get_face_mesh_representation (TriangleMeshOpenCurve *open_polyline_pt, Vector< Mesh * > &face_mesh_pt)
 Helper function to construct face mesh representation of open curves. More...
 
void update_polygon_after_restart (TriangleMeshPolygon *&polygon_pt)
 Updates the polylines representation after restart. More...
 
void update_open_curve_after_restart (TriangleMeshOpenCurve *&open_curve_pt)
 Updates the open curve representation after restart. More...
 
bool update_polygon_using_elements_area (TriangleMeshPolygon *&polygon_pt, const Vector< double > &target_area)
 Updates the polylines using the elements area as constraint for the number of points along the boundaries. More...
 
bool update_open_curve_using_elements_area (TriangleMeshOpenCurve *&open_curve_pt, const Vector< double > &target_area)
 Updates the open curve but using the elements area instead of the default refinement and unrefinement methods. More...
 
bool update_shared_curve_using_elements_area (Vector< TriangleMeshPolyLine * > &vector_polyline_pt, const Vector< double > &target_areas)
 Updates the polylines using the elements area as constraint for the number of points along the boundaries. More...
 
void update_shared_curve_after_restart (Vector< TriangleMeshPolyLine * > &vector_polyline_pt)
 Updates the shared polylines representation after restart. More...
 
void initialise_adaptation_data ()
 Helper function to initialise data associated with adaptation. More...
 
void refine_triangulateio (TriangulateIO &triangulate_io, const Vector< double > &target_area, TriangulateIO &triangle_refine)
 Build a new TriangulateIO object from previous TriangulateIO based on target area for each element. More...
 
double compute_area_target (const Vector< double > &elem_error, Vector< double > &target_area)
 Compute target area based on the element's error and the error target; return minimum angle (in degrees) More...
 
- Protected Member Functions inherited from oomph::TriangleMesh< ELEMENT >
void build_from_scaffold (TimeStepper *time_stepper_pt, const bool &use_attributes)
 Build mesh from scaffold. More...
 
void build_triangulateio (const std::string &poly_file_name, TriangulateIO &triangulate_io, bool &use_attributes)
 Helper function to create TriangulateIO object (return in triangulate_io) from the .poly file. More...
 
void generic_constructor (Vector< TriangleMeshPolygon * > &outer_boundary_pt, Vector< TriangleMeshPolygon * > &internal_polygon_pt, Vector< TriangleMeshOpenCurve * > &open_polylines_pt, const double &element_area, Vector< Vector< double > > &extra_holes_coordinates, std::map< unsigned, Vector< double > > &regions_coordinates, std::map< unsigned, double > &regions_areas, TimeStepper *time_stepper_pt, const bool &use_attributes, const bool &refine_boundary, const bool &refine_internal_boundary)
 A general-purpose construction function that builds the mesh once the different specific constructors have assembled the appropriate information. More...
 
void shared_boundaries_in_this_processor (Vector< unsigned > &shared_boundaries_in_this_processor)
 
const unsigned nshared_boundaries (const unsigned &p, const unsigned &q) const
 
Vector< Vector< Vector
< unsigned > > > 
shared_boundaries_ids () const
 
Vector< Vector< Vector
< unsigned > > > & 
shared_boundaries_ids ()
 
Vector< Vector< unsigned > > shared_boundaries_ids (const unsigned &p) const
 
Vector< Vector< unsigned > > & shared_boundaries_ids (const unsigned &p)
 
Vector< unsigned > shared_boundaries_ids (const unsigned &p, const unsigned &q) const
 
Vector< unsigned > & shared_boundaries_ids (const unsigned &p, const unsigned &q)
 
const unsigned shared_boundaries_ids (const unsigned &p, const unsigned &q, const unsigned &i) const
 
const unsigned nshared_boundary_curves (const unsigned &p) const
 
const unsigned nshared_boundary_polyline (const unsigned &p, const unsigned &c) const
 
Vector< TriangleMeshPolyLine * > & shared_boundary_polyline_pt (const unsigned &p, const unsigned &c)
 
TriangleMeshPolyLineshared_boundary_polyline_pt (const unsigned &p, const unsigned &c, const unsigned &i) const
 
const unsigned nshared_boundaries () const
 
const unsigned nshared_boundary_element (const unsigned &b)
 
void flush_shared_boundary_element ()
 
void flush_shared_boundary_element (const unsigned &b)
 
void add_shared_boundary_element (const unsigned &b, FiniteElement *ele_pt)
 
FiniteElementshared_boundary_element_pt (const unsigned &b, const unsigned &e)
 
void flush_face_index_at_shared_boundary ()
 
void add_face_index_at_shared_boundary (const unsigned &b, const unsigned &i)
 
int face_index_at_shared_boundary (const unsigned &b, const unsigned &e)
 
const unsigned nshared_boundary_node (const unsigned &b)
 
void flush_shared_boundary_node ()
 
void flush_shared_boundary_node (const unsigned &b)
 
void add_shared_boundary_node (const unsigned &b, Node *node_pt)
 
Nodeshared_boundary_node_pt (const unsigned &b, const unsigned &n)
 
bool is_node_on_shared_boundary (const unsigned &b, Node *const &node_pt)
 
std::map< unsigned, Vector
< unsigned > > & 
shared_boundary_from_processors ()
 
Vector< unsigned > & shared_boundary_from_processors (const unsigned &b)
 
const unsigned nshared_boundary_overlaps_internal_boundary ()
 
const bool shared_boundary_overlaps_internal_boundary (const unsigned &shd_bnd_id)
 
const unsigned shared_boundary_overlapping_internal_boundary (const unsigned &shd_bnd_id)
 
void get_shared_boundaries_overlapping_internal_boundary (const unsigned &internal_bnd_id, Vector< unsigned > &shd_bnd_ids)
 
std::map< unsigned, unsigned > & shared_boundary_overlaps_internal_boundary ()
 
const bool boundary_was_splitted (const unsigned &b)
 
const unsigned nboundary_subpolylines (const unsigned &b)
 
Vector< TriangleMeshPolyLine * > & boundary_subpolylines (const unsigned &b)
 
const bool boundary_marked_as_shared_boundary (const unsigned &b, const unsigned &isub)
 
void flush_shared_boundary_polyline_pt ()
 
void create_distributed_domain_representation (Vector< TriangleMeshPolygon * > &polygons_pt, Vector< TriangleMeshOpenCurve * > &open_curves_pt)
 
void sort_polylines_helper (Vector< TriangleMeshPolyLine * > &unsorted_polylines_pt, Vector< Vector< TriangleMeshPolyLine * > > &sorted_polylines_pt)
 
void create_tmp_polygons_helper (Vector< Vector< TriangleMeshPolyLine * > > &polylines_pt, Vector< TriangleMeshPolygon * > &polygons_pt)
 
void create_tmp_open_curves_helper (Vector< Vector< TriangleMeshPolyLine * > > &sorted_open_curves_pt, Vector< TriangleMeshPolyLine * > &unsorted_shared_to_internal_poly_pt, Vector< TriangleMeshOpenCurve * > &open_curves_pt)
 
void compute_holes_left_by_halo_elements_helper (Vector< Vector< double > > &output_holes_coordinates)
 
void update_holes_information_helper (Vector< TriangleMeshPolygon * > &polygons_pt, Vector< Vector< double > > &output_holes_coordinates)
 
const int check_connections_of_polyline_nodes (std::set< FiniteElement * > &element_in_processor_pt, const int &root_edge_bnd_id, std::map< std::pair< Node *, Node * >, bool > &overlapped_face, std::map< unsigned, std::map< Node *, bool > > &node_on_bnd_not_overlapped_by_shd_bnd, std::list< Node * > &current_polyline_nodes, std::map< unsigned, std::list< Node * > > &shared_bnd_id_to_sorted_list_node_pt, const unsigned &node_degree, Node *&new_node_pt, const bool called_from_load_balance=false)
 
void create_shared_polylines_connections ()
 
void create_shared_boundaries (OomphCommunicator *comm_pt, const Vector< unsigned > &element_domain, const Vector< GeneralisedElement * > &backed_up_el_pt, const Vector< FiniteElement * > &backed_up_f_el_pt, std::map< Data *, std::set< unsigned > > &processors_associated_with_data, const bool &overrule_keep_as_halo_element_status)
 Creates the shared boundaries. More...
 
void get_halo_elements_on_all_procs (const unsigned &nproc, const Vector< unsigned > &element_domain, const Vector< GeneralisedElement * > &backed_up_el_pt, std::map< Data *, std::set< unsigned > > &processors_associated_with_data, const bool &overrule_keep_as_halo_element_status, std::map< GeneralisedElement *, unsigned > &element_to_global_index, Vector< Vector< Vector< GeneralisedElement * > > > &output_halo_elements_pt)
 Creates the halo elements on all processors Gets the halo elements on all processors, these elements are then used on the function that computes the shared boundaries among the processors. More...
 
void get_element_edges_on_boundary (std::map< std::pair< Node *, Node * >, unsigned > &element_edges_on_boundary)
 
void create_polylines_from_halo_elements_helper (const Vector< unsigned > &element_domain, std::map< GeneralisedElement *, unsigned > &element_to_global_index, std::set< FiniteElement * > &element_in_processor_pt, Vector< Vector< Vector< GeneralisedElement * > > > &input_halo_elements, std::map< std::pair< Node *, Node * >, unsigned > &elements_edges_on_boundary, Vector< Vector< Vector< TriangleMeshPolyLine * > > > &output_polylines_pt)
 
void break_loops_on_shared_polyline_helper (const unsigned &initial_shd_bnd_id, std::list< Node * > &input_nodes, Vector< FiniteElement * > &input_boundary_element_pt, Vector< int > &input_face_index_element, const int &input_connect_to_the_left, const int &input_connect_to_the_right, Vector< std::list< Node * > > &output_sorted_nodes_pt, Vector< Vector< FiniteElement * > > &output_boundary_element_pt, Vector< Vector< int > > &output_face_index_element, Vector< int > &output_connect_to_the_left, Vector< int > &output_connect_to_the_right)
 
void break_loops_on_shared_polyline_load_balance_helper (const unsigned &initial_shd_bnd_id, std::list< Node * > &input_nodes, Vector< FiniteElement * > &input_boundary_element_pt, Vector< FiniteElement * > &input_boundary_face_element_pt, Vector< int > &input_face_index_element, const int &input_connect_to_the_left, const int &input_connect_to_the_right, Vector< std::list< Node * > > &output_sorted_nodes_pt, Vector< Vector< FiniteElement * > > &output_boundary_element_pt, Vector< Vector< FiniteElement * > > &output_boundary_face_element_pt, Vector< Vector< int > > &output_face_index_element, Vector< int > &output_connect_to_the_left, Vector< int > &output_connect_to_the_right)
 
void create_shared_polyline (const unsigned &my_rank, const unsigned &shd_bnd_id, const unsigned &iproc, const unsigned &jproc, std::list< Node * > &sorted_nodes, const int &root_edge_bnd_id, Vector< FiniteElement * > &bulk_bnd_ele_pt, Vector< int > &face_index_ele, Vector< Vector< TriangleMeshPolyLine * > > &unsorted_polylines_pt, const int &connect_to_the_left_flag, const int &connect_to_the_right_flag)
 
- Protected Member Functions inherited from oomph::UnstructuredTwoDMeshGeometryBase
void build_triangulateio (Vector< TriangleMeshPolygon * > &outer_polygons_pt, Vector< TriangleMeshPolygon * > &internal_polygons_pt, Vector< TriangleMeshOpenCurve * > &open_curves_pt, Vector< Vector< double > > &extra_holes_coordinates, std::map< unsigned, Vector< double > > &regions_coordinates, std::map< unsigned, double > &regions_areas, TriangulateIO &triangulate_io)
 Create TriangulateIO object from outer boundaries, internal boundaries, and open curves. Add the holes and regions information as well. More...
 
void add_connection_matrix_info_helper (TriangleMeshPolyLine *polyline_pt, std::map< unsigned, std::map< unsigned, Vector< vertex_connection_info > > > &connection_matrix, TriangleMeshPolyLine *next_polyline_pt=0)
 Helps to add information to the connection matrix of the given polyline. More...
 
void initialise_base_vertex (TriangleMeshPolyLine *polyline_pt, std::map< unsigned, std::map< unsigned, Vector< base_vertex_info > > > &base_vertices)
 Initialise the base vertex structure, set every vertex to no visited and not being a base vertex. More...
 
void add_base_vertex_info_helper (TriangleMeshPolyLine *polyline_pt, std::map< unsigned, std::map< unsigned, Vector< base_vertex_info > > > &base_vertices, std::map< unsigned, std::map< unsigned, Vector< vertex_connection_info > > > &connection_matrix, std::map< unsigned, std::map< unsigned, unsigned > > &boundary_chunk_nvertices)
 Helps to identify the base vertex of the given polyline. More...
 
void snap_nodes_onto_geometric_objects ()
 Snap the boundary nodes onto any curvilinear boundaries defined by geometric objects. More...
 
void copy_connection_information (TriangleMeshCurveSection *input_curve_pt, TriangleMeshCurveSection *output_curve_pt)
 Helper function to copy the connection information from the input curve(polyline or curviline) to the output polyline. More...
 
void copy_connection_information_to_sub_polylines (TriangleMeshCurveSection *input_curve_pt, TriangleMeshCurveSection *output_curve_pt)
 Helper function to copy the connection information from the input curve(polyline or curviline) to the output sub-polyline. More...
 
void create_vertex_coordinates_for_polyline_no_connections (TriangleMeshCurviLine *boundary_pt, Vector< Vector< double > > &vertex_coord, Vector< std::pair< double, double > > &polygonal_vertex_arclength_info)
 Helper function to create polyline vertex coordinates for curvilinear boundary specified by boundary_pt, using either equal increments in zeta or in (approximate) arclength along the curviline. vertex_coord[i_vertex][i_dim] stores i_dim-th coordinate of i_vertex-th vertex. polygonal_vertex_arclength_info[i_vertex] contains the pair of doubles made of the arclength of the i_vertex-th vertex along the polygonal representation (.first), and the corresponding coordinate on the GeomObject (.second) More...
 
void create_vertex_coordinates_for_polyline_connections (TriangleMeshCurviLine *boundary_pt, Vector< Vector< double > > &vertex_coord, Vector< std::pair< double, double > > &polygonal_vertex_arclength_info)
 Helper function to create polyline vertex coordinates for curvilinear boundary specified by boundary_pt, using either equal increments in zeta or in (approximate) arclength along the curviline. vertex_coord[i_vertex][i_dim] stores i_dim-th coordinate of i_vertex-th vertex. polygonal_vertex_arclength_info[i_vertex] contains the pair of doubles made of the arclength of the i_vertex-th vertex along the polygonal representation (.first), and the corresponding coordinate on the GeomObject (.second) More...
 
TriangleMeshPolygonclosed_curve_to_polygon_helper (TriangleMeshClosedCurve *closed_curve_pt, unsigned &max_bnd_id_local)
 Helper function that returns a polygon representation for the given closed curve, it also computes the maximum boundary id of the constituent curves. If the TriangleMeshClosedCurve is already a TriangleMeshPolygon we simply return a pointer to it. Otherwise a new TrilangleMeshPolygon is created – this is deleted automatically when the TriangleMesh destructor is called, so no external book-keeping is required. More...
 
TriangleMeshOpenCurvecreate_open_curve_with_polyline_helper (TriangleMeshOpenCurve *open_curve_pt, unsigned &max_bnd_id_local)
 Helper function that creates and returns an open curve with the polyline representation of its constituent curve sections. The new created open curve is deleted when the TriangleMesh destructor is called. More...
 
void set_geom_objects_and_coordinate_limits_for_close_curve (TriangleMeshClosedCurve *input_closed_curve_pt)
 Stores the geometric objects associated to the curve sections that compound the closed curve. It also stores the limits defined by these geometric objects. More...
 
void set_geom_objects_and_coordinate_limits_for_open_curve (TriangleMeshOpenCurve *input_open_curve_pt)
 Stores the geometric objects associated to the curve sections that compound the open curve. It also stores the limits defined by these geometric objects. More...
 
- Protected Member Functions inherited from oomph::Mesh
void setup_shared_node_scheme ()
 Setup shared node scheme. More...
 
unsigned long assign_global_eqn_numbers (Vector< double * > &Dof_pt)
 Assign the global equation numbers in the Data stored at the nodes and also internal element Data. Also, build (via push_back) the Vector of pointers to the dofs (variables). More...
 
void describe_dofs (std::ostream &out, const std::string &current_string) const
 Function to describe the dofs of the Mesh. The ostream specifies the output stream to which the description is written; the string stores the currently assembled output that is ultimately written to the output stream by Data::describe_dofs(...); it is typically built up incrementally as we descend through the call hierarchy of this function when called from Problem::describe_dofs(...) More...
 
void describe_local_dofs (std::ostream &out, const std::string &current_string) const
 Function to describe the local dofs of the elements. The ostream specifies the output stream to which the description is written; the string stores the currently assembled output that is ultimately written to the output stream by Data::describe_dofs(...); it is typically built up incrementally as we descend through the call hierarchy of this function when called from Problem::describe_dofs(...) More...
 
void assign_local_eqn_numbers (const bool &store_local_dof_pt)
 Assign the local equation numbers in all elements If the boolean argument is true then also store pointers to dofs. More...
 
void convert_to_boundary_node (Node *&node_pt, const Vector< FiniteElement * > &finite_element_pt)
 A function that upgrades an ordinary node to a boundary node We shouldn't ever really use this, but it does make life that bit easier for the lazy mesh writer. The pointer to the node is replaced by a pointer to the new boundary node in all element look-up schemes and in the mesh's Node_pt vector. The new node is also addressed by node_pt on return from the function. More...
 
void convert_to_boundary_node (Node *&node_pt)
 

Protected Attributes

std::map< unsigned, std::set
< Vector< double > > > 
Boundary_connections_pt
 
bool Do_boundary_unrefinement_constrained_by_target_areas
 
bool Do_boundary_refinement_constrained_by_target_areas
 
bool Do_shared_boundary_unrefinement_constrained_by_target_areas
 
bool Do_shared_boundary_refinement_constrained_by_target_areas
 
std::map< unsigned, Vector
< Node * > > 
Sorted_shared_boundary_node_pt
 
Vector< double > Flat_packed_doubles
 Vector of flat-packed doubles to be communicated with other processors. More...
 
unsigned Counter_for_flat_packed_doubles
 Counter used when processing vector of flat-packed doubles. More...
 
Vector< unsigned > Flat_packed_unsigneds
 Vector of flat-packed unsigneds to be communicated with other processors. More...
 
unsigned Counter_for_flat_packed_unsigneds
 Counter used when processing vector of flat-packed unsigneds. More...
 
Vector< std::string > Flat_packed_unsigneds_string
 
unsigned Nbin_x_for_area_transfer
 Number of bins in the x-direction when transferring target areas by bin method. More...
 
unsigned Nbin_y_for_area_transfer
 Number of bins in the y-direction when transferring target areas by bin method. More...
 
unsigned Nbin_x_for_projection
 Number of bins in the x-direction when projecting the solution from the old mesh into the new mesh. More...
 
unsigned Nbin_y_for_projection
 Number of bins in the y-direction when projecting the solution from the old mesh into the new mesh. More...
 
double Max_element_size
 Max permitted element size. More...
 
double Min_element_size
 Min permitted element size. More...
 
double Min_permitted_angle
 Min angle before remesh gets triggered. More...
 
bool Disable_projection
 Enable/disable solution projection during adaptation. More...
 
bool Use_iterative_solver_for_projection
 
bool Print_timings_transfering_target_areas
 Enable/disable printing timings for transfering target areas. More...
 
bool Print_timings_projection
 Enable/disable printing timings for projection. More...
 
unsigned Print_timings_level_adaptation
 The printing level for adaptation. More...
 
unsigned Print_timings_level_load_balance
 The printing level for load balance. More...
 
MeshUpdateFctPt Mesh_update_fct_pt
 Function pointer to function that updates the mesh following the snapping of boundary nodes to the boundaries (e.g. to move boundary nodes very slightly to satisfy volume constraints) More...
 
InternalHolePointUpdateFctPt Internal_hole_point_update_fct_pt
 Function pointer to function that can be set to update the position of the central point in internal holes. More...
 
- Protected Attributes inherited from oomph::TriangleMesh< ELEMENT >
bool Triangulateio_exists
 Boolean defining if Triangulateio object has been built or not. More...
 
std::map< unsigned, double > Regions_areas
 Target areas for regions; defaults to 0.0 which (luckily) implies "no specific target area" for triangle! More...
 
std::set< unsigned > Internal_boundaries
 
TriangleScaffoldMeshTmp_mesh_pt
 Temporary scaffold mesh. More...
 
Vector< unsigned > Oomph_vertex_nodes_id
 Vector storing oomph-lib node number for all vertex nodes in the TriangulateIO representation of the mesh. More...
 
unsigned Initial_shared_boundary_id
 
unsigned Final_shared_boundary_id
 
Vector< Vector< Vector
< unsigned > > > 
Shared_boundaries_ids
 
std::map< unsigned, Vector
< unsigned > > 
Shared_boundary_from_processors
 
std::map< unsigned, unsigned > Shared_boundary_overlaps_internal_boundary
 
Vector< Vector< Vector
< TriangleMeshPolyLine * > > > 
Shared_boundary_polyline_pt
 
std::map< unsigned, Vector
< FiniteElement * > > 
Shared_boundary_element_pt
 
std::map< unsigned, Vector< int > > Face_index_at_shared_boundary
 For the e-th finite element on shared boundary b, this is the index of the face that lies along that boundary. More...
 
std::map< unsigned, Vector
< Node * > > 
Shared_boundary_node_pt
 
std::map< unsigned, bool > Boundary_was_splitted
 
std::map< unsigned, Vector
< TriangleMeshPolyLine * > > 
Boundary_subpolylines
 
std::map< unsigned,
std::vector< bool > > 
Boundary_marked_as_shared_boundary
 
bool First_time_compute_holes_left_by_halo_elements
 
Vector< Vector< double > > Original_extra_holes_coordinates
 
- Protected Attributes inherited from oomph::TriangleMeshBase
TriangulateIO Triangulateio
 TriangulateIO representation of the mesh. More...
 
bool Use_triangulateio_restart
 
- Protected Attributes inherited from oomph::UnstructuredTwoDMeshGeometryBase
std::map< unsigned, Vector
< Vector< Node * > > > 
Boundary_segment_node_pt
 Used to store the nodes associated to a boundary and to an specific segment (this only applies in distributed meshes where the boundary is splitted in segments) More...
 
std::map< unsigned, Vector
< double > > 
Boundary_segment_initial_zeta
 Stores the initial zeta coordinate for the segments that appear when a boundary is splited among processors. More...
 
std::map< unsigned, Vector
< double > > 
Boundary_segment_final_zeta
 Stores the final zeta coordinate for the segments that appear when a boundary is splited among processors. More...
 
std::map< unsigned, Vector
< double > > 
Boundary_initial_coordinate
 Stores the initial coordinates for the boundary. More...
 
std::map< unsigned, Vector
< double > > 
Boundary_final_coordinate
 Stores the final coordinates for the boundary. More...
 
std::map< unsigned, Vector
< unsigned > > 
Boundary_segment_inverted
 Stores the info. to know if it is necessary to reverse the segment based on a previous mesh. More...
 
std::map< unsigned, Vector
< double > > 
Boundary_initial_zeta_coordinate
 Stores the initial zeta coordinate for the boundary. More...
 
std::map< unsigned, Vector
< double > > 
Boundary_final_zeta_coordinate
 Stores the final zeta coordinate for the boundary. More...
 
std::map< unsigned, Vector
< double > > 
Boundary_segment_initial_arclength
 Stores the initial arclength for the segments that appear when a boundary is splited among processors. More...
 
std::map< unsigned, Vector
< double > > 
Boundary_segment_final_arclength
 Stores the final arclength for the segments that appear when a boundary is splited among processors. More...
 
std::map< unsigned, Vector
< Vector< double > > > 
Boundary_segment_initial_coordinate
 Stores the initial coordinates for the segments that appear when a boundary is splited among processors. More...
 
std::map< unsigned, Vector
< Vector< double > > > 
Boundary_segment_final_coordinate
 Stores the final coordinates for the segments that appear when a boundary is splited among processors. More...
 
bool Allow_automatic_creation_of_vertices_on_boundaries
 Flag to indicate whether the automatic creation of vertices along the boundaries by Triangle is allowed. More...
 
std::map< unsigned, Vector
< FiniteElement * > > 
Region_element_pt
 Vector of elements in each region differentiated by attribute (the key of the map is the attribute) More...
 
Vector< double > Region_attribute
 Vector of attributes associated with the elements in each region. More...
 
std::map< unsigned, GeomObject * > Boundary_geom_object_pt
 Storage for the geometric objects associated with any boundaries. More...
 
std::map< unsigned, Vector
< double > > 
Boundary_coordinate_limits
 
Vector< TriangleMeshPolygon * > Outer_boundary_pt
 Polygon that defines outer boundaries. More...
 
Vector< TriangleMeshPolygon * > Internal_polygon_pt
 Vector of polygons that define internal polygons. More...
 
Vector< TriangleMeshOpenCurve * > Internal_open_curve_pt
 Vector of open polylines that define internal curves. More...
 
Vector< Vector< double > > Extra_holes_coordinates
 Storage for extra coordinates for holes. More...
 
std::map< unsigned, Vector
< double > > 
Regions_coordinates
 
std::map< unsigned,
TriangleMeshCurveSection * > 
Boundary_curve_section_pt
 A map that stores the associated curve section of the specified boundary id. More...
 
Vector< std::map< unsigned,
Vector< FiniteElement * > > > 
Boundary_region_element_pt
 Storage for elements adjacent to a boundary in a particular region. More...
 
Vector< std::map< unsigned,
Vector< int > > > 
Face_index_region_at_boundary
 Storage for the face index adjacent to a boundary in a particular region. More...
 
std::map< unsigned, Vector
< std::pair< double, double > > > 
Polygonal_vertex_arclength_info
 Storage for pairs of doubles representing: .first: the arclength along the polygonal representation of the curviline .second: the corresponding intrinsic coordinate on the associated geometric object at which the vertices on the specified boundary are located. Only used for boundaries represented by geom objects. More...
 
std::map< unsigned, std::set
< Node * > > 
Nodes_on_boundary_pt
 Stores a pointer to a set with all the nodes related with a boundary. More...
 
std::set
< TriangleMeshCurveSection * > 
Free_curve_section_pt
 A set that contains the curve sections created by this object therefore it is necessary to free their associated memory. More...
 
std::set< TriangleMeshPolygon * > Free_polygon_pt
 A set that contains the polygons created by this object therefore it is necessary to free their associated memory. More...
 
std::set< TriangleMeshOpenCurve * > Free_open_curve_pt
 A set that contains the open curves created by this object therefore it is necessary to free their associated memory. More...
 
bool Immersed_rigid_body_triangle_mesh_polygon_used
 
- Protected Attributes inherited from oomph::Mesh
Vector< Vector< Node * > > Boundary_node_pt
 Vector of Vector of pointers to nodes on the boundaries: Boundary_node_pt(b,n). Note that this is private to force the use of the add_boundary_node() function, which ensures that the reverse look-up schemes for the nodes are set up. More...
 
bool Lookup_for_elements_next_boundary_is_setup
 
Vector< Vector< FiniteElement * > > Boundary_element_pt
 Vector of Vector of pointers to elements on the boundaries: Boundary_element_pt(b,e) More...
 
Vector< Vector< int > > Face_index_at_boundary
 For the e-th finite element on boundary b, this is the index of the face that lies along that boundary. More...
 
std::map< unsigned, Vector
< GeneralisedElement * > > 
Root_halo_element_pt
 Map of vectors holding the pointers to the root halo elements. More...
 
std::map< unsigned, Vector
< GeneralisedElement * > > 
Root_haloed_element_pt
 Map of vectors holding the pointers to the root haloed elements. More...
 
std::map< unsigned, Vector
< Node * > > 
Halo_node_pt
 Map of vectors holding the pointers to the halo nodes. More...
 
std::map< unsigned, Vector
< Node * > > 
Haloed_node_pt
 Map of vectors holding the pointers to the haloed nodes. More...
 
std::map< unsigned, Vector
< Node * > > 
Shared_node_pt
 
OomphCommunicatorComm_pt
 Pointer to communicator – set to NULL if mesh is not distributed. More...
 
std::map< unsigned, Vector
< GeneralisedElement * > > 
External_halo_element_pt
 Map of vectors holding the pointers to the external halo elements. More...
 
std::map< unsigned, Vector
< GeneralisedElement * > > 
External_haloed_element_pt
 Map of vectors holding the pointers to the external haloed elements. More...
 
std::map< unsigned, Vector
< Node * > > 
External_halo_node_pt
 Map of vectors holding the pointers to the external halo nodes. More...
 
std::map< unsigned, Vector
< Node * > > 
External_haloed_node_pt
 Map of vectors holding the pointers to the external haloed nodes. More...
 
bool Keep_all_elements_as_halos
 bool to indicate whether to keep all elements in a mesh as halos or not More...
 
bool Resize_halo_nodes_not_required
 Set this to true to suppress resizing of halo nodes (at your own risk!) More...
 
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
 Vector of boolean data that indicates whether the boundary coordinates have been set for the boundary. More...
 
- Protected Attributes inherited from oomph::RefineableMeshBase
ErrorEstimatorSpatial_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...
 
DocInfoDoc_info_pt
 Pointer to DocInfo. More...
 
unsigned Max_keep_unrefined
 Max. number of elements that can remain unrefined if no other mesh adaptation is required (to avoid mesh-adaptations that would only unrefine a few elements and then force a new solve – this can't be worth our while!) More...
 
unsigned Nrefinement_overruled
 Number of elements that would like to be refined further but can't because they've reached the max. refinement level. More...
 

Additional Inherited Members

- Public Attributes inherited from oomph::TriangleMesh< ELEMENT >
TimeStepperTime_stepper_pt
 Timestepper used to build elements. More...
 
bool Use_attributes
 
- Public Attributes inherited from oomph::UnstructuredTwoDMeshGeometryBase
std::map< unsigned, bool > Assigned_segments_initial_zeta_values
 Flag used at the setup_boundary_coordinate function to know if initial zeta values for segments have been assigned. More...
 
- Public Attributes inherited from oomph::Mesh
bool Output_halo_elements
 Bool for output of halo elements. More...
 
- Static Public Attributes inherited from oomph::UnstructuredTwoDMeshGeometryBase
static bool Suppress_warning_about_regions_and_boundaries =true
 Public static flag to suppress warning; defaults to false. More...
 
- Static Public Attributes inherited from oomph::Mesh
static Steady< 0 > Default_TimeStepper
 Default Steady Timestepper, to be used in default arguments to Mesh constructors. More...
 
static bool Suppress_warning_about_empty_mesh_level_time_stepper_function =false
 Boolean used to control warning about empty mesh level timestepper function. More...
 

Detailed Description

template<class ELEMENT>
class oomph::RefineableTriangleMesh< ELEMENT >

Unstructured refineable Triangle Mesh.

Definition at line 2143 of file triangle_mesh.template.h.

Member Typedef Documentation

template<class ELEMENT>
typedef void(* oomph::RefineableTriangleMesh< ELEMENT >::InternalHolePointUpdateFctPt)(const unsigned &ihole, TriangleMeshPolygon *poly_pt)

Function pointer to a function that can generate a point within the ihole-th hole, so that this can be overloaded by the user if they have a better way of doing it than our clunky default. The function should update the components of the Vector poly_pt->internal_point()

Definition at line 2161 of file triangle_mesh.template.h.

template<class ELEMENT>
typedef void(* oomph::RefineableTriangleMesh< ELEMENT >::MeshUpdateFctPt)(Mesh *mesh_pt)

Function pointer to function that updates the mesh following the snapping of boundary nodes to the boundaries (e.g. to move boundary nodes very slightly to satisfy volume constraints)

Definition at line 2153 of file triangle_mesh.template.h.

Constructor & Destructor Documentation

template<class ELEMENT>
oomph::RefineableTriangleMesh< ELEMENT >::RefineableTriangleMesh ( TriangleMeshParameters triangle_mesh_parameters,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper 
)
inline

Build mesh, based on the specifications on TriangleMeshParameters.

Definition at line 2168 of file triangle_mesh.template.h.

template<class ELEMENT>
oomph::RefineableTriangleMesh< ELEMENT >::RefineableTriangleMesh ( const std::string &  node_file_name,
const std::string &  element_file_name,
const std::string &  poly_file_name,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper,
const bool &  allow_automatic_creation_of_vertices_on_boundaries = true 
)
inline

Build mesh, based on the polyfiles.

Definition at line 2184 of file triangle_mesh.template.h.

template<class ELEMENT>
oomph::RefineableTriangleMesh< ELEMENT >::RefineableTriangleMesh ( const Vector< double > &  target_area,
TriangulateIO triangulate_io,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper,
const bool &  use_attributes = false,
const bool &  allow_automatic_creation_of_vertices_on_boundaries = true,
OomphCommunicator comm_pt = 0 
)
inlineprotected

Build mesh from specified triangulation and associated target areas for elements in it NOTE: This is used ONLY during adaptation and should not be used as a method of constructing a TriangleMesh object in demo drivers!

Definition at line 2215 of file triangle_mesh.template.h.

References oomph::TriangleHelper::clear_triangulateio(), oomph::TriangleHelper::initialise_triangulateio(), and oomph::triangulate().

template<class ELEMENT>
virtual oomph::RefineableTriangleMesh< ELEMENT >::~RefineableTriangleMesh ( )
inlinevirtual

Empty Destructor.

Definition at line 2306 of file triangle_mesh.template.h.

Member Function Documentation

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::adapt ( const Vector< double > &  elem_error)
virtual

Adapt mesh, based on elemental error provided.

Adapt problem based on specified elemental error estimates This function implement serial and parallel mesh adaptation, the sections for parallel mesh adaptation are clearly identified by checking whether the mesh is distributed or not

Implements oomph::RefineableMeshBase.

Definition at line 29235 of file triangle_mesh.template.cc.

References oomph::Problem::add_time_stepper_pt(), oomph::UnstructuredTwoDMeshGeometryBase::boundary_coordinate_limits(), oomph::UnstructuredTwoDMeshGeometryBase::boundary_element_in_region_pt(), oomph::Mesh::boundary_element_pt(), oomph::UnstructuredTwoDMeshGeometryBase::boundary_geom_object_pt(), oomph::Mesh::boundary_node_pt(), oomph::TriangleHelper::clear_triangulateio(), oomph::MPI_Helpers::communicator_pt(), oomph::TriangleHelper::deep_copy_of_triangulateio_representation(), oomph::TriangleMeshParameters::disable_automatic_creation_of_vertices_on_boundaries(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::disable_use_iterative_solver_for_projection(), oomph::Multi_domain_functions::Doc_full_stats, oomph::Multi_domain_functions::Doc_stats, oomph::Multi_domain_functions::Doc_timings, e, oomph::TriangleMeshParameters::element_area(), oomph::Mesh::element_pt(), oomph::Problem::enable_problem_distributed(), oomph::TriangleMeshParameters::enable_use_attributes(), oomph::TriangleMeshParameters::extra_holes_coordinates(), oomph::Mesh::face_index_at_boundary(), oomph::UnstructuredTwoDMeshGeometryBase::face_index_at_boundary_in_region(), oomph::MeshAsGeomObject::fill_bin_by_diffusion(), oomph::Mesh::finite_element_pt(), oomph::Mesh::flush_element_and_node_storage(), oomph::MeshAsGeomObject::get_all_bins_content(), oomph::MeshAsGeomObject::get_bin(), oomph::MeshAsGeomObject::get_fill_stats(), i, oomph::TriangleMeshParameters::internal_closed_curve_pt(), oomph::TriangleMeshParameters::internal_open_curves_pt(), oomph::GeneralisedElement::is_halo(), oomph::RefineableTriangleMesh< ELEMENT >::max_element_size(), oomph::Problem::mesh_pt(), oomph::RefineableTriangleMesh< ELEMENT >::min_element_size(), oomph::RefineableTriangleMesh< ELEMENT >::min_permitted_angle(), oomph::Multi_domain_functions::N_spiral_chunk, oomph::Mesh::nboundary(), oomph::Mesh::nboundary_element(), oomph::UnstructuredTwoDMeshGeometryBase::nboundary_element_in_region(), oomph::Mesh::nboundary_node(), oomph::UnstructuredTwoDMeshGeometryBase::nboundary_segment(), oomph::Mesh::nelement(), oomph::Mesh::nnode(), oomph::Mesh::node_pt(), oomph::FiniteElement::node_pt(), oomph::UnstructuredTwoDMeshGeometryBase::nregion(), oomph::UnstructuredTwoDMeshGeometryBase::nregion_element(), oomph::Multi_domain_functions::Nx_bin, oomph::Multi_domain_functions::Ny_bin, oomph::oomph_info, oomph::TriangleMesh< ELEMENT >::oomph_vertex_nodes_id(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::project(), oomph::UnstructuredTwoDMeshGeometryBase::region_attribute(), oomph::UnstructuredTwoDMeshGeometryBase::region_element_pt(), oomph::TriangleMeshParameters::regions_coordinates(), oomph::Node::remove_from_boundary(), s, oomph::TriangleMeshParameters::set_communicator_pt(), oomph::TriangleMesh< ELEMENT >::set_mesh_level_time_stepper(), oomph::Mesh::set_nodal_and_elemental_time_stepper(), oomph::Multi_domain_functions::Setup_multi_domain_for_projection, oomph::TriangleMesh< ELEMENT >::shared_boundaries_ids(), oomph::TriangleMesh< ELEMENT >::shared_boundary_overlaps_internal_boundary(), oomph::FiniteElement::size(), oomph::TimingHelpers::timer(), oomph::TriangleMeshBase::triangulateio_representation(), oomph::MeshAsGeomObject::Use_eulerian_coordinates_during_setup, and oomph::Node::x().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::add_element_load_balance_helper ( const unsigned &  iproc,
Vector< Vector< std::map< unsigned, FiniteElement * > > > &  received_old_haloed_element_pt,
FiniteElement ele_pt 
)
protected

Helper function to create elements on the loop process based on the info received in send_and_received_elements_nodes_info This function is in charge of verify if the element is associated to a boundary and associate to it if that is the case.

Definition at line 27203 of file triangle_mesh.template.cc.

References oomph::Multi_domain_functions::Counter_for_flat_packed_unsigneds, oomph::Multi_domain_functions::Flat_packed_unsigneds, and oomph::oomph_info.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::add_halo_element_helper ( unsigned &  iproc,
FiniteElement ele_pt 
)
protected

Helper function to create (halo) elements on the loop process based on the info received in send_and_received_located_info This function is in charge of verify if the element is associated to a boundary.

Definition at line 18850 of file triangle_mesh.template.cc.

References oomph::Multi_domain_functions::Counter_for_flat_packed_unsigneds, oomph::Multi_domain_functions::Flat_packed_unsigneds, and oomph::oomph_info.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::add_halo_node_helper ( Node *&  new_nod_pt,
Vector< Node * > &  new_nodes_on_domain,
Vector< Vector< Vector< std::map< unsigned, Node * > > > > &  other_proc_shd_bnd_node_pt,
unsigned &  iproc,
unsigned &  node_index,
FiniteElement *const &  new_el_pt,
Vector< Vector< Vector< unsigned > > > &  global_node_names,
std::map< Vector< unsigned >, unsigned > &  node_name_to_global_index,
Vector< Node * > &  global_shared_node_pt 
)
protected
template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::add_haloed_node_helper ( unsigned &  iproc,
Node nod_pt 
)
protected

Helper function to add haloed node.

Helper to add external haloed node that is not a master.

Definition at line 18587 of file triangle_mesh.template.cc.

References oomph::Multi_domain_functions::Flat_packed_unsigneds, oomph::Missing_masters_functions::Flat_packed_unsigneds_string, and oomph::Missing_masters_functions::get_required_nodal_information_helper().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::add_node_load_balance_helper ( unsigned &  iproc,
Vector< Vector< FiniteElement * > > &  f_halo_ele_pt,
Vector< Node * > &  new_nodes_on_domain,
Node nod_pt 
)
protected

Helper function to add haloed node.

Helper function to add nodes on a new domain as a result of load balance.

Definition at line 26362 of file triangle_mesh.template.cc.

References oomph::Multi_domain_functions::Flat_packed_unsigneds, and oomph::Missing_masters_functions::Flat_packed_unsigneds_string.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::add_non_delete_vertices_from_boundary_helper ( Vector< Vector< Node * > >  src_bound_segment_node_pt,
Vector< Vector< Node * > >  dst_bound_segment_node_pt,
const unsigned &  dst_bnd_id,
const unsigned &  dst_bnd_chunk 
)
protected

Adds the vertices from the sources boundary that are repeated in the destination boundary to the list of non delete-able vertices in the destination boundary.

Definition at line 32190 of file triangle_mesh.template.cc.

References oomph::Node::x().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::add_received_node_load_balance_helper ( Node *&  new_nod_pt,
Vector< Vector< FiniteElement * > > &  f_haloed_ele_pt,
Vector< Vector< std::map< unsigned, FiniteElement * > > > &  received_old_haloed_element_pt,
Vector< Node * > &  new_nodes_on_domain,
Vector< Vector< Vector< std::map< unsigned, Node * > > > > &  other_proc_shd_bnd_node_pt,
unsigned &  iproc,
unsigned &  node_index,
FiniteElement *const &  new_el_pt,
Vector< Vector< Vector< unsigned > > > &  global_node_names,
std::map< Vector< unsigned >, unsigned > &  node_name_to_global_index,
Vector< Node * > &  global_shared_node_pt 
)
protected
template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::add_vertices_for_non_deletion ( )
protected
template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::apply_max_length_constraint ( Mesh face_mesh_pt,
Vector< Vector< double > > &  vector_bnd_vertices,
double &  max_length_constraint 
)
protected

Get the size of the vector that now includes all added nodes

Definition at line 35165 of file triangle_mesh.template.cc.

References oomph::MPI_Helpers::communicator_pt(), i, oomph::MeshAsGeomObject::position(), and s.

template<class ELEMENT>
const bool oomph::RefineableTriangleMesh< ELEMENT >::boundary_connections ( const unsigned &  b,
const unsigned &  c,
std::set< Vector< double > > &  vertices 
)
inlineprotected

Verifies if the given boundary receives a connection, and if that is the case then returns the list of vertices that receive the connections.

Definition at line 2780 of file triangle_mesh.template.h.

template<class ELEMENT>
double oomph::RefineableTriangleMesh< ELEMENT >::compute_area_target ( const Vector< double > &  elem_error,
Vector< double > &  target_area 
)
inlineprotected

Compute target area based on the element's error and the error target; return minimum angle (in degrees)

Definition at line 3552 of file triangle_mesh.template.h.

References e, oomph::FiniteElement::node_pt(), oomph::oomph_info, oomph::MathematicalConstants::Pi, oomph::FiniteElement::size(), and oomph::Node::x().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::compute_global_node_names_and_shared_nodes ( Vector< Vector< Vector< std::map< unsigned, Node * > > > > &  other_proc_shd_bnd_node_pt,
Vector< Vector< Vector< unsigned > > > &  global_node_names,
std::map< Vector< unsigned >, unsigned > &  node_name_to_global_index,
Vector< Node * > &  global_shared_node_pt 
)
protected
template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::compute_shared_node_degree_helper ( Vector< Vector< FiniteElement * > > &  unsorted_face_ele_pt,
std::map< Node *, unsigned > &  global_node_degree 
)

Definition at line 24480 of file triangle_mesh.template.cc.

References i.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::construct_new_halo_node_helper ( Node *&  new_nod_pt,
Vector< Node * > &  new_nodes_on_domain,
Vector< Vector< Vector< std::map< unsigned, Node * > > > > &  other_proc_shd_bnd_node_pt,
unsigned &  iproc,
unsigned &  node_index,
FiniteElement *const &  new_el_pt,
Vector< Vector< Vector< unsigned > > > &  global_node_names,
std::map< Vector< unsigned >, unsigned > &  node_name_to_global_index,
Vector< Node * > &  global_shared_node_pt 
)
protected

Helper function which constructs a new halo node (on an element) with the information sent from the haloed process.

The first entry of All_alg_nodal_info contains the default node update id e.g. for the quarter circle there are "Upper_left_box", "Lower right box" etc...

again we need the size of this vector as it varies between meshes; we also need some indication as to which geometric object should be used...

For the received update_id, ref_value, geom_object call add_node_update_info

Now call update_node_update

Definition at line 19074 of file triangle_mesh.template.cc.

References oomph::AlgebraicNode::add_node_update_info(), oomph::FiniteElement::construct_boundary_node(), oomph::FiniteElement::construct_node(), oomph::Multi_domain_functions::Counter_for_flat_packed_doubles, oomph::Multi_domain_functions::Counter_for_flat_packed_unsigneds, oomph::Multi_domain_functions::Flat_packed_doubles, oomph::Multi_domain_functions::Flat_packed_unsigneds, oomph::MacroElementNodeUpdateMesh::geom_object_vector_pt(), i, oomph::BoundaryNodeBase::index_of_first_value_assigned_by_face_element_pt(), oomph::FiniteElement::local_coordinate_of_node(), oomph::Node::ndim(), oomph::FiniteElement::node_pt(), oomph::TimeStepper::ntstorage(), oomph::Data::nvalue(), oomph::oomph_info, oomph::SolidNode::read_values_from_vector(), oomph::Node::resize(), oomph::Node::set_coordinates_on_boundary(), oomph::MacroElementNodeUpdateNode::set_node_update_info(), oomph::Data::set_value(), t, oomph::AlgebraicMesh::update_node_update(), oomph::SolidNode::variable_position_pt(), and oomph::Node::x().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::construct_new_node_load_balance_helper ( Node *&  new_nod_pt,
Vector< Vector< FiniteElement * > > &  f_haloed_ele_pt,
Vector< Vector< std::map< unsigned, FiniteElement * > > > &  received_old_haloed_element_pt,
Vector< Node * > &  new_nodes_on_domain,
Vector< Vector< Vector< std::map< unsigned, Node * > > > > &  other_proc_shd_bnd_node_pt,
unsigned &  iproc,
unsigned &  node_index,
FiniteElement *const &  new_el_pt,
Vector< Vector< Vector< unsigned > > > &  global_node_names,
std::map< Vector< unsigned >, unsigned > &  node_name_to_global_index,
Vector< Node * > &  global_shared_node_pt 
)
protected

Helper function which constructs a new node (on an element) with the information sent from the load balance process.

The first entry of All_alg_nodal_info contains the default node update id e.g. for the quarter circle there are "Upper_left_box", "Lower right box" etc...

again we need the size of this vector as it varies between meshes; we also need some indication as to which geometric object should be used...

For the received update_id, ref_value, geom_object call add_node_update_info

Now call update_node_update

Definition at line 27539 of file triangle_mesh.template.cc.

References oomph::AlgebraicNode::add_node_update_info(), oomph::FiniteElement::construct_boundary_node(), oomph::FiniteElement::construct_node(), oomph::Multi_domain_functions::Counter_for_flat_packed_doubles, oomph::Multi_domain_functions::Counter_for_flat_packed_unsigneds, oomph::Multi_domain_functions::Flat_packed_doubles, oomph::Multi_domain_functions::Flat_packed_unsigneds, oomph::MacroElementNodeUpdateMesh::geom_object_vector_pt(), i, oomph::BoundaryNodeBase::index_of_first_value_assigned_by_face_element_pt(), oomph::FiniteElement::local_coordinate_of_node(), oomph::Node::ndim(), oomph::FiniteElement::node_pt(), oomph::TimeStepper::ntstorage(), oomph::Data::nvalue(), oomph::oomph_info, oomph::SolidNode::read_values_from_vector(), oomph::Node::resize(), oomph::Node::set_coordinates_on_boundary(), oomph::MacroElementNodeUpdateNode::set_node_update_info(), oomph::Data::set_value(), t, oomph::AlgebraicMesh::update_node_update(), oomph::SolidNode::variable_position_pt(), and oomph::Node::x().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::create_adjacency_matrix_new_shared_edges_helper ( Vector< Vector< FiniteElement * > > &  unsorted_face_ele_pt,
Vector< Vector< Node * > > &  tmp_sorted_shared_node_pt,
std::map< Node *, Vector< Vector< unsigned > > > &  node_alias,
Vector< Vector< Vector< unsigned > > > &  adjacency_matrix 
)
template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::create_element_load_balance_helper ( unsigned &  iproc,
Vector< Vector< FiniteElement * > > &  f_haloed_ele_pt,
Vector< Vector< std::map< unsigned, FiniteElement * > > > &  received_old_haloed_element_pt,
Vector< FiniteElement * > &  new_elements_on_domain,
Vector< Node * > &  new_nodes_on_domain,
Vector< Vector< Vector< std::map< unsigned, Node * > > > > &  other_proc_shd_bnd_node_pt,
Vector< Vector< Vector< unsigned > > > &  global_node_names,
std::map< Vector< unsigned >, unsigned > &  node_name_to_global_index,
Vector< Node * > &  global_shared_node_pt 
)
protected

Helper function to create elements on the loop process based on the info received in send_and_received_elements_nodes_info.

Definition at line 27118 of file triangle_mesh.template.cc.

References oomph::Multi_domain_functions::Counter_for_flat_packed_unsigneds, oomph::Multi_domain_functions::Flat_packed_unsigneds, oomph::FiniteElement::nnode(), and oomph::oomph_info.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::create_halo_element ( unsigned &  iproc,
Vector< Node * > &  new_nodes_on_domain,
Vector< Vector< Vector< std::map< unsigned, Node * > > > > &  other_proc_shd_bnd_node_pt,
Vector< Vector< Vector< unsigned > > > &  global_node_names,
std::map< Vector< unsigned >, unsigned > &  node_name_to_global_index,
Vector< Node * > &  global_shared_node_pt 
)
protected

Helper function to create (halo) elements on the loop process based on the info received in send_and_received_located_info.

Creates (halo) element on the loop process based on the information received from each processor

Definition at line 18758 of file triangle_mesh.template.cc.

References oomph::Multi_domain_functions::Counter_for_flat_packed_unsigneds, oomph::Multi_domain_functions::Flat_packed_unsigneds, oomph::FiniteElement::nnode(), and oomph::oomph_info.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::create_new_shared_boundaries ( std::set< FiniteElement * > &  element_in_processor_pt,
Vector< Vector< FiniteElement * > > &  new_shared_boundary_element_pt,
Vector< Vector< unsigned > > &  new_shared_boundary_element_face_index 
)
template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::create_polylines_from_polyfiles ( const std::string &  node_file_name,
const std::string &  poly_file_name 
)

Helper function to create polylines and fill associate data.

Create the polylines and fill associate data structures, used when creating from a mesh from polyfiles

Definition at line 36297 of file triangle_mesh.template.cc.

References i, oomph::TriangleMeshPolyLine::nvertex(), oomph::Global_string_for_annotation::string(), and oomph::TriangleMeshPolyLine::vertex_coordinate().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::create_sorted_face_mesh_representation ( const unsigned &  boundary_id,
Mesh face_mesh_pt,
std::map< FiniteElement *, bool > &  is_inverted,
bool &  inverted_face_mesh 
)
protected

Helper function Creates a sorted face mesh representation of the specified PolyLine It means that the elements are sorted along the boundary It also returns a map that indicated the inverted elements.

Helper function Creates a sorted face mesh representation of the specified PolyLine It means that the elements are sorted along the boundary.

Definition at line 35338 of file triangle_mesh.template.cc.

References oomph::Mesh::add_element_pt(), e, oomph::Mesh::finite_element_pt(), oomph::Mesh::nelement(), oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), oomph::ToleranceForVertexMismatchInPolygons::Tolerable_error, oomph::TriangleMeshPolyLine::vertex_coordinate(), and oomph::Node::x().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::create_temporary_boundary_connections ( Vector< TriangleMeshPolygon * > &  tmp_outer_polygons_pt,
Vector< TriangleMeshOpenCurve * > &  tmp_open_curves_pt 
)
protected

After unrefinement and refinement has taken place compute the new vertices numbers of the temporary representation of the.

Definition at line 32626 of file triangle_mesh.template.cc.

References oomph::TriangleMeshPolyLine::boundary_id(), i, oomph::TriangleMeshCurve::ncurve_section(), oomph::TriangleMeshPolygon::npolyline(), oomph::TriangleMeshPolygon::polyline_pt(), and oomph::TriangleMeshOpenCurve::polyline_pt().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::create_unsorted_face_mesh_representation ( const unsigned &  boundary_id,
Mesh face_mesh_pt 
)
protected

Helper function Creates an unsorted face mesh representation from the specified boundary id. It means that the elements are not sorted along the boundary.

Definition at line 35299 of file triangle_mesh.template.cc.

References e, oomph::Mesh::element_pt(), oomph::Mesh::nelement(), and oomph::FaceElement::set_boundary_number_in_bulk_mesh().

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::disable_boundary_refinement_constrained_by_target_areas ( )
inline

Definition at line 2751 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::disable_boundary_unrefinement_constrained_by_target_areas ( )
inline

Definition at line 2745 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::disable_iterative_solver_for_projection ( )
inline

Enables the use of an iterative solver for the projection problem

Definition at line 2371 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::disable_print_timings_adaptation ( )
inline

Disables printing of timings for adaptation.

Definition at line 2379 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::disable_print_timings_load_balance ( )
inline

Disables printing of timings for load balance.

Definition at line 2402 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::disable_projection ( )
inline

Disables the solution projection step during adaptation.

Definition at line 2323 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::disable_shared_boundary_refinement_constrained_by_target_areas ( )
inline

Definition at line 2765 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::disable_shared_boundary_unrefinement_constrained_by_target_areas ( )
inline

Definition at line 2759 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::disable_timings_projection ( )
inline

Disables info. and timings for projection.

Definition at line 2331 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::disable_timings_tranfering_target_areas ( )
inline

Disables info. and timings for tranferring of target areas.

Definition at line 2315 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::doc_adaptivity_targets ( std::ostream &  outfile)
inlinevirtual

Doc the targets for mesh adaptation.

Reimplemented from oomph::RefineableMeshBase.

Definition at line 2421 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::enable_boundary_refinement_constrained_by_target_areas ( )
inline

Definition at line 2748 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::enable_boundary_unrefinement_constrained_by_target_areas ( )
inline

Definition at line 2742 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::enable_iterative_solver_for_projection ( )
inline

Enables the use of an iterative solver for the projection problem

Definition at line 2366 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::enable_print_timings_adaptation ( const unsigned &  print_level = 1)
inline

Enables printing of timings for adaptation.

Definition at line 2375 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::enable_print_timings_load_balance ( const unsigned &  print_level = 1)
inline

Enables printing of timings for load balance.

Definition at line 2398 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::enable_projection ( )
inline

Enables the solution projection step during adaptation.

Definition at line 2319 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::enable_shared_boundary_refinement_constrained_by_target_areas ( )
inline

Definition at line 2762 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::enable_shared_boundary_unrefinement_constrained_by_target_areas ( )
inline

Definition at line 2756 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::enable_timings_projection ( )
inline

Enables info. and timings for projection.

Definition at line 2327 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::enable_timings_tranfering_target_areas ( )
inline

Enables info. and timings for tranferring of target areas.

Definition at line 2310 of file triangle_mesh.template.h.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::fill_boundary_elements_and_nodes_for_internal_boundaries ( )

Definition at line 43044 of file triangle_mesh.template.cc.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::fill_boundary_elements_and_nodes_for_internal_boundaries ( std::ofstream &  outfile)

Definition at line 43057 of file triangle_mesh.template.cc.

References i.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::flush_sorted_shared_boundary_node ( )
inline

Definition at line 2516 of file triangle_mesh.template.h.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::get_boundary_segment_nodes_helper ( const unsigned &  b,
Vector< Vector< Node * > > &  tmp_segment_nodes 
)

Get the nodes on the boundary (b), these are stored in the segment they belong (also used by the load balance method to re-set the number of segments per boundary after load balance has taken place)

Definition at line 28711 of file triangle_mesh.template.cc.

References e, oomph::GeneralisedElement::is_halo(), oomph::FiniteElement::nnode(), and oomph::FiniteElement::node_pt().

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::get_connected_vertex_number_on_dst_boundary ( Vector< double > &  vertex_coordinates,
const unsigned &  dst_b_id,
unsigned &  vertex_number 
)
protected

Computes the associated vertex number on the destination boundary.

Gets the associated vertex number according to the vertex coordinates on the destination boundary.

Definition at line 33689 of file triangle_mesh.template.cc.

References i, oomph::TriangleMeshPolyLine::nvertex(), oomph::ToleranceForVertexMismatchInPolygons::Tolerable_error, and oomph::TriangleMeshPolyLine::vertex_coordinate().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::get_face_mesh_representation ( TriangleMeshPolygon polygon_pt,
Vector< Mesh * > &  face_mesh_pt 
)
protected

Helper function to construct face mesh representation of all polylines, possibly with segments re-distributed between polylines to maintain an appxroximately even sub-division of the polygon.

Helper function to construct face mesh representation of all polylines, possibly with segments re-distributed between polylines to maintain an approximately even sub-division of the polygon

Definition at line 35535 of file triangle_mesh.template.cc.

References oomph::TriangleMeshPolyLine::boundary_id(), e, i, oomph::TriangleMeshPolygon::is_redistribution_of_segments_between_polylines_enabled(), oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), oomph::TriangleMeshPolygon::npolyline(), oomph::TriangleMeshPolygon::polyline_pt(), s, oomph::FaceElement::set_boundary_number_in_bulk_mesh(), and oomph::Node::x().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::get_face_mesh_representation ( TriangleMeshOpenCurve open_polyline_pt,
Vector< Mesh * > &  face_mesh_pt 
)
protected

Helper function to construct face mesh representation of open curves.

Helper function to construct face mesh representation of all polylines.

Definition at line 36075 of file triangle_mesh.template.cc.

References oomph::TriangleMeshCurveSection::boundary_id(), oomph::TriangleMeshCurve::curve_section_pt(), and oomph::TriangleMeshCurve::ncurve_section().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::get_required_elemental_information_helper ( unsigned &  iproc,
FiniteElement ele_pt 
)
protected

Helper function to get the required elemental information from an haloed element. This info. involves the association of the element to a boundary or region.

Definition at line 17687 of file triangle_mesh.template.cc.

References e, oomph::Multi_domain_functions::Flat_packed_unsigneds, oomph::Missing_masters_functions::Flat_packed_unsigneds_string, and i.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::get_required_elemental_information_load_balance_helper ( unsigned &  iproc,
Vector< Vector< FiniteElement * > > &  f_haloed_ele_pt,
FiniteElement ele_pt 
)
protected

Helper function to get the required elemental information from the element to be sent. This info. involves the association of the element to a boundary or region, and if its part of the halo(ed) elements within a processor.

Helper function to get the required elemental information from the element that will be sent to iproc processor. This info. involves the association of the element to a boundary or region.

Definition at line 25991 of file triangle_mesh.template.cc.

References e, oomph::Multi_domain_functions::Flat_packed_unsigneds, oomph::Missing_masters_functions::Flat_packed_unsigneds_string, and i.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::get_required_nodal_information_helper ( unsigned &  iproc,
Node nod_pt 
)
protected
template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::get_required_nodal_information_load_balance_helper ( Vector< Vector< FiniteElement * > > &  f_halo_ele_pt,
unsigned &  iproc,
Node nod_pt 
)
protected

Helper function to get the required nodal information from an haloed node so that a fully-functional node (and therefore element) can be created on the receiving process (this is the specific version for the load balance strategy, the difference with the original method is that it checks if the node is on a shared boundary no associated with the current processor –my_rank–, or in a haloed element from other processors.

Helper function to get the required nodal information from an haloed node so that a fully-functional halo node (and therefore element) can be created on the receiving process

Definition at line 26421 of file triangle_mesh.template.cc.

References oomph::SolidNode::add_values_to_vector(), oomph::Multi_domain_functions::Flat_packed_doubles, oomph::Multi_domain_functions::Flat_packed_unsigneds, oomph::Missing_masters_functions::Flat_packed_unsigneds_string, oomph::AlgebraicMesh::geom_object_list_pt(), oomph::AlgebraicNode::geom_object_pt(), oomph::Node::get_coordinates_on_boundary(), i, oomph::Node::is_on_boundary(), oomph::Node::ndim(), oomph::AlgebraicNode::ngeom_object(), oomph::AlgebraicMesh::ngeom_object_list_pt(), oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), oomph::AlgebraicNode::node_update_fct_id(), oomph::AlgebraicNode::nref_value(), oomph::Data::nvalue(), oomph::AlgebraicNode::ref_value(), t, oomph::Node::value(), oomph::SolidNode::variable_position_pt(), and oomph::Node::x().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::get_shared_boundary_elements_and_face_indexes ( const Vector< FiniteElement * > &  first_element_pt,
const Vector< FiniteElement * > &  second_element_pt,
Vector< FiniteElement * > &  first_shared_boundary_element_pt,
Vector< unsigned > &  first_shared_boundary_element_face_index,
Vector< FiniteElement * > &  second_shared_boundary_element_pt,
Vector< unsigned > &  second_shared_boundary_element_face_index 
)

Use the first and second group of elements to find the intersection between them to get the shared boundary elements from the first and second group

Definition at line 22198 of file triangle_mesh.template.cc.

References oomph::GeneralisedElement::is_halo(), and oomph::FiniteElement::node_pt().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::get_shared_boundary_segment_nodes_helper ( const unsigned &  shd_bnd_id,
Vector< Vector< Node * > > &  tmp_segment_nodes 
)

Get the nodes on the shared boundary (b), these are stored in the segment they belong.

Definition at line 25664 of file triangle_mesh.template.cc.

References e, oomph::GeneralisedElement::is_halo(), oomph::FiniteElement::nnode(), and oomph::FiniteElement::node_pt().

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::initialise_adaptation_data ( )
inlineprotected

Helper function to initialise data associated with adaptation.

Number of bins in the x-direction when projecting the solution from the old mesh into the new mesh

Number of bins in the y-direction when projecting the solution from the old mesh into the new mesh

Definition at line 3486 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::initialise_boundary_refinement_data ( )
inlineprotected

Definition at line 2943 of file triangle_mesh.template.h.

template<class ELEMENT>
InternalHolePointUpdateFctPt& oomph::RefineableTriangleMesh< ELEMENT >::internal_hole_point_update_fct_pt ( )
inline

Access to function pointer to can be used to generate the internal point for the ihole-th hole.

Definition at line 2491 of file triangle_mesh.template.h.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::load_balance ( const Vector< unsigned > &  input_target_domain_for_local_non_halo_element)
virtual
template<class ELEMENT>
double& oomph::RefineableTriangleMesh< ELEMENT >::max_element_size ( )
inline

Max element size allowed during adaptation.

Definition at line 2351 of file triangle_mesh.template.h.

Referenced by oomph::RefineableTriangleMesh< ELEMENT >::adapt().

template<class ELEMENT>
MeshUpdateFctPt& oomph::RefineableTriangleMesh< ELEMENT >::mesh_update_fct_pt ( )
inline

Access to function pointer to function that updates the mesh following the snapping of boundary nodes to the boundaries (e.g. to move boundary nodes very slightly to satisfy volume constraints)

Definition at line 2483 of file triangle_mesh.template.h.

template<class ELEMENT>
double& oomph::RefineableTriangleMesh< ELEMENT >::min_element_size ( )
inline

Min element size allowed during adaptation.

Definition at line 2354 of file triangle_mesh.template.h.

Referenced by oomph::RefineableTriangleMesh< ELEMENT >::adapt().

template<class ELEMENT>
double& oomph::RefineableTriangleMesh< ELEMENT >::min_permitted_angle ( )
inline

Min angle before remesh gets triggered.

Definition at line 2357 of file triangle_mesh.template.h.

Referenced by oomph::RefineableTriangleMesh< ELEMENT >::adapt().

template<class ELEMENT>
unsigned& oomph::RefineableTriangleMesh< ELEMENT >::nbin_x_for_area_transfer ( )
inline

Read/write access to number of bins in the x-direction when transferring target areas by bin method.

Definition at line 2336 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned& oomph::RefineableTriangleMesh< ELEMENT >::nbin_x_for_projection ( )
inline

Read/write access to number of bins in the x-direction when projecting old solution onto new mesh.

Definition at line 2344 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned& oomph::RefineableTriangleMesh< ELEMENT >::nbin_y_for_area_transfer ( )
inline

Read/write access to number of bins in the y-direction when transferring target areas by bin method.

Definition at line 2340 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned& oomph::RefineableTriangleMesh< ELEMENT >::nbin_y_for_projection ( )
inline

Read/write access to number of bins in the y-direction when projecting old solution onto new mesh.

Definition at line 2348 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::nsorted_shared_boundary_node ( unsigned &  b)
inline

Definition at line 2500 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::reestablish_distribution_info_for_restart ( OomphCommunicator comm_pt,
std::istream &  restart_file 
)
inlinevirtual

Used to re-establish any additional info. related with the distribution after a re-starting for triangle meshes

Reimplemented from oomph::TriangleMesh< ELEMENT >.

Definition at line 2573 of file triangle_mesh.template.h.

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::refine_boundary ( Mesh face_mesh_pt,
Vector< Vector< double > > &  vector_bnd_vertices,
double &  refinement_tolerance,
const bool &  check_only = false 
)
protected

Helper function that performs the refinement process on the specified boundary by using the provided vertices representation. Optional boolean is used to run it as test only (if true is specified as input) in which case vertex coordinates aren't actually modified. Returned boolean indicates if polyline was (or would have been – if called with check_only=false) changed.

Get the size of the vector that now includes all added nodes

Definition at line 34998 of file triangle_mesh.template.cc.

References oomph::MPI_Helpers::communicator_pt(), i, and oomph::MeshAsGeomObject::position().

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::refine_boundary_constrained_by_target_area ( MeshAsGeomObject mesh_geom_obj_pt,
Vector< Vector< double > > &  vector_bnd_vertices,
double &  refinement_tolerance,
Vector< double > &  area_constraint 
)
protected

Helper function that performs the refinement process on the specified boundary by using the provided vertices representation and the associated elements target area. Used only when the 'allow_automatic_creation_of_vertices_on_boundaries' flag is set to true.

Helper function that performs the refinement process on the specified boundary by using the provided vertices representation and the associated elements target area.

Definition at line 40445 of file triangle_mesh.template.cc.

References i, oomph::MeshAsGeomObject::position(), and s.

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::refine_shared_boundary_constrained_by_target_area ( Vector< Vector< double > > &  vector_bnd_vertices,
Vector< double > &  area_constraint 
)
protected

Helper function that performs the refinement process on the specified boundary by using the provided vertices representation and the associated elements target area. NOTE: This is the version that applies refinement to shared boundaries.

Definition at line 40799 of file triangle_mesh.template.cc.

References i, and s.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::refine_triangulateio ( TriangulateIO triangulate_io,
const Vector< double > &  target_area,
TriangulateIO triangle_refine 
)
protected
template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::refine_uniformly ( DocInfo doc_info)
inlinevirtual

Refine mesh uniformly and doc process.

Implements oomph::RefineableMeshBase.

Definition at line 2437 of file triangle_mesh.template.h.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::reset_halo_haloed_scheme ( )
protected
template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::reset_halo_haloed_scheme_helper ( Vector< Vector< Vector< std::map< unsigned, Node * > > > > &  other_proc_shd_bnd_node_pt,
Vector< Vector< Node * > > &  iproc_currently_created_nodes_pt,
Vector< Vector< Vector< unsigned > > > &  global_node_names,
std::map< Vector< unsigned >, unsigned > &  node_name_to_global_index,
Vector< Node * > &  global_shared_node_pt 
)
protected
template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::reset_shared_boundary_elements_and_nodes ( const bool  flush_elements = true,
const bool  update_elements = true,
const bool  flush_nodes = true,
const bool  update_nodes = true 
)
protected

Definition at line 15130 of file triangle_mesh.template.cc.

References e.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::restore_boundary_connections ( Vector< TriangleMeshPolyLine * > &  resume_initial_connection_polyline_pt,
Vector< TriangleMeshPolyLine * > &  resume_final_connection_polyline_pt 
)
protected

After unrefinement and refinement has taken place compute the new vertices numbers of the boundaries to connect (in a distributed scheme it may be possible that the destination boundary does no longer exist, therefore the connection is suspended and resumed after the adaptation processor.

After unrefinement and refinement has taken place compute the new vertices numbers of the boundaries to connect (in a distributed scheme it may be possible that the destination boundary does no longer exist, therefore the connection is suspended. It is not permanently deleted because if load balance takes place it may be possible that the boundary to connect be part of the new domain representation, so the connection would exist)

Definition at line 32753 of file triangle_mesh.template.cc.

References i, oomph::TriangleMeshCurve::ncurve_section(), oomph::TriangleMeshPolygon::npolyline(), oomph::TriangleMeshPolygon::polyline_pt(), and oomph::TriangleMeshOpenCurve::polyline_pt().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::restore_polyline_connections_helper ( TriangleMeshPolyLine polyline_pt,
Vector< TriangleMeshPolyLine * > &  resume_initial_connection_polyline_pt,
Vector< TriangleMeshPolyLine * > &  resume_final_connection_polyline_pt 
)
protected
template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::resume_boundary_connections ( Vector< TriangleMeshPolyLine * > &  resume_initial_connection_polyline_pt,
Vector< TriangleMeshPolyLine * > &  resume_final_connection_polyline_pt 
)
protected

Resume the boundary connections that may have been suspended because the destination boundary is no part of the domain. The connections are no permanently suspended because if load balance takes place the destination boundary may be part of the new domain representation therefore the connection would exist.

Definition at line 33643 of file triangle_mesh.template.cc.

References oomph::TriangleMeshCurveSection::resume_final_vertex_connected(), and oomph::TriangleMeshCurveSection::resume_initial_vertex_connected().

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::send_and_receive_elements_nodes_info ( int &  send_proc,
int &  recv_proc 
)
protected

Helper function to send back halo and haloed information.

Send the information of the elements that will be created on the other processor

Definition at line 18640 of file triangle_mesh.template.cc.

References oomph::Multi_domain_functions::Flat_packed_doubles, oomph::Multi_domain_functions::Flat_packed_unsigneds, oomph::Missing_masters_functions::Flat_packed_unsigneds_string, i, and oomph::oomph_info.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::send_boundary_node_info_of_shared_nodes ( Vector< Vector< Vector< unsigned > > > &  global_node_names,
std::map< Vector< unsigned >, unsigned > &  node_name_to_global_index,
Vector< Node * > &  global_shared_node_pt 
)
protected
template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::set_print_level_timings_adaptation ( const unsigned &  print_level)
inline

Sets the printing level of timings for adaptation.

Definition at line 2383 of file triangle_mesh.template.h.

template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::set_print_level_timings_load_balance ( const unsigned &  print_level)
inline

Sets the printing level of timings for load balance.

Definition at line 2406 of file triangle_mesh.template.h.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::snap_nodes_onto_boundary ( RefineableTriangleMesh< ELEMENT > *&  new_mesh_pt,
const unsigned &  b 
)
protected
template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::sort_nodes_on_shared_boundaries ( )
protected

Definition at line 15072 of file triangle_mesh.template.cc.

References i, oomph::Node::resize(), and oomph::Node::x().

template<class ELEMENT>
Node* oomph::RefineableTriangleMesh< ELEMENT >::sorted_shared_boundary_node_pt ( unsigned &  b,
unsigned &  i 
)
inline

Definition at line 2519 of file triangle_mesh.template.h.

template<class ELEMENT>
Vector<Node*> oomph::RefineableTriangleMesh< ELEMENT >::sorted_shared_boundary_node_pt ( unsigned &  b)
inline

Definition at line 2536 of file triangle_mesh.template.h.

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::surface_remesh_for_inner_hole_boundaries ( Vector< Vector< double > > &  internal_point_coord,
const bool &  check_only = false 
)
protectedvirtual

Generate a new PSLG representation of the inner hole boundaries. Optional boolean is used to run it as test only (if true is specified as input) in which case PSLG isn't actually modified. Returned boolean indicates if PSLG was (or would have been – if called with check_only=false) changed.

Update the PSLG that define the inner boundaries of the mesh. Optional boolean is used to run it as test only (if true is specified as input) in which case PSLG isn't actually modified. Returned boolean indicates if PSLG was (or would have been – if called with check_only=false) changed.

Definition at line 36108 of file triangle_mesh.template.cc.

References oomph::TriangleMeshPolygon::can_update_reference_configuration(), i, oomph::TriangleMeshClosedCurve::internal_point(), oomph::TriangleMeshClosedCurve::is_internal_point_fixed(), oomph::TriangleMeshPolygon::npolyline(), oomph::TriangleMeshPolyLine::nvertex(), oomph::TriangleMeshPolygon::polyline_pt(), oomph::TriangleMeshPolygon::reset_reference_configuration(), and oomph::TriangleMeshPolyLine::vertex_coordinate().

template<class ELEMENT >
const void oomph::RefineableTriangleMesh< ELEMENT >::synchronize_shared_boundary_connections ( )
protected

Synchronise the vertices that are marked for non deletion.

Definition at line 32277 of file triangle_mesh.template.cc.

References oomph::TriangleMeshPolyLine::boundary_chunk(), and i.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::try_to_add_element_pt_load_balance ( Vector< FiniteElement * > &  new_elements_on_domain,
FiniteElement *&  ele_pt 
)
inlineprotected

Definition at line 3029 of file triangle_mesh.template.h.

References e.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::try_to_add_haloed_node_pt ( const unsigned &  p,
Node *&  nod_pt 
)
inlineprotectedvirtual

Reimplemented from oomph::Mesh.

Definition at line 3271 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::try_to_add_node_pt_load_balance ( Vector< Node * > &  new_nodes_on_domain,
Node *&  node_pt 
)
inlineprotected

Definition at line 3079 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::try_to_add_root_haloed_element_pt ( const unsigned &  p,
GeneralisedElement *&  el_pt 
)
inlineprotectedvirtual

Reimplemented from oomph::Mesh.

Definition at line 3233 of file triangle_mesh.template.h.

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::unrefine_boundary ( const unsigned &  b,
const unsigned &  c,
Vector< Vector< double > > &  vector_bnd_vertices,
double &  unrefinement_tolerance,
const bool &  check_only = false 
)
protected

Helper function that performs the unrefinement process.

Helper function that performs the unrefinement process on the specified boundary by using the provided vertices representation. Optional boolean is used to run it as test only (if true is specified as input) in which case vertex coordinates aren't actually modified. Returned boolean indicates if polyline was (or would have been – if called with check_only=false) changed.

representation. Optional boolean is used to run it as test only (if true is specified as input) in which case vertex coordinates aren't actually modified. Returned boolean indicates if polyline was (or would have been – if called with check_only=false) changed.

Get the size of the vector that now includes all remaining nodes

Copy back

Definition at line 34713 of file triangle_mesh.template.cc.

References e, i, and oomph::ToleranceForVertexMismatchInPolygons::Tolerable_error.

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::unrefine_boundary_constrained_by_target_area ( const unsigned &  b,
const unsigned &  c,
Vector< Vector< double > > &  vector_bnd_vertices,
double &  unrefinement_tolerance,
Vector< double > &  area_constraint 
)
protected

Helper function that performs the unrefinement process on the specified boundary by using the provided vertices representation and the associated target area. Used only when the 'allow_automatic_creation_of_vertices_on_boundaries' flag is set to true.

Helper function that performs the unrefinement process on the specified boundary by using the provided vertices representation and the associated target area.

Definition at line 40190 of file triangle_mesh.template.cc.

References e, i, and oomph::ToleranceForVertexMismatchInPolygons::Tolerable_error.

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::unrefine_shared_boundary_constrained_by_target_area ( const unsigned &  b,
const unsigned &  c,
Vector< Vector< double > > &  vector_bnd_vertices,
Vector< double > &  area_constraint 
)
protected

Helper function that performs the unrefinement process on the specified boundary by using the provided vertices representation and the associated target area. NOTE: This is the version that applies unrefinement to shared boundaries.

Definition at line 40589 of file triangle_mesh.template.cc.

References i, and oomph::ToleranceForVertexMismatchInPolygons::Tolerable_error.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::unrefine_uniformly ( )
inlinevirtual

Unrefine mesh uniformly: Return 0 for success, 1 for failure (if unrefinement has reached the coarsest permitted level)

Implements oomph::RefineableMeshBase.

Definition at line 2467 of file triangle_mesh.template.h.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::update_open_curve_after_restart ( TriangleMeshOpenCurve *&  open_curve_pt)
protected
template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::update_open_curve_using_elements_area ( TriangleMeshOpenCurve *&  open_curve_pt,
const Vector< double > &  target_area 
)
protected
template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::update_open_curve_using_face_mesh ( TriangleMeshOpenCurve open_polyline_pt,
const bool &  check_only = false 
)
protected
template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::update_other_proc_shd_bnd_node_helper ( Node *&  new_nod_pt,
Vector< Vector< Vector< std::map< unsigned, Node * > > > > &  other_proc_shd_bnd_node_pt,
Vector< unsigned > &  other_processor_1,
Vector< unsigned > &  other_processor_2,
Vector< unsigned > &  other_shared_boundaries,
Vector< unsigned > &  other_indexes,
Vector< Vector< Vector< unsigned > > > &  global_node_names,
std::map< Vector< unsigned >, unsigned > &  node_name_to_global_index,
Vector< Node * > &  global_shared_node_pt 
)
protected

Definition at line 19973 of file triangle_mesh.template.cc.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::update_polygon_after_restart ( TriangleMeshPolygon *&  polygon_pt)
protected
template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::update_polygon_using_elements_area ( TriangleMeshPolygon *&  polygon_pt,
const Vector< double > &  target_area 
)
protected
template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::update_polygon_using_face_mesh ( TriangleMeshPolygon polygon_pt,
const bool &  check_only = false 
)
protected
template<class ELEMENT>
void oomph::RefineableTriangleMesh< ELEMENT >::update_polyline_representation_from_restart ( )
inlinevirtual

Method used to update the polylines representation after restart.

Reimplemented from oomph::TriangleMeshBase.

Definition at line 2625 of file triangle_mesh.template.h.

References i.

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::update_shared_curve_after_restart ( Vector< TriangleMeshPolyLine * > &  vector_polyline_pt)
protected

Updates the shared polylines representation after restart.

Definition at line 42628 of file triangle_mesh.template.cc.

References e, i, oomph::GeneralisedElement::is_halo(), and oomph::FiniteElement::node_pt().

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::update_shared_curve_using_elements_area ( Vector< TriangleMeshPolyLine * > &  vector_polyline_pt,
const Vector< double > &  target_areas 
)
protected

Updates the polylines using the elements area as constraint for the number of points along the boundaries.

Definition at line 39533 of file triangle_mesh.template.cc.

References e, oomph::GeneralisedElement::is_halo(), oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), and s.

template<class ELEMENT>
bool oomph::RefineableTriangleMesh< ELEMENT >::use_iterative_solver_for_projection ( )
inline

Definition at line 2361 of file triangle_mesh.template.h.

Member Data Documentation

template<class ELEMENT>
std::map<unsigned, std::set<Vector<double> > > oomph::RefineableTriangleMesh< ELEMENT >::Boundary_connections_pt
protected

A map that stores the vertices that receive connections, they are identified by the boundary number that receive the connection This is necessary for not erasing them on the adaptation process, specifically for the un-refinement process

Definition at line 2775 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::Counter_for_flat_packed_doubles
protected

Counter used when processing vector of flat-packed doubles.

Definition at line 3207 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::Counter_for_flat_packed_unsigneds
protected

Counter used when processing vector of flat-packed unsigneds.

Definition at line 3215 of file triangle_mesh.template.h.

template<class ELEMENT>
bool oomph::RefineableTriangleMesh< ELEMENT >::Disable_projection
protected

Enable/disable solution projection during adaptation.

Definition at line 3707 of file triangle_mesh.template.h.

template<class ELEMENT>
bool oomph::RefineableTriangleMesh< ELEMENT >::Do_boundary_refinement_constrained_by_target_areas
protected

Definition at line 2936 of file triangle_mesh.template.h.

template<class ELEMENT>
bool oomph::RefineableTriangleMesh< ELEMENT >::Do_boundary_unrefinement_constrained_by_target_areas
protected

Definition at line 2934 of file triangle_mesh.template.h.

template<class ELEMENT>
bool oomph::RefineableTriangleMesh< ELEMENT >::Do_shared_boundary_refinement_constrained_by_target_areas
protected

Definition at line 2940 of file triangle_mesh.template.h.

template<class ELEMENT>
bool oomph::RefineableTriangleMesh< ELEMENT >::Do_shared_boundary_unrefinement_constrained_by_target_areas
protected

Definition at line 2938 of file triangle_mesh.template.h.

template<class ELEMENT>
Vector<double> oomph::RefineableTriangleMesh< ELEMENT >::Flat_packed_doubles
protected

Vector of flat-packed doubles to be communicated with other processors.

Definition at line 3203 of file triangle_mesh.template.h.

template<class ELEMENT>
Vector<unsigned> oomph::RefineableTriangleMesh< ELEMENT >::Flat_packed_unsigneds
protected

Vector of flat-packed unsigneds to be communicated with other processors.

Definition at line 3211 of file triangle_mesh.template.h.

template<class ELEMENT>
Vector<std::string> oomph::RefineableTriangleMesh< ELEMENT >::Flat_packed_unsigneds_string
protected

Definition at line 3220 of file triangle_mesh.template.h.

template<class ELEMENT>
InternalHolePointUpdateFctPt oomph::RefineableTriangleMesh< ELEMENT >::Internal_hole_point_update_fct_pt
protected

Function pointer to function that can be set to update the position of the central point in internal holes.

Definition at line 3734 of file triangle_mesh.template.h.

template<class ELEMENT>
double oomph::RefineableTriangleMesh< ELEMENT >::Max_element_size
protected

Max permitted element size.

Definition at line 3698 of file triangle_mesh.template.h.

template<class ELEMENT>
MeshUpdateFctPt oomph::RefineableTriangleMesh< ELEMENT >::Mesh_update_fct_pt
protected

Function pointer to function that updates the mesh following the snapping of boundary nodes to the boundaries (e.g. to move boundary nodes very slightly to satisfy volume constraints)

Definition at line 3729 of file triangle_mesh.template.h.

template<class ELEMENT>
double oomph::RefineableTriangleMesh< ELEMENT >::Min_element_size
protected

Min permitted element size.

Definition at line 3701 of file triangle_mesh.template.h.

template<class ELEMENT>
double oomph::RefineableTriangleMesh< ELEMENT >::Min_permitted_angle
protected

Min angle before remesh gets triggered.

Definition at line 3704 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::Nbin_x_for_area_transfer
protected

Number of bins in the x-direction when transferring target areas by bin method.

Definition at line 3683 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::Nbin_x_for_projection
protected

Number of bins in the x-direction when projecting the solution from the old mesh into the new mesh.

Definition at line 3691 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::Nbin_y_for_area_transfer
protected

Number of bins in the y-direction when transferring target areas by bin method.

Definition at line 3687 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::Nbin_y_for_projection
protected

Number of bins in the y-direction when projecting the solution from the old mesh into the new mesh.

Definition at line 3695 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::Print_timings_level_adaptation
protected

The printing level for adaptation.

Definition at line 3720 of file triangle_mesh.template.h.

template<class ELEMENT>
unsigned oomph::RefineableTriangleMesh< ELEMENT >::Print_timings_level_load_balance
protected

The printing level for load balance.

Definition at line 3723 of file triangle_mesh.template.h.

template<class ELEMENT>
bool oomph::RefineableTriangleMesh< ELEMENT >::Print_timings_projection
protected

Enable/disable printing timings for projection.

Definition at line 3717 of file triangle_mesh.template.h.

template<class ELEMENT>
bool oomph::RefineableTriangleMesh< ELEMENT >::Print_timings_transfering_target_areas
protected

Enable/disable printing timings for transfering target areas.

Definition at line 3714 of file triangle_mesh.template.h.

template<class ELEMENT>
std::map<unsigned, Vector<Node*> > oomph::RefineableTriangleMesh< ELEMENT >::Sorted_shared_boundary_node_pt
protected

Definition at line 2958 of file triangle_mesh.template.h.

template<class ELEMENT>
bool oomph::RefineableTriangleMesh< ELEMENT >::Use_iterative_solver_for_projection
protected

Flag to indicate whether to use or not an iterative solver (CG with diagonal preconditioned) for the projection problem

Definition at line 3711 of file triangle_mesh.template.h.


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