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

/////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////// More...

#include <triangle_mesh.template.h>

Inheritance diagram for oomph::RefineableTriangleMesh< ELEMENT >:
oomph::TriangleMesh< ELEMENT > oomph::RefineableSolidTriangleMesh< 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 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. Only used if we don't have CGAL! 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. Only used if we don't have CGAL! More...
 
unsigned max_sample_points_for_limited_locate_zeta_during_target_area_transfer ()
 Read/write access to number of sample points from which we try to locate zeta by Newton method when transferring target areas using cgal-based sample point container. If Newton method doesn't converge from any of these we use the nearest sample point. 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 ()
 Enables the use of an iterative solver for the projection problem. More...
 
void disable_iterative_solver_for_projection ()
 Enables the use of an iterative solver for the projection problem. More...
 
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 ()
 
Node * sorted_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)
 Used to re-establish any additional info. related with the distribution after a re-starting for triangle meshes. More...
 
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)
 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. More...
 
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)
 Computes the degree of the nodes on the shared boundaries, the degree of the node is computed from the global graph created by the shared boundaries of all processors. More...
 
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)
 Sort the nodes on the new shared boundaries (after load balancing), computes the alias of the nodes and creates the adjacency matrix that represent the graph created by the shared edges between each pair of processors. More...
 
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 ()
 Enable/disable unrefinement/refinement methods for original boundaries. More...
 
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 ()
 Enable/disable unrefinement/refinement methods for shared boundaries. More...
 
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)=delete
 Broken copy constructor. More...
 
void operator= (const TriangleMesh &)=delete
 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 ()
 The initial boundary id for shared boundaries. More...
 
const unsigned final_shared_boundary_id ()
 The final boundary id for shared boundaries. More...
 
virtual void reset_boundary_element_info (Vector< unsigned > &ntmp_boundary_elements, Vector< Vector< unsigned >> &ntmp_boundary_elements_in_region, Vector< FiniteElement * > &deleted_elements)
 Virtual function to perform the reset boundary elements info routines. Generally used after load balance. More...
 
void output_boundary_coordinates (const unsigned &b, std::ostream &outfile)
 Output the nodes on the boundary and their respective boundary coordinates(into separate tecplot zones) 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 ()
 Set all the flags to true (the default values) More...
 
void sort_nodes_on_shared_boundaries ()
 Sort the nodes on shared boundaries so that the processors that share a boundary agree with the order of the nodes on the boundary. More...
 
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)
 Re-establish the shared boundary elements after the adaptation process (the updating of shared nodes is optional and performed by default) More...
 
void reset_halo_haloed_scheme ()
 In charge of. re-establish the halo(ed) scheme on all processors. Sends info. to create halo elements and nodes on the processors that need it. It uses and all to all communication strategy therefore must be called on all processors. More...
 
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)
 Compute the names of the nodes on shared boundaries in this (my_rank) processor with other processors. Also compute the names of nodes on shared boundaries of other processors with other processors (useful when there is an element that requires to be sent to this (my_rank) processor because there is a shared node between this (my_rank) and other processors BUT there is not a shared boundary between this and the other processor. More...
 
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)
 Get the original boundaries to which is associated each shared node, and send the info. to the related processors. We need to do this so that at the reset of halo(ed) info. stage, the info. be already updated. More...
 
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)
 In charge of creating additional halo(ed) elements on those processors that have no shared boundaries in common but have shared nodes. More...
 
unsigned try_to_add_element_pt_load_balance (Vector< FiniteElement * > &new_elements_on_domain, FiniteElement *&ele_pt)
 Check if necessary to add the element to the new domain or if it has been previously added. More...
 
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)
 Check if necessary to add the node to the new domain or if it has been already added. More...
 
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)
 Check if necessary to add the element as haloed or if it has been previously added to the haloed scheme. More...
 
