Enumerations | Functions | Variables
oomph::Multi_domain_functions Namespace Reference

Enumerations

enum  { New , Exists , Not_found }
 Enumerators for element status in location procedure. More...
 

Functions

void send_and_receive_missing_zetas (Problem *problem_pt)
 Send the zeta coordinates from the current process to the next process; receive from the previous process. More...
 
void send_and_receive_located_info (int &iproc, Mesh *const &external_mesh_pt, Problem *problem_pt)
 Send location information from current process; Received location information from (current process + iproc) modulo (nproc) More...
 
void add_external_haloed_node_to_storage (int &iproc, Node *nod_pt, Problem *problem_pt, Mesh *const &external_mesh_pt, int &n_cont_inter_values)
 Helper function to add external haloed nodes, including any masters. More...
 
void recursively_add_masters_of_external_haloed_node (int &iproc, Node *nod_pt, Problem *problem_pt, Mesh *const &external_mesh_pt, int &n_cont_inter_values)
 Recursively add any master nodes (and their master nodes etc) of external nodes. More...
 
void add_external_haloed_node_helper (int &iproc, Node *nod_pt, Problem *problem_pt, Mesh *const &external_mesh_pt, int &n_cont_inter_values)
 Helper to add external haloed node that is not a master. More...
 
void add_external_haloed_master_node_helper (int &iproc, Node *master_nod_pt, Problem *problem_pt, Mesh *const &external_mesh_pt, int &n_cont_inter_values)
 Helper function to add external haloed node that is a master. More...
 
void get_required_nodal_information_helper (int &iproc, Node *nod_pt, Problem *problem_pt, Mesh *const &external_mesh_pt, int &n_cont_inter_values)
 Helper function to get the required nodal information from an external haloed node so that a fully-functional external halo node (and therefore element) can be created on the receiving process. More...
 
void get_required_master_nodal_information_helper (int &iproc, Node *master_nod_pt, Problem *problem_pt, Mesh *const &external_mesh_pt, int &n_cont_inter_values)
 Helper function to get the required master nodal information from an external haloed master node so that a fully-functional external halo master node (and possible element) can be created on the receiving process. More...
 
void add_external_halo_node_helper (Node *&new_nod_pt, Mesh *const &external_mesh_pt, unsigned &loc_p, unsigned &node_index, FiniteElement *const &new_el_pt, int &n_cont_inter_values, Problem *problem_pt)
 Helper functiono to add external halo node that is not a master. More...
 
void construct_new_external_halo_node_helper (Node *&new_nod_pt, unsigned &loc_p, unsigned &node_index, FiniteElement *const &new_el_pt, Mesh *const &external_mesh_pt, Problem *problem_pt)
 Helper function which constructs a new external halo node (on new element) with the required information sent from the haloed process. More...
 
void locate_zeta_for_missing_coordinates (int &iproc, Mesh *const &external_mesh_pt, Problem *problem_pt, Vector< MeshAsGeomObject * > &mesh_geom_obj_pt)
 Locate zeta for current set of missing coordinates; vector-based version. More...
 
void locate_zeta_for_local_coordinates (const Vector< Mesh * > &mesh_pt, Mesh *const &external_mesh_pt, Vector< MeshAsGeomObject * > &mesh_geom_obj_pt, const unsigned &interaction_index)
 locate zeta for current set of "local" coordinates vector-based version More...
 
void get_dim_helper (Problem *problem_pt, Mesh *const &mesh_pt, Mesh *const &external_mesh_pt)
 Helper function that computes the dimension of the elements within each of the specified meshes (and checks they are the same). Stores result in Dim. More...
 
void clean_up ()
 Helper function that clears all the information used during the external storage creation. More...
 
bool first_closer_than_second (const std::pair< FiniteElement *, Vector< double > > &p1, const std::pair< FiniteElement *, Vector< double > > &p2)
 Comparison function for sorting entries in bin: Returns true if point identified by p1 (comprising pointer to finite element and vector of local coordinates within that element) is closer to Zeta_coords_for_further_away_comparison than p2. More...
 
template<class BULK_ELEMENT , unsigned DIM>
void setup_bulk_elements_adjacent_to_face_mesh (Problem *problem_pt, Vector< unsigned > &boundary_in_bulk_mesh, Mesh *const &bulk_mesh_pt, Vector< Mesh * > &face_mesh_pt, const unsigned &interaction=0)
 Identify the FaceElements (stored in the mesh pointed to by face_mesh_pt) that are adjacent to the bulk elements next to the boundary_in_bulk_mesh -th boundary of the mesh pointed to by bulk_mesh_pt. The FaceElements must be derived from the ElementWithExternalElement base class and the adjacent bulk elements are stored as their external elements. More...
 
template<class BULK_ELEMENT , unsigned DIM>
void setup_bulk_elements_adjacent_to_face_mesh (Problem *problem_pt, const unsigned &boundary_in_bulk_mesh, Mesh *const &bulk_mesh_pt, Mesh *const &face_mesh_pt, const unsigned &interaction=0)
 Identify the FaceElements (stored in the mesh pointed to by face_mesh_pt) that are adjacent to the bulk elements next to the boundary_in_bulk_mesh -th boundary of the mesh pointed to by bulk_mesh_pt. The FaceElements must be derived from the ElementWithExternalElement base class and the adjacent bulk elements are stored as their external elements. More...
 
template<class ELEMENT_0 , class ELEMENT_1 >
void setup_multi_domain_interactions (Problem *problem_pt, Mesh *const &first_mesh_pt, Mesh *const &second_mesh_pt, const unsigned &first_interaction=0, const unsigned &second_interaction=0)
 Set up the two-way multi-domain interactions for the problem pointed to by problem_pt. Use this for cases where first_mesh_pt and second_mesh_pt occupy the same physical space and are populated by ELEMENT_0 and ELEMENT_1 respectively, and are combined to solve a single problem. The elements in two meshes interact both ways the elements in each mesh act as "external elements" for the elements in the "other" mesh. The interaction indices allow the specification of which interaction we're setting up in the two meshes. They default to zero, which is appropriate if there's only a single interaction. More...
 
template<class EXT_ELEMENT >
void setup_multi_domain_interaction (Problem *problem_pt, Mesh *const &mesh_pt, Mesh *const &external_mesh_pt, const unsigned &interaction_index=0)
 Function to set up the one-way multi-domain interaction for problems where the meshes pointed to by mesh_pt and external_mesh_pt occupy the same physical space, and the elements in external_mesh_pt act as "external elements" for the ElementWithExternalElements in mesh_pt (but not vice versa): More...
 
template<class EXT_ELEMENT , class FACE_ELEMENT_GEOM_OBJECT >
void setup_multi_domain_interaction (Problem *problem_pt, Mesh *const &mesh_pt, Mesh *const &external_mesh_pt, Mesh *const &external_face_mesh_pt, const unsigned &interaction_index=0)
 Function to set up the one-way multi-domain interaction for FSI-like problems. More...
 
