35 #ifndef OOMPH_MULTI_DOMAIN_HEADER
36 #define OOMPH_MULTI_DOMAIN_HEADER
40 #include <oomph-lib-config.h>
61 namespace Multi_domain_functions
131 #ifdef ANNOTATE_MULTI_DOMAIN_COMMUNICATION
136 extern Vector<std::string> Flat_packed_unsigneds_string;
200 template<
class BULK_ELEMENT,
unsigned DIM>
204 Mesh*
const& bulk_mesh_pt,
206 const unsigned& interaction = 0);
215 template<
class BULK_ELEMENT,
unsigned DIM>
218 const unsigned& boundary_in_bulk_mesh,
219 Mesh*
const& bulk_mesh_pt,
220 Mesh*
const& face_mesh_pt,
221 const unsigned& interaction = 0);
234 template<
class ELEMENT_0,
class ELEMENT_1>
237 Mesh*
const& first_mesh_pt,
238 Mesh*
const& second_mesh_pt,
239 const unsigned& first_interaction = 0,
240 const unsigned& second_interaction = 0);
255 template<
class EXT_ELEMENT>
257 Mesh*
const& mesh_pt,
258 Mesh*
const& external_mesh_pt,
259 const unsigned& interaction_index = 0);
285 template<
class EXT_ELEMENT,
class FACE_ELEMENT_GEOM_OBJECT>
287 Mesh*
const& mesh_pt,
288 Mesh*
const& external_mesh_pt,
289 Mesh*
const& external_face_mesh_pt,
290 const unsigned& interaction_index = 0);
320 template<
class EXT_ELEMENT,
class FACE_ELEMENT_GEOM_OBJECT>
324 Mesh*
const& external_mesh_pt,
326 const unsigned& interaction_index = 0);
330 template<
class EXT_ELEMENT,
class GEOM_OBJECT>
333 Mesh*
const& mesh_pt,
334 Mesh*
const& external_mesh_pt,
335 const unsigned& interaction_index,
336 Mesh*
const& external_face_mesh_pt = 0);
339 template<
class EXT_ELEMENT,
class GEOM_OBJECT>
343 Mesh*
const& external_mesh_pt,
344 const unsigned& interaction_index,
352 Mesh*
const& external_mesh_pt,
354 const unsigned& interaction_index);
361 void send_and_receive_missing_zetas(
Problem* problem_pt);
366 void locate_zeta_for_missing_coordinates(
368 Mesh*
const& external_mesh_pt,
374 void send_and_receive_located_info(
int& iproc,
375 Mesh*
const& external_mesh_pt,
382 template<
class EXT_ELEMENT>
383 void create_external_halo_elements(
int& iproc,
385 Mesh*
const& external_mesh_pt,
387 const unsigned& interaction_index);
393 void add_external_haloed_node_to_storage(
int& iproc,
396 Mesh*
const& external_mesh_pt,
397 int& n_cont_inter_values);
402 void recursively_add_masters_of_external_haloed_node(
406 Mesh*
const& external_mesh_pt,
407 int& n_cont_inter_values);
411 void add_external_haloed_node_helper(
int& iproc,
414 Mesh*
const& external_mesh_pt,
415 int& n_cont_inter_values);
418 void add_external_haloed_master_node_helper(
int& iproc,
421 Mesh*
const& external_mesh_pt,
422 int& n_cont_inter_values);
427 void get_required_nodal_information_helper(
int& iproc,
430 Mesh*
const& external_mesh_pt,
431 int& n_cont_inter_values);
436 void get_required_master_nodal_information_helper(
440 Mesh*
const& external_mesh_pt,
441 int& n_cont_inter_values);
447 template<
class EXT_ELEMENT>
448 void add_external_halo_node_to_storage(
Node*& new_nod_pt,
449 Mesh*
const& external_mesh_pt,
451 unsigned& node_index,
453 int& n_cont_inter_values,
458 template<
class EXT_ELEMENT>
459 void recursively_add_masters_of_external_halo_node_to_storage(
461 Mesh*
const& external_mesh_pt,
463 unsigned& node_index,
465 int& n_cont_inter_values,
470 void add_external_halo_node_helper(
Node*& new_nod_pt,
471 Mesh*
const& external_mesh_pt,
473 unsigned& node_index,
475 int& n_cont_inter_values,
479 template<
class EXT_ELEMENT>
480 void add_external_halo_master_node_helper(
Node*& new_master_nod_pt,
482 Mesh*
const& external_mesh_pt,
484 int& n_cont_inter_values,
490 void construct_new_external_halo_node_helper(
493 unsigned& node_index,
495 Mesh*
const& external_mesh_pt,
500 template<
class EXT_ELEMENT>
501 void construct_new_external_halo_master_node_helper(
502 Node*& new_master_nod_pt,
505 Mesh*
const& external_mesh_pt,
514 Mesh*
const& mesh_pt,
515 Mesh*
const& external_mesh_pt);
Definition: elements.h:1313
Definition: problem.h:151
Vector< int > Proc_id_plus_one_of_external_element
Definition: multi_domain.cc:91
Vector< double > Flat_packed_located_coordinates
Definition: multi_domain.cc:102
unsigned Counter_for_flat_packed_unsigneds
Definition: multi_domain.cc:134
Vector< Vector< unsigned > > External_element_located
Definition: multi_domain.cc:68
unsigned Dim
Definition: multi_domain.cc:60
Vector< double > Flat_packed_doubles
Definition: multi_domain.cc:106
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)
/ Templated helper functions for multi-domain methods using locate_zeta
Definition: multi_domain.template.cc:72
void clean_up()
Definition: multi_domain.cc:2413
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)
Definition: multi_domain.template.cc:244
Vector< unsigned > Flat_packed_unsigneds
Definition: multi_domain.cc:118
bool Doc_timings
Boolean to indicate whether to doc timings or not.
Definition: multi_domain.cc:158
void get_dim_helper(Problem *problem_pt, Mesh *const &mesh_pt, Mesh *const &external_mesh_pt)
Definition: multi_domain.cc:2343
std::ofstream Doc_boundary_coordinate_file
Definition: multi_domain.cc:47
Vector< double > Flat_packed_zetas_not_found_locally
Definition: multi_domain.cc:74
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)
Definition: multi_domain.cc:2153
bool Allow_use_of_halo_elements_as_external_elements
Definition: multi_domain.cc:149
bool Allow_use_of_halo_elements_as_external_elements_for_projection
Definition: multi_domain.cc:155
bool Doc_stats
Definition: multi_domain.cc:162
bool Doc_full_stats
Definition: multi_domain.cc:166
Vector< double > Received_flat_packed_zetas_to_be_found
Definition: multi_domain.cc:82
@ New
Definition: multi_domain.h:149
@ Not_found
Definition: multi_domain.h:151
@ Exists
Definition: multi_domain.h:150
bool Use_bulk_element_as_external
Definition: multi_domain.cc:142
void setup_multi_domain_interaction(Problem *problem_pt, Mesh *const &mesh_pt, Mesh *const &external_mesh_pt, const unsigned &interaction_index=0)
Definition: multi_domain.template.cc:280
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.
Definition: multi_domain.template.cc:485
Vector< unsigned > Located_element_status
Definition: multi_domain.cc:98
unsigned Counter_for_flat_packed_doubles
Definition: multi_domain.cc:112
bool Accept_failed_locate_zeta_in_setup_multi_domain_interaction
Definition: multi_domain.cc:56
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10