unsigned try_to_add_haloed_node_pt (const unsigned &p, Node *&nod_pt)
 Check if necessary to add the node as haloed or if it has been previously added to the haloed scheme. More...
 
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)
 Helper function that assigns/updates the references to the node so that it can be found with any other reference. The return value indicates whether or not a node was found on the same reference. More...
 
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)
 Get the shared boundaries ids living in the current processor. More...
 
const unsigned nshared_boundaries (const unsigned &p, const unsigned &q) const
 Access functions to boundaries shared with processors. More...
 
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)
 
TriangleMeshPolyLine * shared_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)
 
FiniteElement * shared_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 ()
 Flush ALL the shared boundary nodes. More...
 
void flush_shared_boundary_node (const unsigned &b)
 Flush the boundary nodes associated to the shared boundary b. More...
 
void add_shared_boundary_node (const unsigned &b, Node *node_pt)
 Add the node the shared boundary. More...
 
Node * shared_boundary_node_pt (const unsigned &b, const unsigned &n)
 
bool is_node_on_shared_boundary (const unsigned &b, Node *const &node_pt)
 Is the node on the shared boundary. More...
 
std::map< unsigned, Vector< unsigned > > & shared_boundary_from_processors ()
 Return the association of the shared boundaries with the processors. More...
 
Vector< unsigned > & shared_boundary_from_processors (const unsigned &b)
 
const unsigned nshared_boundary_overlaps_internal_boundary ()
 Get the number of shared boundaries overlaping internal boundaries. More...
 
const bool shared_boundary_overlaps_internal_boundary (const unsigned &shd_bnd_id)
 Checks if the shared boundary overlaps an internal boundary. More...
 
const unsigned shared_boundary_overlapping_internal_boundary (const unsigned &shd_bnd_id)
 Gets the boundary id of the internal boundary that the shared boundary lies on. More...
 
void get_shared_boundaries_overlapping_internal_boundary (const unsigned &internal_bnd_id, Vector< unsigned > &shd_bnd_ids)
 Gets the shared boundaries ids that overlap the given internal boundary. More...
 
std::map< unsigned, unsigned > & shared_boundary_overlaps_internal_boundary ()
 Gets the storage that indicates if a shared boundary is part of an internal boundary. More...
 
const bool boundary_was_splitted (const unsigned &b)
 Helper function to verify if a given boundary was splitted in the distribution process. More...
 
const unsigned nboundary_subpolylines (const unsigned &b)
 Gets the number of subpolylines that create the boundarya (useful only when the boundary is marked as split) More...
 
Vector< TriangleMeshPolyLine * > & boundary_subpolylines (const unsigned &b)
 Gets the vector of auxiliar polylines that will represent the given boundary (useful only when the boundaries were split) More...
 
const bool boundary_marked_as_shared_boundary (const unsigned &b, const unsigned &isub)
 Returns the value that indicates if a subpolyline of a given boundary continues been used as internal boundary or should be changed as shared boundary. More...
 
void flush_shared_boundary_polyline_pt ()
 
void create_distributed_domain_representation (Vector< TriangleMeshPolygon * > &polygons_pt, Vector< TriangleMeshOpenCurve * > &open_curves_pt)
 Creates the distributed domain representation. Joins the original boundaires, shared boundaries and creates connections among them to create the new polygons that represent the distributed domain. More...
 
void sort_polylines_helper (Vector< TriangleMeshPolyLine * > &unsorted_polylines_pt, Vector< Vector< TriangleMeshPolyLine * >> &sorted_polylines_pt)
 Sorts the polylines so they be continuous and then we can create a closed or open curve from them. More...
 
void create_tmp_polygons_helper (Vector< Vector< TriangleMeshPolyLine * >> &polylines_pt, Vector< TriangleMeshPolygon * > &polygons_pt)
 Take the polylines from the shared boundaries and create temporary polygon representations of the domain. More...
 
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)
 Take the polylines from the original open curves and created new temporaly representations of open curves with the bits of original curves not overlapped by shared boundaries. More...
 