template<class EXT_ELEMENT , class FACE_ELEMENT_GEOM_OBJECT >
void setup_multi_domain_interaction (Problem *problem_pt, const Vector< Mesh * > &mesh_pt, Mesh *const &external_mesh_pt, const Vector< Mesh * > &external_face_mesh_pt, const unsigned &interaction_index=0)
 Function to set up the one-way multi-domain interaction for FSI-like problems. More...
 
template<class EXT_ELEMENT , class GEOM_OBJECT >
void aux_setup_multi_domain_interaction (Problem *problem_pt, Mesh *const &mesh_pt, Mesh *const &external_mesh_pt, const unsigned &interaction_index, Mesh *const &external_face_mesh_pt=0)
 Auxiliary helper function. More...
 
template<class EXT_ELEMENT , class GEOM_OBJECT >
void aux_setup_multi_domain_interaction (Problem *problem_pt, const Vector< Mesh * > &mesh_pt, Mesh *const &external_mesh_pt, const unsigned &interaction_index, const Vector< Mesh * > &external_face_mesh_pt)
 Auxiliary helper function. More...
 
template<class EXT_ELEMENT >
void create_external_halo_elements (int &iproc, const Vector< Mesh * > &mesh_pt, Mesh *const &external_mesh_pt, Problem *problem_pt, const unsigned &interaction_index)
 Create external (halo) elements on the loop process based on the information received from each locate_zeta call on other processes This is the vector-based function which operates simultaneously on the meshes contained in the vectors. More...
 
template<class EXT_ELEMENT >
void add_external_halo_node_to_storage (Node *&new_nod_pt, Mesh *const &external_mesh_pt, unsigned &loc_p, unsigned &node_index, FiniteElement *const &new_el_pt, int &n_cont_inter_values, Problem *problem_pt)
 Helper function to add external halo nodes, including any masters, based on information received from the haloed process. More...
 
template<class EXT_ELEMENT >
void recursively_add_masters_of_external_halo_node_to_storage (Node *&new_nod_pt, Mesh *const &external_mesh_pt, unsigned &loc_p, unsigned &node_index, FiniteElement *const &new_el_pt, int &n_cont_inter_values, Problem *problem_pt)
 Recursively add masters of external halo nodes (and their masters, etc) based on information received from the haloed process. More...
 
template<class EXT_ELEMENT >
void add_external_halo_master_node_helper (Node *&new_master_nod_pt, Node *&new_nod_pt, Mesh *const &external_mesh_pt, unsigned &loc_p, int &n_cont_inter_values, Problem *problem_pt)
 Helper function to add external halo node that is a master. More...
 
template<class EXT_ELEMENT >
void construct_new_external_halo_master_node_helper (Node *&new_master_nod_pt, Node *&nod_pt, unsigned &loc_p, Mesh *const &external_mesh_pt, Problem *problem_pt)
 Helper function which constructs a new external halo master node with the information sent from the haloed process. More...
 

Variables

std::ofstream Doc_boundary_coordinate_file
 Output file to document the boundary coordinate along the mesh boundary of the bulk mesh during call to setup_bulk_elements_adjacent_to_face_mesh(...) More...
 
bool Accept_failed_locate_zeta_in_setup_multi_domain_interaction = false
 Boolean to indicate that failure in setup multi domain functions is acceptable; defaults to false. If set to true external element pointers are set to null for those elements for which external elements couldn't be located. More...
 
unsigned Dim
 Dimension of zeta tuples (set by get_dim_helper) – needed because we store the scalar coordinates in flat-packed form. More...
 
Vector< Vector< unsigned > > External_element_located
 Lookup scheme for whether a local element's integration point has had an external element assigned to it – essentially boolean. External_element_located[e][ipt] = {0,1} if external element for ipt-th integration in local element e {has not, has} been found. Used locally to ensure that we're not searching for the same elements over and over again when we go around the spirals. More...
 
Vector< double > Flat_packed_zetas_not_found_locally
 Vector of flat-packed zeta coordinates for which the external element could not be found during current local search. These will be sent to the next processor in the ring-like parallel search. The zeta coordinates come in groups of Dim (scalar) coordinates. More...
 
Vector< double > Received_flat_packed_zetas_to_be_found
 Vector of flat-packed zeta coordinates for which the external element could not be found on another processor and for which we're currently searching here. Whatever can't be found here, gets written into Flat_packed_zetas_not_found_locally and then passed on to the next processor during the ring-like parallel search. The zeta coordinates come in groups of Dim (scalar) coordinates. More...
 
Vector< int > Proc_id_plus_one_of_external_element
 Proc_id_plus_one_of_external_element[i] contains the processor id (plus one) of the processor on which the i-th zeta coordinate tuple received from elsewhere (in the order in which these are stored in Received_flat_packed_zetas_to_be_found) was located; it's zero if it wasn't found during the current stage of the ring-like parallel search. More...
 
Vector< unsigned > Located_element_status
 Vector to indicate (to another processor) whether a located element (that will have to represented as an external halo element on that processor) should be newly created on that processor (2), already exists on that processor (1), or is not on the current processor either (0). More...
 
Vector< double > Flat_packed_located_coordinates
 Vector of flat-packed local coordinates for zeta tuples that have been located. 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 – this is really "private" data, declared here to avoid having to pass it (and the associated array) between the various helper functions. More...
 
Vector< unsigned > Flat_packed_unsigneds
 Vector of flat-packed unsigneds to be communicated with other processors – this is really "private" data, declared here to avoid having to pass the array between the various helper functions. More...
 
Vector< std::string > Flat_packed_unsigneds_string
 
unsigned Counter_for_flat_packed_unsigneds
 Counter used when processing vector of flat-packed unsigneds – this is really "private" data, declared here to avoid having to pass it (and the associated array) between the various helper functions. More...
 
bool Use_bulk_element_as_external = false
 Boolean to indicate when to use the bulk element as the external element. Defaults to false, you must have set up FaceElements properly first in order for it to work. More...
 
bool Allow_use_of_halo_elements_as_external_elements = true
 Boolean to indicate if we're allowed to use halo elements as external elements. Can drastically reduce the number of external halo elements – currently not aware of any problems therefore set to true by default but retention of this flag allows easy return to previous implementation. More...
 
bool Allow_use_of_halo_elements_as_external_elements_for_projection = true
 Indicate whether we are allowed to use halo elements as external elements for projection, possibly only required in parallel unstructured mesh generation during the projection stage. Default set to true. More...
 
bool Doc_timings = false
 Boolean to indicate whether to doc timings or not. More...
 
bool Doc_stats = false
 Boolean to indicate whether to output basic info during setup_multi_domain_interaction() routines. More...
 
bool Doc_full_stats = false
 Boolean to indicate whether to output further info during setup_multi_domain_interaction() routines. More...
 
Vector< double > Zeta_coords_for_further_away_comparison
 Vector of zeta coordinates that we're currently trying to locate; used in sorting of bin entries in further_away() comparison function. More...
 

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

Enumerators for element status in location procedure.

Enumerator
New 
Exists 
Not_found 

Definition at line 147 of file multi_domain.h.

Function Documentation

◆ add_external_halo_master_node_helper()

template<class EXT_ELEMENT >
void oomph::Multi_domain_functions::add_external_halo_master_node_helper ( Node *&  new_master_nod_pt,
Node *&  new_nod_pt,
Mesh *const &  external_mesh_pt,
unsigned &  loc_p,
int &  n_cont_inter_values,
Problem problem_pt 
)

Helper function to add external halo node that is a master.

Definition at line 2027 of file multi_domain.template.cc.

References Counter_for_flat_packed_unsigneds, oomph::Mesh::external_halo_node_pt(), Flat_packed_unsigneds, and oomph::oomph_info.

◆ add_external_halo_node_helper()

void oomph::Multi_domain_functions::add_external_halo_node_helper ( Node *&  new_nod_pt,
Mesh *const &  external_mesh_pt,
unsigned &  loc_p,
unsigned &  node_index,
FiniteElement *const &  new_el_pt,
int &  n_cont_inter_values,
Problem problem_pt 
)

Helper functiono to add external halo node that is not a master.

Helper function to add external halo node that is not a master.

Definition at line 1404 of file multi_domain.cc.

References construct_new_external_halo_node_helper(), Counter_for_flat_packed_unsigneds, oomph::Mesh::external_halo_node_pt(), Flat_packed_unsigneds, oomph::FiniteElement::node_pt(), and oomph::oomph_info.

◆ add_external_halo_node_to_storage()

template<class EXT_ELEMENT >
void oomph::Multi_domain_functions::add_external_halo_node_to_storage ( Node *&  new_nod_pt,
Mesh *const &  external_mesh_pt,
unsigned &  loc_p,
unsigned &  node_index,
FiniteElement *const &  new_el_pt,
int &  n_cont_inter_values,
Problem problem_pt 
)

Helper function to add external halo nodes, including any masters, based on information received from the haloed process.

Definition at line 1924 of file multi_domain.template.cc.

References oomph::Missing_masters_functions::add_external_halo_node_helper().

◆ add_external_haloed_master_node_helper()

void oomph::Multi_domain_functions::add_external_haloed_master_node_helper ( int &  iproc,
Node master_nod_pt,
Problem problem_pt,
Mesh *const &  external_mesh_pt,
int &  n_cont_inter_values 
)

◆ add_external_haloed_node_helper()

void oomph::Multi_domain_functions::add_external_haloed_node_helper ( int &  iproc,
Node nod_pt,
Problem problem_pt,
Mesh *const &  external_mesh_pt,
int &  n_cont_inter_values 
)

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

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

Definition at line 643 of file multi_domain.cc.

References oomph::Mesh::add_external_haloed_node_pt(), Flat_packed_unsigneds, Flat_packed_unsigneds_string, get_required_nodal_information_helper(), and oomph::Mesh::nexternal_haloed_node().

Referenced by add_external_haloed_node_to_storage().

◆ add_external_haloed_node_to_storage()

void oomph::Multi_domain_functions::add_external_haloed_node_to_storage ( int &  iproc,
Node nod_pt,
Problem problem_pt,
Mesh *const &  external_mesh_pt,
int &  n_cont_inter_values 
)

Helper function to add external haloed nodes, including any masters.

Helper function to add external haloed nodes, inc. masters of external haloed nodes.

Definition at line 557 of file multi_domain.cc.

References add_external_haloed_node_helper(), and recursively_add_masters_of_external_haloed_node().

Referenced by get_required_master_nodal_information_helper(), and locate_zeta_for_missing_coordinates().

◆ aux_setup_multi_domain_interaction() [1/2]

template<class EXT_ELEMENT , class GEOM_OBJECT >
void oomph::Multi_domain_functions::aux_setup_multi_domain_interaction ( Problem problem_pt,
const Vector< Mesh * > &  mesh_pt,
Mesh *const &  external_mesh_pt,
const unsigned &  interaction_index,
const Vector< Mesh * > &  external_face_mesh_pt 
)

Auxiliary helper function.