void compute_holes_left_by_halo_elements_helper (Vector< Vector< double >> &output_holes_coordinates)
 Compute the holes left by the halo elements, those adjacent to the shared boundaries. More...
 
void update_holes_information_helper (Vector< TriangleMeshPolygon * > &polygons_pt, Vector< Vector< double >> &output_holes_coordinates)
 Keeps those vertices that define a hole, those that are inside closed internal boundaries in the new polygons that define the domain. Delete those outside/inside the outer polygons (this is required since Triangle can not deal with vertices that define holes outside the new outer polygons of the domain) More...
 
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)
 Check for any possible connections that the array of sorted nodes have with any previous boundaries or with itself. Return -1 if no connection was found, return -2 if the connection is with the same polyline, return the boundary id of the boundary to which the connection is performed. More...
 
void create_shared_polylines_connections ()
 Establish the connections of the polylines previously marked as having connections. This connections were marked in the function TriangleMesh::create_polylines_from_halo_elements_helper(). More...
 
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)
 Get the element edges (pair of nodes, edges) that lie on a boundary (used to mark shared boundaries that lie on internal boundaries) More...
 
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)
 Creates polylines from the intersection of halo elements on all processors. The new polylines define the shared boundaries in the domain This get the polylines on ALL processors, that is why the three dimensions output_polylines_pt[iproc][ncurve][npolyline]. More...
 
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)
 Break any possible loop created by the sorted list of nodes that is used to create a new shared polyline. More...
 
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)
 Break any possible loop created by the sorted list of nodes that is used to create a new shared polyline (modified version for load balance) More...
 
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)
 Create the shared polyline and fill the data structured that keep all the information associated with the creationg of the shared boundary. More...
 

Protected Attributes

std::map< unsigned, std::set< Vector< double > > > Boundary_connections_pt
 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. More...
 
bool Do_boundary_unrefinement_constrained_by_target_areas
 Flag that enables or disables boundary unrefinement (true by default) More...
 
bool Do_boundary_refinement_constrained_by_target_areas
 Flag that enables or disables boundary refinement (true by default) More...
 
bool Do_shared_boundary_unrefinement_constrained_by_target_areas
 Flag that enables or disables boundary unrefinement (true by default) More...
 
bool Do_shared_boundary_refinement_constrained_by_target_areas
 Flag that enables or disables boundary unrefinement (true by default) More...
 
std::map< unsigned, Vector< Node * > > Sorted_shared_boundary_node_pt
 Stores the nodes in the boundaries in the same order in all the processors Sorted_shared_boundary_node_pt[bnd_id][i-th node] = Node* It is a map since the boundary id may not start at zero. More...
 
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
 Temporary vector of strings to enable full annotation of RefineableTriangleMesh comms. More...
 
unsigned Nbin_x_for_area_transfer
 Number of bins in the x-direction when transferring target areas by bin method. Only used if we don't have CGAL! More...
 
unsigned Nbin_y_for_area_transfer
 Number of bins in the y-direction when transferring target areas by bin method. Only used if we don't have CGAL! More...
 
unsigned Max_sample_points_for_limited_locate_zeta_during_target_area_transfer
 Default value for max. number of sample points used for locate_zeta when transferring target areas using cgal-based sample point container. 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
 Flag to indicate whether to use or not an iterative solver (CG with diagonal preconditioned) for the projection problem. More...
 
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 >
std::map< unsigned, double > Regions_areas
 Target areas for regions; defaults to 0.0 which (luckily) implies "no specific target area" for triangle! More...
 
bool Triangulateio_exists
 Boolean defining if Triangulateio object has been built or not. More...
 
TriangleScaffoldMesh * Tmp_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
 The initial boundary id for shared boundaries. More...
 
unsigned Final_shared_boundary_id
 The final boundary id for shared boundaries. More...
 