This routine calls the locate_zeta routine (simultaneously on each processor for each individual processor's element set if necessary) and sets up the external (halo) element and node storage as necessary. The locate_zeta procedure here works for all multi-domain problems where either two meshes occupy the same physical space but have differing element types (e.g. a Boussinesq convection problem where AdvectionDiffusion elements interact with Navier-Stokes type elements) or two meshes interact along some boundary of the external mesh, represented by a "face mesh", such as an FSI problem.

Vector-based version operates simultaneously on the meshes contained in the vectors.

If it's is now zero then break out of the spirals loop

Definition at line 524 of file multi_domain.template.cc.

References Accept_failed_locate_zeta_in_setup_multi_domain_interaction, clean_up(), oomph::Problem::communicator_pt(), NonRefineableBinArray::current_max_spiral_level(), NonRefineableBinArray::current_min_spiral_level(), oomph::FiniteElement::dim(), Dim, oomph::Missing_masters_functions::Doc_full_stats, oomph::Missing_masters_functions::Doc_stats, oomph::Missing_masters_functions::Doc_timings, e, oomph::Mesh::element_pt(), External_element_located, oomph::ElementWithExternalElement::external_element_pt(), oomph::Mesh::finite_element_pt(), RefineableBinArray::first_sample_point_to_actually_lookup_during_locate_zeta(), CGALSamplePointContainer::first_sample_point_to_actually_lookup_during_locate_zeta(), Flat_packed_zetas_not_found_locally, i, RefineableBinArray::initial_last_sample_point_to_actually_lookup_during_locate_zeta(), CGALSamplePointContainer::initial_last_sample_point_to_actually_lookup_during_locate_zeta(), oomph::ElementWithExternalElement::initialise_external_element_storage(), oomph::FiniteElement::integral_pt(), oomph::FiniteElement::interpolated_x(), oomph::GeneralisedElement::is_halo(), oomph::Integral::knot(), RefineableBinArray::last_sample_point_to_actually_lookup_during_locate_zeta(), CGALSamplePointContainer::last_sample_point_to_actually_lookup_during_locate_zeta(), locate_zeta_for_local_coordinates(), locate_zeta_for_missing_coordinates(), BinArray::max_bin_dimension(), RefineableBinArray::multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta(), CGALSamplePointContainer::multiplier_for_max_sample_point_to_actually_lookup_during_locate_zeta(), NonRefineableBinArray::n_spiral_chunk(), oomph::Node::ndim(), oomph::Mesh::nelement(), oomph::Mesh::nexternal_halo_element(), oomph::Mesh::nexternal_halo_node(), oomph::Mesh::nexternal_haloed_element(), oomph::Mesh::nexternal_haloed_node(), oomph::Mesh::nhalo_node(), oomph::Mesh::nhaloed_node(), oomph::Mesh::nnode(), oomph::FiniteElement::node_pt(), oomph::Mesh::nroot_halo_element(), oomph::Mesh::nroot_haloed_element(), oomph::Integral::nweight(), oomph::oomph_info, oomph::FiniteElement::output(), BinArray::output_bins(), oomph::Problem::problem_has_been_distributed(), s, send_and_receive_located_info(), send_and_receive_missing_zetas(), t, oomph::TimingHelpers::timer(), RefineableBinArray::total_number_of_sample_points_computed_recursively(), CGALSamplePointContainer::total_number_of_sample_points_computed_recursively(), Use_bulk_element_as_external, oomph::UseCGALSamplePointContainer, oomph::UseNonRefineableBinArray, and oomph::UseRefineableBinArray.

◆ aux_setup_multi_domain_interaction() [2/2]

template<class EXT_ELEMENT , class GEOM_OBJECT >
void oomph::Multi_domain_functions::aux_setup_multi_domain_interaction ( Problem problem_pt,
Mesh *const &  mesh_pt,
Mesh *const &  external_mesh_pt,
const unsigned &  interaction_index,
Mesh *const &  external_face_mesh_pt = 0 
)

Auxiliary helper function.

This routine calls the locate_zeta routine (simultaneously on each processor for each individual processor's element set if necessary) and sets up the external (halo) element and node storage as necessary. The locate_zeta procedure here works for all multi-domain problems where either two meshes occupy the same physical space but have differing element types (e.g. a Boussinesq convection problem where AdvectionDiffusion elements interact with Navier-Stokes type elements) or two meshes interact along some boundary of the external mesh, represented by a "face mesh", such as an FSI problem.

Definition at line 485 of file multi_domain.template.cc.

◆ clean_up()

void oomph::Multi_domain_functions::clean_up ( )

Helper function that clears all the information used during the external storage creation.

Helper function that clears all the intermediate information used during the external storage creation at the end of the procedure.

Definition at line 2413 of file multi_domain.cc.

References External_element_located, Flat_packed_doubles, Flat_packed_located_coordinates, Flat_packed_unsigneds, Flat_packed_zetas_not_found_locally, Located_element_status, Proc_id_plus_one_of_external_element, and Received_flat_packed_zetas_to_be_found.

Referenced by aux_setup_multi_domain_interaction().

◆ construct_new_external_halo_master_node_helper()

template<class EXT_ELEMENT >
void oomph::Multi_domain_functions::construct_new_external_halo_master_node_helper ( Node *&  new_master_nod_pt,
Node *&  nod_pt,
unsigned &  loc_p,
Mesh *const &  external_mesh_pt,
Problem problem_pt 
)

Helper function which constructs a new external halo master node with the information sent from the haloed process.

Helper function which constructs a new external halo master node with the required information sent from the haloed process.

The first entry of All_unsigned_values is the default node update id

... so for the specified update_id, call add_node_update_info

Now call update_node_update

Definition at line 2068 of file multi_domain.template.cc.

References oomph::Mesh::add_boundary_node(), oomph::Mesh::add_external_halo_element_pt(), oomph::Mesh::add_external_halo_node_pt(), oomph::AlgebraicNode::add_node_update_info(), Counter_for_flat_packed_doubles, Counter_for_flat_packed_unsigneds, oomph::FiniteElement::dim(), oomph::Mesh::external_halo_element_pt(), Flat_packed_doubles, Flat_packed_unsigneds, oomph::AlgebraicMesh::geom_object_list_pt(), oomph::MacroElementNodeUpdateMesh::geom_object_vector_pt(), i, oomph::BoundaryNodeBase::index_of_first_value_assigned_by_face_element_pt(), oomph::FiniteElement::local_coordinate_of_node(), oomph::MacroElementNodeUpdateMesh::macro_domain_pt(), oomph::Domain::macro_element_pt(), oomph::Node::ndim(), oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), oomph::MacroElementNodeUpdateNode::node_update_element_pt(), oomph::TimeStepper::ntstorage(), oomph::Data::nvalue(), oomph::oomph_info, oomph::QElementBase::s_macro_ll(), oomph::QElementBase::s_macro_ur(), oomph::FiniteElement::set_macro_elem_pt(), oomph::MacroElementNodeUpdateNode::set_node_update_info(), oomph::Data::set_value(), t, oomph::Problem::time_stepper_pt(), oomph::AlgebraicMesh::update_node_update(), oomph::SolidNode::variable_position_pt(), and oomph::Node::x().

◆ construct_new_external_halo_node_helper()

void oomph::Multi_domain_functions::construct_new_external_halo_node_helper ( Node *&  new_nod_pt,
unsigned &  loc_p,
unsigned &  node_index,
FiniteElement *const &  new_el_pt,
Mesh *const &  external_mesh_pt,
Problem problem_pt 
)

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

Helper function which constructs a new external 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 1452 of file multi_domain.cc.

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

Referenced by add_external_halo_node_helper().

◆ create_external_halo_elements()

template<class EXT_ELEMENT >
void oomph::Multi_domain_functions::create_external_halo_elements ( int &  iproc,
const Vector< Mesh * > &  mesh_pt,
Mesh *const &  external_mesh_pt,
Problem problem_pt,
const unsigned &  interaction_index 
)

◆ first_closer_than_second()

bool oomph::Multi_domain_functions::first_closer_than_second ( const std::pair< FiniteElement *, Vector< double > > &  p1,
const std::pair< FiniteElement *, Vector< double > > &  p2 
)

Comparison function for sorting entries in bin: Returns true if point identified by p1 (comprising pointer to finite element and vector of local coordinates within that element) is closer to Zeta_coords_for_further_away_comparison than p2.

Definition at line 2433 of file multi_domain.cc.

References Dim, i, oomph::FiniteElement::interpolated_zeta(), s, and Zeta_coords_for_further_away_comparison.

◆ get_dim_helper()

void oomph::Multi_domain_functions::get_dim_helper ( Problem problem_pt,
Mesh *const &  mesh_pt,
Mesh *const &  external_mesh_pt 
)

Helper function that computes the dimension of the elements within each of the specified meshes (and checks they are the same). Stores result in Dim.

Helper function that computes the dimension of the elements within each of the specified meshes (and checks they are the same) Stores result in Dim.

Definition at line 2343 of file multi_domain.cc.

References oomph::Problem::communicator_pt(), Dim, oomph::Mesh::element_pt(), and oomph::Mesh::nelement().

Referenced by setup_multi_domain_interaction().

◆ get_required_master_nodal_information_helper()

void oomph::Multi_domain_functions::get_required_master_nodal_information_helper ( int &  iproc,
Node master_nod_pt,
Problem problem_pt,
Mesh *const &  external_mesh_pt,
int &  n_cont_inter_values 
)

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

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

Definition at line 1010 of file multi_domain.cc.

References oomph::Mesh::add_external_haloed_element_pt(), add_external_haloed_node_to_storage(), oomph::FiniteElement::dim(), Flat_packed_doubles, Flat_packed_unsigneds, Flat_packed_unsigneds_string, oomph::AlgebraicMesh::geom_object_list_pt(), oomph::AlgebraicNode::geom_object_pt(), i, oomph::BoundaryNodeBase::index_of_first_value_assigned_by_face_element_pt(), oomph::Node::is_on_boundary(), oomph::FiniteElement::macro_elem_pt(), oomph::MacroElement::macro_element_number(), oomph::Mesh::nboundary(), oomph::Node::ndim(), oomph::Mesh::nexternal_haloed_element(), oomph::AlgebraicNode::ngeom_object(), oomph::AlgebraicMesh::ngeom_object_list_pt(), oomph::SolidNode::nlagrangian(), oomph::SolidNode::nlagrangian_type(), oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), oomph::MacroElementNodeUpdateNode::node_update_element_pt(), oomph::AlgebraicNode::node_update_fct_id(), oomph::Node::nposition_type(), oomph::AlgebraicNode::nref_value(), oomph::Problem::ntime_stepper(), oomph::TimeStepper::ntstorage(), oomph::Data::nvalue(), oomph::AlgebraicNode::ref_value(), oomph::QElementBase::s_macro_ll(), oomph::QElementBase::s_macro_ur(), t, oomph::Data::time_stepper_pt(), oomph::Problem::time_stepper_pt(), oomph::Data::value(), oomph::Node::value(), oomph::SolidNode::variable_position_pt(), and oomph::Node::x().