Vector< Vector< Vector< unsigned > > > Shared_boundaries_ids
 Stores the boundaries ids created by the interaction of two processors Shared_boundaries_ids[iproc][jproc] = Vector of shared boundaries ids "iproc" processor shares boundaries with "jproc" processor. More...
 
std::map< unsigned, Vector< unsigned > > Shared_boundary_from_processors
 Stores the processors involved in the generation of a shared boundary, in 2D two processors give rise to the creation of a shared boundary. More...
 
std::map< unsigned, unsigned > Shared_boundary_overlaps_internal_boundary
 Stores information about those shared boundaries that lie over or over a segment of an internal boundary (only used when using internal boundaries in the domain) More...
 
Vector< Vector< Vector< TriangleMeshPolyLine * > > > Shared_boundary_polyline_pt
 Stores the polyline representation of the shared boundaries Shared_boundary_polyline_pt[iproc][ncurve][npolyline] = polyline_pt. More...
 
std::map< unsigned, Vector< FiniteElement * > > Shared_boundary_element_pt
 Stores the boundary elements adjacent to the shared boundaries, these elements are a subset of the halo and haloed elements. More...
 
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
 Stores the boundary nodes adjacent to the shared boundaries, these nodes are a subset of the halo and haloed nodes. More...
 
std::map< unsigned, bool > Boundary_was_splitted
 Flag to indicate if a polyline has been splitted during the distribution process, the boundary id of the polyline is used to indicate if spplited. More...
 
std::map< unsigned, Vector< TriangleMeshPolyLine * > > Boundary_subpolylines
 The polylines that will temporary represent the boundary that was splitted in the distribution process. Used to ease the sending of info. to Triangle during the adaptation process. More...
 
std::map< unsigned, std::vector< bool > > Boundary_marked_as_shared_boundary
 Flag to indicate if an internal boundary will be used as shared boundary because there is overlapping of the internal boundary with the shared boundary. More...
 
bool First_time_compute_holes_left_by_halo_elements
 Flag to know if it is the first time we are going to compute the holes left by the halo elements. More...
 
Vector< Vector< double > > Original_extra_holes_coordinates
 Backup the original extra holes coordinates. More...
 

Additional Inherited Members

- Public Attributes inherited from oomph::TriangleMesh< ELEMENT >
TimeStepper * Time_stepper_pt
 Timestepper used to build elements. More...
 
bool Use_attributes
 Boolean flag to indicate whether to use attributes or not (required for multidomain meshes) More...
 

Detailed Description

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

/////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////

Unstructured refineable Triangle Mesh

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

Member Typedef Documentation

◆ InternalHolePointUpdateFctPt

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 2263 of file triangle_mesh.template.h.

◆ MeshUpdateFctPt

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 2255 of file triangle_mesh.template.h.

Constructor & Destructor Documentation

◆ RefineableTriangleMesh() [1/3]

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 2270 of file triangle_mesh.template.h.

◆ RefineableTriangleMesh() [2/3]

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 2285 of file triangle_mesh.template.h.

◆ RefineableTriangleMesh() [3/3]

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 2316 of file triangle_mesh.template.h.

References oomph::triangulate().

◆ ~RefineableTriangleMesh()

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

Empty Destructor.

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

Member Function Documentation

◆ adapt()

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

◆ add_element_load_balance_helper()

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 27584 of file triangle_mesh.template.cc.

◆ add_halo_element_helper()

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 19199 of file triangle_mesh.template.cc.

◆ add_halo_node_helper()

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

Helper function to add halo node.

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

◆ add_haloed_node_helper()

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 18903 of file triangle_mesh.template.cc.

◆ add_node_load_balance_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 26752 of file triangle_mesh.template.cc.

◆ add_non_delete_vertices_from_boundary_helper()

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 32587 of file triangle_mesh.template.cc.

◆ add_received_node_load_balance_helper()

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

Helper function to add a new node from load balance.

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

◆ add_vertices_for_non_deletion()

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::add_vertices_for_non_deletion
protected

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.

Mark the vertices that are not allowed for deletion by the unrefienment/refinement polyline methods. In charge of filling the Boundary_connections_pt structure.

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

◆ apply_max_length_constraint()

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 35553 of file triangle_mesh.template.cc.

◆ boundary_connections()

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 2932 of file triangle_mesh.template.h.

◆ compute_area_target()

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 3699 of file triangle_mesh.template.h.

◆ compute_global_node_names_and_shared_nodes()

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

Compute the names of the nodes on shared boundaries in this (my_rank) processor with other processors. Also compute the names of nodes on shared boundaries of other processors with other processors (useful when there is an element that requires to be sent to this (my_rank) processor because there is a shared node between this (my_rank) and other processors BUT there is not a shared boundary between this and the other processor.

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

◆ compute_shared_node_degree_helper()

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 
)

Computes the degree of the nodes on the shared boundaries, the degree of the node is computed from the global graph created by the shared boundaries of all processors.

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

◆ construct_new_halo_node_helper()

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 19416 of file triangle_mesh.template.cc.

◆ construct_new_node_load_balance_helper()

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 27905 of file triangle_mesh.template.cc.

◆ create_adjacency_matrix_new_shared_edges_helper()

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 
)

Sort the nodes on the new shared boundaries (after load balancing), computes the alias of the nodes and creates the adjacency matrix that represent the graph created by the shared edges between each pair of processors.

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

◆ create_element_load_balance_helper()

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 27501 of file triangle_mesh.template.cc.

◆ create_halo_element()

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 19111 of file triangle_mesh.template.cc.

◆ create_new_shared_boundaries()

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 
)

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.

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

◆ create_polylines_from_polyfiles()

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 36641 of file triangle_mesh.template.cc.

◆ create_sorted_face_mesh_representation()

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 35704 of file triangle_mesh.template.cc.

◆ create_temporary_boundary_connections()

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 33050 of file triangle_mesh.template.cc.

◆ create_unsorted_face_mesh_representation()

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 35671 of file triangle_mesh.template.cc.

◆ disable_boundary_refinement_constrained_by_target_areas()

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

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

◆ disable_boundary_unrefinement_constrained_by_target_areas()

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

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

◆ disable_iterative_solver_for_projection()

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 2510 of file triangle_mesh.template.h.

◆ disable_print_timings_adaptation()

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

Disables printing of timings for adaptation.

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

◆ disable_print_timings_load_balance()

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

Disables printing of timings for load balance.

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

◆ disable_projection()

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

Disables the solution projection step during adaptation.

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

◆ disable_shared_boundary_refinement_constrained_by_target_areas()

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

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

◆ disable_shared_boundary_unrefinement_constrained_by_target_areas()

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

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

◆ disable_timings_projection()

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

Disables info. and timings for projection.

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

◆ disable_timings_tranfering_target_areas()

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 2422 of file triangle_mesh.template.h.

◆ doc_adaptivity_targets()

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

Doc the targets for mesh adaptation.

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

◆ enable_boundary_refinement_constrained_by_target_areas()

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

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

◆ enable_boundary_unrefinement_constrained_by_target_areas()

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

Enable/disable unrefinement/refinement methods for original boundaries.

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

◆ enable_iterative_solver_for_projection()

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 2503 of file triangle_mesh.template.h.

◆ enable_print_timings_adaptation()

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 2516 of file triangle_mesh.template.h.

◆ enable_print_timings_load_balance()

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 2543 of file triangle_mesh.template.h.

◆ enable_projection()

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

Enables the solution projection step during adaptation.

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

◆ enable_shared_boundary_refinement_constrained_by_target_areas()

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

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

◆ enable_shared_boundary_unrefinement_constrained_by_target_areas()

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

Enable/disable unrefinement/refinement methods for shared boundaries.

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

◆ enable_timings_projection()

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

Enables info. and timings for projection.

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

◆ enable_timings_tranfering_target_areas()

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 2415 of file triangle_mesh.template.h.