Referenced by add_external_haloed_master_node_helper().

◆ get_required_nodal_information_helper()

void oomph::Multi_domain_functions::get_required_nodal_information_helper ( int &  iproc,
Node nod_pt,
Problem problem_pt,
Mesh *const &  external_mesh_pt,
int &  n_cont_inter_values 
)

◆ locate_zeta_for_local_coordinates()

void oomph::Multi_domain_functions::locate_zeta_for_local_coordinates ( const Vector< Mesh * > &  mesh_pt,
Mesh *const &  external_mesh_pt,
Vector< MeshAsGeomObject * > &  mesh_geom_obj_pt,
const unsigned &  interaction_index 
)

◆ locate_zeta_for_missing_coordinates()

void oomph::Multi_domain_functions::locate_zeta_for_missing_coordinates ( int &  iproc,
Mesh *const &  external_mesh_pt,
Problem problem_pt,
Vector< MeshAsGeomObject * > &  mesh_geom_obj_pt 
)

◆ recursively_add_masters_of_external_halo_node_to_storage()

template<class EXT_ELEMENT >
void oomph::Multi_domain_functions::recursively_add_masters_of_external_halo_node_to_storage ( Node *&  new_nod_pt,
Mesh *const &  external_mesh_pt,
unsigned &  loc_p,
unsigned &  node_index,
FiniteElement *const &  new_el_pt,
int &  n_cont_inter_values,
Problem problem_pt 
)

Recursively add masters of external halo nodes (and their masters, etc) based on information received from the haloed process.

Definition at line 1959 of file multi_domain.template.cc.

References Counter_for_flat_packed_doubles, Counter_for_flat_packed_unsigneds, Flat_packed_doubles, Flat_packed_unsigneds, oomph::oomph_info, oomph::Node::set_hanging_pt(), and oomph::HangInfo::set_master_node_pt().

◆ recursively_add_masters_of_external_haloed_node()

void oomph::Multi_domain_functions::recursively_add_masters_of_external_haloed_node ( int &  iproc,
Node nod_pt,
Problem problem_pt,
Mesh *const &  external_mesh_pt,
int &  n_cont_inter_values 
)

◆ send_and_receive_located_info()

void oomph::Multi_domain_functions::send_and_receive_located_info ( int &  iproc,
Mesh *const &  external_mesh_pt,
Problem problem_pt 
)

Send location information from current process; Received location information from (current process + iproc) modulo (nproc)

Helper function to send back any located information.

Definition at line 264 of file multi_domain.cc.

References oomph::Problem::communicator_pt(), Dim, Flat_packed_doubles, Flat_packed_located_coordinates, Flat_packed_unsigneds, Flat_packed_unsigneds_string, i, Located_element_status, oomph::oomph_info, Proc_id_plus_one_of_external_element, and Received_flat_packed_zetas_to_be_found.

Referenced by aux_setup_multi_domain_interaction().

◆ send_and_receive_missing_zetas()

void oomph::Multi_domain_functions::send_and_receive_missing_zetas ( Problem problem_pt)

Send the zeta coordinates from the current process to the next process; receive from the previous process.

Helper function to send any "missing" zeta coordinates to the next process and receive any coordinates from previous process.

Definition at line 177 of file multi_domain.cc.

References oomph::Problem::communicator_pt(), Flat_packed_zetas_not_found_locally, and Received_flat_packed_zetas_to_be_found.

Referenced by aux_setup_multi_domain_interaction().

◆ setup_bulk_elements_adjacent_to_face_mesh() [1/2]

template<class BULK_ELEMENT , unsigned DIM>
void oomph::Multi_domain_functions::setup_bulk_elements_adjacent_to_face_mesh ( Problem problem_pt,
const unsigned &  boundary_in_bulk_mesh,
Mesh *const &  bulk_mesh_pt,
Mesh *const &  face_mesh_pt,
const unsigned &  interaction = 0 
)

Identify the FaceElements (stored in the mesh pointed to by face_mesh_pt) that are adjacent to the bulk elements next to the boundary_in_bulk_mesh -th boundary of the mesh pointed to by bulk_mesh_pt. The FaceElements must be derived from the ElementWithExternalElement base class and the adjacent bulk elements are stored as their external elements.

Definition at line 207 of file multi_domain.template.cc.

◆ setup_bulk_elements_adjacent_to_face_mesh() [2/2]

template<class BULK_ELEMENT , unsigned DIM>
void oomph::Multi_domain_functions::setup_bulk_elements_adjacent_to_face_mesh ( Problem problem_pt,
Vector< unsigned > &  boundary_in_bulk_mesh,
Mesh *const &  bulk_mesh_pt,
Vector< Mesh * > &  face_mesh_pt,
const unsigned &  interaction = 0 
)

Identify the FaceElements (stored in the mesh pointed to by face_mesh_pt) that are adjacent to the bulk elements next to the boundary_in_bulk_mesh -th boundary of the mesh pointed to by bulk_mesh_pt. The FaceElements must be derived from the ElementWithExternalElement base class and the adjacent bulk elements are stored as their external elements.

/ Templated helper functions for multi-domain methods using locate_zeta

This is the vector-based version which deals with multiple bulk mesh boundaries at the same time.

Identify the FaceElements (stored in the mesh pointed to by face_mesh_pt) that are adjacent to the bulk elements next to the boundary_in_bulk_mesh -th boundary of the mesh pointed to by bulk_mesh_pt. The FaceElements must be derived from the ElementWithExternalElement base class and the adjacent bulk elements are stored as their external elements.

This is the vector-based version which deals with multiple bulk mesh boundaries at the same time.

Definition at line 72 of file multi_domain.template.cc.

References Doc_boundary_coordinate_file, e, oomph::FiniteElement::get_s_plot(), i, oomph::FaceElement::interpolated_x(), oomph::FiniteElement::interpolated_zeta(), oomph::FiniteElement::nplot_points(), s, oomph::FaceElement::set_boundary_number_in_bulk_mesh(), setup_multi_domain_interaction(), oomph::FiniteElement::tecplot_zone_string(), and oomph::FiniteElement::write_tecplot_zone_footer().

Referenced by oomph::FSI_functions::setup_fluid_load_info_for_solid_elements(), and oomph::FSI_functions::setup_solid_elements_for_displacement_bc().