◆ fill_boundary_elements_and_nodes_for_internal_boundaries() [1/2]

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

◆ fill_boundary_elements_and_nodes_for_internal_boundaries() [2/2]

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

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

◆ flush_sorted_shared_boundary_node()

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

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

◆ get_boundary_segment_nodes_helper()

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 29072 of file triangle_mesh.template.cc.

◆ get_connected_vertex_number_on_dst_boundary()

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 34091 of file triangle_mesh.template.cc.

◆ get_face_mesh_representation() [1/2]

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 36425 of file triangle_mesh.template.cc.

◆ get_face_mesh_representation() [2/2]

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 35895 of file triangle_mesh.template.cc.

◆ get_required_elemental_information_helper()

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 17993 of file triangle_mesh.template.cc.

◆ get_required_elemental_information_load_balance_helper()

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 26360 of file triangle_mesh.template.cc.

◆ get_required_nodal_information_helper()

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

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.

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 18330 of file triangle_mesh.template.cc.

◆ get_required_nodal_information_load_balance_helper()

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 26809 of file triangle_mesh.template.cc.

◆ get_shared_boundary_elements_and_face_indexes()

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 22549 of file triangle_mesh.template.cc.

◆ get_shared_boundary_segment_nodes_helper()

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 26030 of file triangle_mesh.template.cc.

◆ initialise_adaptation_data()

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

Helper function to initialise data associated with adaptation.

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

◆ initialise_boundary_refinement_data()

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

Set all the flags to true (the default values)

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

◆ internal_hole_point_update_fct_pt()

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 2636 of file triangle_mesh.template.h.

◆ load_balance()

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

Performs the load balancing for unstructured meshes, the load balancing strategy is based on mesh migration.

Reimplemented from oomph::TriangleMesh< ELEMENT >.

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

◆ max_element_size()

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

Max element size allowed during adaptation.

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

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

◆ max_sample_points_for_limited_locate_zeta_during_target_area_transfer()

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

Read/write access to number of sample points from which we try to locate zeta by Newton method when transferring target areas using cgal-based sample point container. If Newton method doesn't converge from any of these we use the nearest sample point.

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

◆ mesh_update_fct_pt()

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 2628 of file triangle_mesh.template.h.

◆ min_element_size()

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

Min element size allowed during adaptation.

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

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

◆ min_permitted_angle()

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

Min angle before remesh gets triggered.

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

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

◆ nbin_x_for_area_transfer()

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. Only used if we don't have CGAL!

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

◆ nbin_y_for_area_transfer()

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. Only used if we don't have CGAL!

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

◆ nsorted_shared_boundary_node()

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

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

◆ reestablish_distribution_info_for_restart()

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 2715 of file triangle_mesh.template.h.

◆ refine_boundary()

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 35407 of file triangle_mesh.template.cc.

◆ refine_boundary_constrained_by_target_area()

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 40814 of file triangle_mesh.template.cc.

◆ refine_shared_boundary_constrained_by_target_area()

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 41165 of file triangle_mesh.template.cc.

◆ refine_triangulateio()

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

Build a new TriangulateIO object from previous TriangulateIO based on target area for each element.

Build a new TriangulateIO object based on target areas specified.

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

◆ refine_uniformly()

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::refine_uniformly ( DocInfo &  doc_info)
inline

Refine mesh uniformly and doc process.

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

◆ reset_halo_haloed_scheme()

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::reset_halo_haloed_scheme
protected

In charge of. re-establish the halo(ed) scheme on all processors. Sends info. to create halo elements and nodes on the processors that need it. It uses and all to all communication strategy therefore must be called on all processors.

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

◆ reset_halo_haloed_scheme_helper()

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

In charge of creating additional halo(ed) elements on those processors that have no shared boundaries in common but have shared nodes.

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

◆ reset_shared_boundary_elements_and_nodes()

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

Re-establish the shared boundary elements after the adaptation process (the updating of shared nodes is optional and performed by default)

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

◆ restore_boundary_connections()

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 33175 of file triangle_mesh.template.cc.

◆ restore_polyline_connections_helper()

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

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.

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

◆ resume_boundary_connections()

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 34048 of file triangle_mesh.template.cc.

◆ send_and_receive_elements_nodes_info()

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 18955 of file triangle_mesh.template.cc.

◆ send_boundary_node_info_of_shared_nodes()

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

Get the original boundaries to which is associated each shared node, and send the info. to the related processors. We need to do this so that at the reset of halo(ed) info. stage, the info. be already updated.

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

◆ set_print_level_timings_adaptation()

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 2528 of file triangle_mesh.template.h.

◆ set_print_level_timings_load_balance()

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 2555 of file triangle_mesh.template.h.

◆ snap_nodes_onto_boundary()

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

Snap the boundary nodes onto any curvilinear boundaries.

Move the boundary nodes onto the boundary defined by the old mesh.

Correct!? Because assigned again below


Repositioning of mid-side nodes

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

References oomph::TriangleMesh< ELEMENT >::boundary_segment_node_pt().

◆ sort_nodes_on_shared_boundaries()

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::sort_nodes_on_shared_boundaries
protected

Sort the nodes on shared boundaries so that the processors that share a boundary agree with the order of the nodes on the boundary.

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

References oomph::Bottom_left_sorter, and oomph::classcomp::Tol.

◆ sorted_shared_boundary_node_pt() [1/2]

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

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

◆ sorted_shared_boundary_node_pt() [2/2]

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

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

◆ surface_remesh_for_inner_hole_boundaries()

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 36452 of file triangle_mesh.template.cc.

◆ synchronize_shared_boundary_connections()

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 32675 of file triangle_mesh.template.cc.

◆ try_to_add_element_pt_load_balance()

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

Check if necessary to add the element to the new domain or if it has been previously added.

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

◆ try_to_add_haloed_node_pt()

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

Check if necessary to add the node as haloed or if it has been previously added to the haloed scheme.

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

◆ try_to_add_node_pt_load_balance()

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

Check if necessary to add the node to the new domain or if it has been already added.

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

◆ try_to_add_root_haloed_element_pt()

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

Check if necessary to add the element as haloed or if it has been previously added to the haloed scheme.

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

◆ unrefine_boundary()

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 35112 of file triangle_mesh.template.cc.

◆ unrefine_boundary_constrained_by_target_area()

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 40558 of file triangle_mesh.template.cc.

◆ unrefine_shared_boundary_constrained_by_target_area()

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 40956 of file triangle_mesh.template.cc.

◆ unrefine_uniformly()

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

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

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

◆ update_open_curve_after_restart()

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::update_open_curve_after_restart ( TriangleMeshOpenCurve *&  open_curve_pt)
protected

Updates the open curve representation after restart.

Use a vector of vector for vertices and target areas to deal with the cases when the boundaries are split bn the distribution process. Internal boundaries may be completely or partially overlapped by shared boundaries

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

◆ update_open_curve_using_elements_area()

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::update_open_curve_using_elements_area ( TriangleMeshOpenCurve *&  open_curve_pt,
const Vector< double > &  target_area 
)
protected

Updates the open curve but using the elements area instead of the default refinement and unrefinement methods.

Use a vector of vector for vertices and target areas to deal with the cases when the boundaries are split by the distribution process. Internal boundaries may be completely or partially overlapped by shared boundaries

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

◆ update_open_curve_using_face_mesh()

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::update_open_curve_using_face_mesh ( TriangleMeshOpenCurve *  open_polyline_pt,
const bool &  check_only = false 
)
protected

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.

Refinement

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

◆ update_other_proc_shd_bnd_node_helper()

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

Helper function that assigns/updates the references to the node so that it can be found with any other reference. The return value indicates whether or not a node was found on the same reference.

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

◆ update_polygon_after_restart()