◆ setup_multi_domain_interaction() [1/3]

template<class EXT_ELEMENT , class FACE_ELEMENT_GEOM_OBJECT >
void oomph::Multi_domain_functions::setup_multi_domain_interaction ( Problem problem_pt,
const Vector< Mesh * > &  mesh_pt,
Mesh *const &  external_mesh_pt,
const Vector< Mesh * > &  external_face_mesh_pt,
const unsigned &  interaction_index = 0 
)

Function to set up the one-way multi-domain interaction for FSI-like problems.

  • mesh_pt points to the mesh of ElemenWithExternalElements for which the interaction is set up. In an FSI example, this mesh would contain the FSIWallElements (either beam/shell elements or the FSISolidTractionElements that apply the traction to a "bulk" solid mesh that is loaded by the fluid.)
  • external_mesh_pt points to the mesh that contains the elements of type EXT_ELEMENT that provide the "source" for the ElementWithExternalElements. In an FSI example, this mesh would contain the "bulk" fluid elements.
  • external_face_mesh_pt points to the mesh of FaceElements attached to the external_mesh_pt. The mesh pointed to by external_face_mesh_pt has the same dimension as mesh_pt. The elements contained in external_face_mesh_pt are of type FACE_ELEMENT_GEOM_OBJECT. In an FSI example, these elements are usually the FaceElementAsGeomObjects (templated by the type of the "bulk" fluid elements to which they are attached) that define the FSI boundary of the fluid domain.
  • The interaction_index parameter defaults to zero and must otherwise be set by the user if there is more than one mesh that provides "external elements" for the Mesh pointed to by mesh_pt (e.g. in the case when a beam or shell structure is loaded by fluid from both sides.)

This is the vector-based version which operates simultaneously on the meshes contained in the Vector arguments.

  • mesh_pt points to the mesh of ElemenWithExternalElements for which the interaction is set up. In an FSI example, this mesh would contain the FSIWallElements (either beam/shell elements or the FSISolidTractionElements that apply the traction to a "bulk" solid mesh that is loaded by the fluid.)
  • external_mesh_pt points to the mesh that contains the elements of type EXT_ELEMENT that provide the "source" for the ElementWithExternalElements. In an FSI example, this mesh would contain the "bulk" fluid elements.
  • external_face_mesh_pt points to the mesh of FaceElements attached to the external_mesh_pt. The mesh pointed to by external_face_mesh_pt has the same dimension as mesh_pt. The elements contained in external_face_mesh_pt are of type FACE_ELEMENT_GEOM_OBJECT. In an FSI example, these elements are usually the FaceElementAsGeomObjects (templated by the type of the "bulk" fluid elements to which they are attached) that define the FSI boundary of the fluid domain.
  • The interaction_index parameter defaults to zero and must otherwise be set by the user if there is more than one mesh that provides "external elements" for the Mesh pointed to by mesh_pt (e.g. in the case when a beam or shell structure is loaded by fluid from both sides.)

Vector-based version operates simultaneously on the meshes contained in the vectors.

Definition at line 400 of file multi_domain.template.cc.

References Dim, get_dim_helper(), i, and Use_bulk_element_as_external.

◆ setup_multi_domain_interaction() [2/3]

template<class EXT_ELEMENT >
void oomph::Multi_domain_functions::setup_multi_domain_interaction ( Problem problem_pt,
Mesh *const &  mesh_pt,
Mesh *const &  external_mesh_pt,
const unsigned &  interaction_index = 0 
)

Function to set up the one-way multi-domain interaction for problems where the meshes pointed to by mesh_pt and external_mesh_pt occupy the same physical space, and the elements in external_mesh_pt act as "external elements" for the ElementWithExternalElements in mesh_pt (but not vice versa):

  • mesh_pt points to the mesh of ElemenWithExternalElements for which the interaction is set up.
  • external_mesh_pt points to the mesh that contains the elements of type EXT_ELEMENT that act as "external elements" for the ElementWithExternalElements in \ mesh_pt.
  • The interaction_index parameter defaults to zero and must be otherwise set by the user if there is more than one mesh that provides sources for the Mesh pointed to by mesh_pt.
  • mesh_pt points to the mesh of ElemenWithExternalElements for which the interaction is set up.
  • external_mesh_pt points to the mesh that contains the elements of type EXT_ELEMENT that act as "external elements" for the ElementWithExternalElements in mesh_pt.
  • The interaction_index parameter defaults to zero and must be otherwise set by the user if there is more than one mesh that provides sources for the Mesh pointed to by mesh_pt.

Definition at line 280 of file multi_domain.template.cc.

References Dim, get_dim_helper(), and Use_bulk_element_as_external.

Referenced by oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::project(), and setup_bulk_elements_adjacent_to_face_mesh().

◆ setup_multi_domain_interaction() [3/3]

template<class EXT_ELEMENT , class FACE_ELEMENT_GEOM_OBJECT >
void oomph::Multi_domain_functions::setup_multi_domain_interaction ( Problem problem_pt,
Mesh *const &  mesh_pt,
Mesh *const &  external_mesh_pt,
Mesh *const &  external_face_mesh_pt,
const unsigned &  interaction_index = 0 
)

Function to set up the one-way multi-domain interaction for FSI-like problems.

  • mesh_pt points to the mesh of ElemenWithExternalElements for which the interaction is set up. In an FSI example, this mesh would contain the FSIWallElements (either beam/shell elements or the FSISolidTractionElements that apply the traction to a "bulk" solid mesh that is loaded by the fluid.)
  • external_mesh_pt points to the mesh that contains the elements of type EXT_ELEMENT that provide the "source" for the ElementWithExternalElements. In an FSI example, this mesh would contain the "bulk" fluid elements.
  • external_face_mesh_pt points to the mesh of FaceElements attached to the external_mesh_pt. The mesh pointed to by external_face_mesh_pt has the same dimension as mesh_pt. The elements contained in external_face_mesh_pt are of type FACE_ELEMENT_GEOM_OBJECT. In an FSI example, these elements are usually the FaceElementAsGeomObjects (templated by the type of the "bulk" fluid elements to which they are attached) that define the FSI boundary of the fluid domain.
  • The interaction_index parameter defaults to zero and must otherwise be set by the user if there is more than one mesh that provides "external elements" for the Mesh pointed to by mesh_pt (e.g. in the case when a beam or shell structure is loaded by fluid from both sides.)

Definition at line 336 of file multi_domain.template.cc.

References Dim, get_dim_helper(), and Use_bulk_element_as_external.

◆ setup_multi_domain_interactions()

template<class ELEMENT_0 , class ELEMENT_1 >
void oomph::Multi_domain_functions::setup_multi_domain_interactions ( Problem problem_pt,
Mesh *const &  first_mesh_pt,
Mesh *const &  second_mesh_pt,
const unsigned &  first_interaction = 0,
const unsigned &  second_interaction = 0 
)

Set up the two-way multi-domain interactions for the problem pointed to by problem_pt. Use this for cases where first_mesh_pt and second_mesh_pt occupy the same physical space and are populated by ELEMENT_0 and ELEMENT_1 respectively, and are combined to solve a single problem. The elements in two meshes interact both ways the elements in each mesh act as "external elements" for the elements in the "other" mesh. The interaction indices allow the specification of which interaction we're setting up in the two meshes. They default to zero, which is appropriate if there's only a single interaction.

Definition at line 244 of file multi_domain.template.cc.

References oomph::Mesh::delete_all_external_storage().

Variable Documentation

◆ Accept_failed_locate_zeta_in_setup_multi_domain_interaction

bool oomph::Multi_domain_functions::Accept_failed_locate_zeta_in_setup_multi_domain_interaction = false

Boolean to indicate that failure in setup multi domain functions is acceptable; defaults to false. If set to true external element pointers are set to null for those elements for which external elements couldn't be located.

Definition at line 56 of file multi_domain.cc.

Referenced by aux_setup_multi_domain_interaction().

◆ Allow_use_of_halo_elements_as_external_elements

bool oomph::Multi_domain_functions::Allow_use_of_halo_elements_as_external_elements = true

Boolean to indicate if we're allowed to use halo elements as external elements. Can drastically reduce the number of external halo elements – currently not aware of any problems therefore set to true by default but retention of this flag allows easy return to previous implementation.

Definition at line 149 of file multi_domain.cc.

Referenced by locate_zeta_for_local_coordinates().

◆ Allow_use_of_halo_elements_as_external_elements_for_projection

bool oomph::Multi_domain_functions::Allow_use_of_halo_elements_as_external_elements_for_projection = true

Indicate whether we are allowed to use halo elements as external elements for projection, possibly only required in parallel unstructured mesh generation during the projection stage. Default set to true.

Definition at line 155 of file multi_domain.cc.

◆ Counter_for_flat_packed_doubles

unsigned oomph::Multi_domain_functions::Counter_for_flat_packed_doubles

◆ Counter_for_flat_packed_unsigneds

unsigned oomph::Multi_domain_functions::Counter_for_flat_packed_unsigneds

◆ Dim

unsigned oomph::Multi_domain_functions::Dim

Dimension of zeta tuples (set by get_dim_helper) – needed because we store the scalar coordinates in flat-packed form.

Definition at line 60 of file multi_domain.cc.

Referenced by aux_setup_multi_domain_interaction(), oomph::HelmholtzDtNBoundaryElement< ELEMENT >::compute_gamma_contribution(), oomph::QSUPGAdvectionDiffusionElement< DIM, NNODE_1D >::dshape_and_dtest_eulerian_at_knot_adv_diff(), oomph::PolarNavierStokesTractionElement< ELEMENT >::fill_in_generic_residual_contribution(), oomph::AdvectionDiffusionFluxElement< ELEMENT >::fill_in_generic_residual_contribution_adv_diff_flux(), oomph::LinearisedAxisymPoroelasticBJS_FSIElement< FLUID_BULK_ELEMENT, POROELASTICITY_BULK_ELEMENT >::fill_in_generic_residual_contribution_axisym_poroelastic_fsi(), oomph::NavierStokesSpaceTimeTractionElement< ELEMENT >::fill_in_generic_residual_contribution_fluid_traction(), oomph::NavierStokesMixedOrderSpaceTimeTractionElement< ELEMENT >::fill_in_generic_residual_contribution_fluid_traction(), oomph::NavierStokesTractionElement< ELEMENT >::fill_in_generic_residual_contribution_fluid_traction(), oomph::LinearisedFSIAxisymmetricNStNoSlipBCElementElement< FLUID_BULK_ELEMENT, SOLID_BULK_ELEMENT >::fill_in_generic_residual_contribution_fsi_no_slip_axisym(), oomph::HelmholtzFluxElement< ELEMENT >::fill_in_generic_residual_contribution_helmholtz_flux(), oomph::PMLHelmholtzFluxElement< ELEMENT >::fill_in_generic_residual_contribution_helmholtz_flux(), oomph::FourierDecomposedHelmholtzFluxFromNormalDisplacementBCElement< HELMHOLTZ_BULK_ELEMENT, ELASTICITY_BULK_ELEMENT >::fill_in_generic_residual_contribution_helmholtz_flux_from_displacement(), oomph::HelmholtzFluxFromNormalDisplacementBCElement< HELMHOLTZ_BULK_ELEMENT, ELASTICITY_BULK_ELEMENT >::fill_in_generic_residual_contribution_helmholtz_flux_from_displacement(), oomph::PMLHelmholtzFluxFromNormalDisplacementBCElement< HELMHOLTZ_BULK_ELEMENT, ELASTICITY_BULK_ELEMENT >::fill_in_generic_residual_contribution_helmholtz_flux_from_displacement(), oomph::LinearWaveFluxElement< ELEMENT >::fill_in_generic_residual_contribution_lin_wave_flux(), oomph::PoissonFluxElement< ELEMENT >::fill_in_generic_residual_contribution_poisson_flux(), oomph::UnsteadyHeatFluxElement< ELEMENT >::fill_in_generic_residual_contribution_ust_heat_flux(), first_closer_than_second(), get_dim_helper(), oomph::PolarStressIntegralElement< ELEMENT >::get_shear_stress(), locate_zeta_for_local_coordinates(), locate_zeta_for_missing_coordinates(), oomph::StorableShapeElementBase::pre_compute_d2shape_local_at_knots(), oomph::StorableShapeElementBase::pre_compute_dshape_local_at_knots(), oomph::RefineableNavierStokesSpaceTimeTractionElement< ELEMENT >::refineable_fill_in_generic_residual_contribution_fluid_traction(), oomph::RefineableNavierStokesMixedOrderSpaceTimeTractionElement< ELEMENT >::refineable_fill_in_generic_residual_contribution_fluid_traction(), oomph::RefineableNavierStokesTractionElement< ELEMENT >::refineable_fill_in_generic_residual_contribution_fluid_traction(), send_and_receive_located_info(), setup_multi_domain_interaction(), and oomph::PVDEquationsWithPressure< DIM >::solid_pshape_at_knot().

◆ Doc_boundary_coordinate_file

std::ofstream oomph::Multi_domain_functions::Doc_boundary_coordinate_file

Output file to document the boundary coordinate along the mesh boundary of the bulk mesh during call to setup_bulk_elements_adjacent_to_face_mesh(...)

Definition at line 47 of file multi_domain.cc.

Referenced by setup_bulk_elements_adjacent_to_face_mesh().

◆ Doc_full_stats

bool oomph::Multi_domain_functions::Doc_full_stats = false

Boolean to indicate whether to output further info during setup_multi_domain_interaction() routines.

Boolean to indicate whether to document further info (to screen) during setup_multi_domain_interaction() routines.

Definition at line 166 of file multi_domain.cc.

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

◆ Doc_stats

bool oomph::Multi_domain_functions::Doc_stats = false

Boolean to indicate whether to output basic info during setup_multi_domain_interaction() routines.

Boolean to indicate whether to document basic info (to screen) during setup_multi_domain_interaction() routines.