template<class ELEMENT >
void oomph::RefineableTriangleMesh< ELEMENT >::update_polygon_after_restart ( TriangleMeshPolygon *&  polygon_pt)
protected

Updates the polylines representation after restart.

Use a vector of vector for vertices and target areas to deal with the cases when the boundaries are split by the distribution process

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

◆ update_polygon_using_elements_area()

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::update_polygon_using_elements_area ( TriangleMeshPolygon *&  polygon_pt,
const Vector< double > &  target_area 
)
protected

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

Updates the polygon but using the elements area instead of the default refinement and unrefinement methods.

Use a vector of vector for vertices and target areas to deal with the cases when the boundaries are split by the distribution process

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

◆ update_polygon_using_face_mesh()

template<class ELEMENT >
bool oomph::RefineableTriangleMesh< ELEMENT >::update_polygon_using_face_mesh ( TriangleMeshPolygon *  polygon_pt,
const bool &  check_only = false 
)
protected

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.

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

◆ update_polyline_representation_from_restart()

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

Method used to update the polylines representation after restart.

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

◆ update_shared_curve_after_restart()

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 43013 of file triangle_mesh.template.cc.

◆ update_shared_curve_using_elements_area()

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 39894 of file triangle_mesh.template.cc.

◆ use_iterative_solver_for_projection()

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

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

Member Data Documentation

◆ Boundary_connections_pt

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 2927 of file triangle_mesh.template.h.

◆ Counter_for_flat_packed_doubles

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 3365 of file triangle_mesh.template.h.

◆ Counter_for_flat_packed_unsigneds

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 3373 of file triangle_mesh.template.h.

◆ Disable_projection

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

Enable/disable solution projection during adaptation.

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

◆ Do_boundary_refinement_constrained_by_target_areas

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

Flag that enables or disables boundary refinement (true by default)

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

◆ Do_boundary_unrefinement_constrained_by_target_areas

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

Flag that enables or disables boundary unrefinement (true by default)

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

◆ Do_shared_boundary_refinement_constrained_by_target_areas

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

Flag that enables or disables boundary unrefinement (true by default)

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

◆ Do_shared_boundary_unrefinement_constrained_by_target_areas

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

Flag that enables or disables boundary unrefinement (true by default)

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

◆ Flat_packed_doubles

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 3361 of file triangle_mesh.template.h.

◆ Flat_packed_unsigneds

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 3369 of file triangle_mesh.template.h.

◆ Flat_packed_unsigneds_string

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

Temporary vector of strings to enable full annotation of RefineableTriangleMesh comms.

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

◆ Internal_hole_point_update_fct_pt

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 3881 of file triangle_mesh.template.h.

◆ Max_element_size

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

Max permitted element size.

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

◆ Max_sample_points_for_limited_locate_zeta_during_target_area_transfer

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

Default value for max. number of sample points used for locate_zeta when transferring target areas using cgal-based sample point container.

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

◆ Mesh_update_fct_pt

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 3876 of file triangle_mesh.template.h.

◆ Min_element_size

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

Min permitted element size.

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

◆ Min_permitted_angle

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

Min angle before remesh gets triggered.

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

◆ Nbin_x_for_area_transfer

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. Only used if we don't have CGAL!

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

◆ Nbin_y_for_area_transfer

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. Only used if we don't have CGAL!

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

◆ Print_timings_level_adaptation

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

The printing level for adaptation.

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

◆ Print_timings_level_load_balance

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

The printing level for load balance.

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

◆ Print_timings_projection

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

Enable/disable printing timings for projection.

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

◆ Print_timings_transfering_target_areas

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

Enable/disable printing timings for transfering target areas.

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

◆ Sorted_shared_boundary_node_pt

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

Stores the nodes in the boundaries in the same order in all the processors Sorted_shared_boundary_node_pt[bnd_id][i-th node] = Node* It is a map since the boundary id may not start at zero.

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

◆ Use_iterative_solver_for_projection

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 3858 of file triangle_mesh.template.h.


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