Definition at line 162 of file multi_domain.cc.

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

◆ Doc_timings

bool oomph::Multi_domain_functions::Doc_timings = false

Boolean to indicate whether to doc timings or not.

Definition at line 158 of file multi_domain.cc.

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

◆ External_element_located

Vector< Vector< unsigned > > oomph::Multi_domain_functions::External_element_located

Lookup scheme for whether a local element's integration point has had an external element assigned to it – essentially boolean. External_element_located[e][ipt] = {0,1} if external element for ipt-th integration in local element e {has not, has} been found. Used locally to ensure that we're not searching for the same elements over and over again when we go around the spirals.

Definition at line 68 of file multi_domain.cc.

Referenced by aux_setup_multi_domain_interaction(), clean_up(), create_external_halo_elements(), and locate_zeta_for_local_coordinates().

◆ Flat_packed_doubles

Vector< double > oomph::Multi_domain_functions::Flat_packed_doubles

◆ Flat_packed_located_coordinates

Vector< double > oomph::Multi_domain_functions::Flat_packed_located_coordinates

Vector of flat-packed local coordinates for zeta tuples that have been located.

Definition at line 102 of file multi_domain.cc.

Referenced by clean_up(), create_external_halo_elements(), locate_zeta_for_missing_coordinates(), and send_and_receive_located_info().

◆ Flat_packed_unsigneds

Vector< unsigned > oomph::Multi_domain_functions::Flat_packed_unsigneds

Vector of flat-packed unsigneds to be communicated with other processors – this is really "private" data, declared here to avoid having to pass the array between the various helper functions.

Definition at line 118 of file multi_domain.cc.

Referenced by oomph::RefineableTriangleMesh< ELEMENT >::add_element_load_balance_helper(), add_external_halo_master_node_helper(), add_external_halo_node_helper(), add_external_haloed_master_node_helper(), add_external_haloed_node_helper(), oomph::RefineableTriangleMesh< ELEMENT >::add_halo_element_helper(), oomph::RefineableTriangleMesh< ELEMENT >::add_halo_node_helper(), oomph::RefineableTriangleMesh< ELEMENT >::add_haloed_node_helper(), oomph::RefineableTriangleMesh< ELEMENT >::add_node_load_balance_helper(), oomph::RefineableTriangleMesh< ELEMENT >::add_received_node_load_balance_helper(), clean_up(), construct_new_external_halo_master_node_helper(), construct_new_external_halo_node_helper(), oomph::RefineableTriangleMesh< ELEMENT >::construct_new_halo_node_helper(), oomph::RefineableTriangleMesh< ELEMENT >::construct_new_node_load_balance_helper(), oomph::RefineableTriangleMesh< ELEMENT >::create_element_load_balance_helper(), create_external_halo_elements(), oomph::RefineableTriangleMesh< ELEMENT >::create_halo_element(), oomph::RefineableTriangleMesh< ELEMENT >::get_required_elemental_information_helper(), oomph::RefineableTriangleMesh< ELEMENT >::get_required_elemental_information_load_balance_helper(), get_required_master_nodal_information_helper(), get_required_nodal_information_helper(), oomph::RefineableTriangleMesh< ELEMENT >::get_required_nodal_information_helper(), oomph::RefineableTriangleMesh< ELEMENT >::get_required_nodal_information_load_balance_helper(), oomph::RefineableTriangleMesh< ELEMENT >::load_balance(), locate_zeta_for_missing_coordinates(), recursively_add_masters_of_external_halo_node_to_storage(), recursively_add_masters_of_external_haloed_node(), oomph::RefineableTriangleMesh< ELEMENT >::reset_halo_haloed_scheme(), oomph::RefineableTriangleMesh< ELEMENT >::reset_halo_haloed_scheme_helper(), oomph::RefineableTriangleMesh< ELEMENT >::send_and_receive_elements_nodes_info(), and send_and_receive_located_info().

◆ Flat_packed_unsigneds_string

Vector< std::string > oomph::Multi_domain_functions::Flat_packed_unsigneds_string

◆ Flat_packed_zetas_not_found_locally

Vector< double > oomph::Multi_domain_functions::Flat_packed_zetas_not_found_locally

Vector of flat-packed zeta coordinates for which the external element could not be found during current local search. These will be sent to the next processor in the ring-like parallel search. The zeta coordinates come in groups of Dim (scalar) coordinates.

Definition at line 74 of file multi_domain.cc.

Referenced by aux_setup_multi_domain_interaction(), clean_up(), locate_zeta_for_local_coordinates(), locate_zeta_for_missing_coordinates(), and send_and_receive_missing_zetas().

◆ Located_element_status

Vector< unsigned > oomph::Multi_domain_functions::Located_element_status

Vector to indicate (to another processor) whether a located element (that will have to represented as an external halo element on that processor) should be newly created on that processor (2), already exists on that processor (1), or is not on the current processor either (0).

Definition at line 98 of file multi_domain.cc.

Referenced by clean_up(), create_external_halo_elements(), locate_zeta_for_missing_coordinates(), and send_and_receive_located_info().

◆ Proc_id_plus_one_of_external_element

Vector< int > oomph::Multi_domain_functions::Proc_id_plus_one_of_external_element

Proc_id_plus_one_of_external_element[i] contains the processor id (plus one) of the processor on which the i-th zeta coordinate tuple received from elsewhere (in the order in which these are stored in Received_flat_packed_zetas_to_be_found) was located; it's zero if it wasn't found during the current stage of the ring-like parallel search.

Definition at line 91 of file multi_domain.cc.

Referenced by clean_up(), create_external_halo_elements(), locate_zeta_for_missing_coordinates(), and send_and_receive_located_info().

◆ Received_flat_packed_zetas_to_be_found

Vector< double > oomph::Multi_domain_functions::Received_flat_packed_zetas_to_be_found

Vector of flat-packed zeta coordinates for which the external element could not be found on another processor and for which we're currently searching here. Whatever can't be found here, gets written into Flat_packed_zetas_not_found_locally and then passed on to the next processor during the ring-like parallel search. The zeta coordinates come in groups of Dim (scalar) coordinates.

Definition at line 82 of file multi_domain.cc.

Referenced by clean_up(), locate_zeta_for_missing_coordinates(), send_and_receive_located_info(), and send_and_receive_missing_zetas().

◆ Use_bulk_element_as_external

bool oomph::Multi_domain_functions::Use_bulk_element_as_external = false

Boolean to indicate when to use the bulk element as the external element. Defaults to false, you must have set up FaceElements properly first in order for it to work.

Definition at line 142 of file multi_domain.cc.

Referenced by aux_setup_multi_domain_interaction(), locate_zeta_for_local_coordinates(), locate_zeta_for_missing_coordinates(), and setup_multi_domain_interaction().

◆ Zeta_coords_for_further_away_comparison

Vector<double> oomph::Multi_domain_functions::Zeta_coords_for_further_away_comparison

Vector of zeta coordinates that we're currently trying to locate; used in sorting of bin entries in further_away() comparison function.

Definition at line 2427 of file multi_domain.cc.

Referenced by first_closer_than_second().