26 #ifndef OOMPH_QUARTER_CIRCLE_SECTOR_MESH_HEADER
27 #define OOMPH_QUARTER_CIRCLE_SECTOR_MESH_HEADER
29 #include "../generic/refineable_quad_mesh.h"
30 #include "../generic/macro_element.h"
31 #include "../generic/domain.h"
32 #include "../generic/algebraic_elements.h"
33 #include "../generic/quad_mesh.h"
34 #include "../generic/macro_element_node_update_element.h"
85 template<
class ELEMENT>
97 const double& fract_mid,
184 template<
class ELEMENT>
199 const double& fract_mid,
203 wall_pt, xi_lo, fract_mid, xi_hi, time_stepper_pt)
223 class MacroElementNodeUpdateNode;
257 template<
class ELEMENT>
273 const double& fract_mid,
278 wall_pt, xi_lo, fract_mid, xi_hi, time_stepper_pt)
281 ELEMENT* el_pt =
new ELEMENT;
284 std::ostringstream error_message;
286 <<
"Base class for ELEMENT in "
287 <<
"MacroElementNodeUpdateRefineableQuarterCircleSectorMesh needs"
288 <<
"to be of type MacroElementNodeUpdateElement!\n";
289 error_message <<
"Whereas it is: typeid(el_pt).name()"
290 <<
typeid(el_pt).
name() << std::endl;
293 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh::\n";
295 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh()";
321 if (update_all_solid_nodes)
324 "Doesn't make sense to use an MacroElementNodeUpdateMesh with\n";
326 "SolidElements so specifying update_all_solid_nodes=true\n";
327 error_message +=
"doesn't make sense either\n";
330 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh::\n";
331 function_name +=
"node_update()";
346 unsigned n_element = this->
nelement();
347 for (
unsigned i = 0;
i < n_element;
i++)
350 ELEMENT* el_pt =
dynamic_cast<ELEMENT*
>(this->
element_pt(
i));
358 std::ostringstream error_message;
360 <<
"Failed to upcast to MacroElementNodeUpdateElementBase\n";
361 error_message <<
"Element must be derived from "
362 "MacroElementNodeUpdateElementBase\n";
363 error_message <<
"but it is of type " <<
typeid(el_pt).
name();
366 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh::\n";
367 function_name +=
"setup_macro_element_node_update()";
376 geom_object_pt[0] = this->
Wall_pt;
380 el_pt->set_node_update_info(geom_object_pt);
385 geom_object_pt[0] = this->
Wall_pt;
438 template<
class ELEMENT>
454 const double& fract_mid,
458 wall_pt, xi_lo, fract_mid, xi_hi, time_stepper_pt)
461 ELEMENT* el_pt =
new ELEMENT;
464 std::ostringstream error_message;
466 error_message <<
"Base class for ELEMENT in "
467 <<
"AlgebraicRefineableQuarterCircleSectorMesh needs"
468 <<
"to be of type AlgebraicElement!\n";
469 error_message <<
"Whereas it is: typeid(el_pt).name()"
470 <<
typeid(el_pt).
name() << std::endl;
473 " AlgebraicRefineableQuarterCircleSectorMesh::\n";
474 function_name +=
"AlgebraicRefineableQuarterCircleSectorMesh()";
504 if (update_all_solid_nodes)
507 "Doesn't make sense to use an AlgebraicMesh with\n";
509 "SolidElements so specifying update_all_solid_nodes=true\n";
510 error_message +=
"doesn't make sense either\n";
513 " AlgebraicRefineableQuarterCircleSectorMesh::";
514 function_name +=
"node_update()";
556 std::ostringstream error_message;
557 error_message <<
"The node update fct id is " <<
id
558 <<
", but it should only be one of " <<
Central_box
562 " AlgebraicRefineableQuarterCircleSectorMesh::";
563 function_name +=
"algebraic_node_update()";
580 unsigned n_update =
id.size();
581 for (
unsigned i = 0;
i < n_update;
i++)
606 std::ostringstream error_message;
607 error_message <<
"Node update fct id is " <<
id[
i]
613 " AlgebraicRefineableQuarterCircleSectorMesh::";
614 function_name +=
"update_node_update()";
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Definition: algebraic_elements.h:506
Definition: algebraic_elements.h:599
void node_update(const bool &update_all_solid_nodes=false)
Definition: algebraic_elements.h:653
unsigned self_test()
Self test: check consistentency of multiple node updates.
Definition: algebraic_elements.h:786
void add_geom_object_list_pt(GeomObject *geom_object_pt)
Definition: algebraic_elements.h:823
AlgebraicNode * node_pt(const unsigned long &n)
Return a pointer to the n-th global AlgebraicNode.
Definition: algebraic_elements.h:620
Definition: algebraic_elements.h:55
int node_update_fct_id()
Default (usually first if there are multiple ones) node update fct id.
Definition: algebraic_elements.h:146
Definition: quarter_circle_sector_mesh.template.h:442
void update_node_update(AlgebraicNode *&node_pt)
Definition: quarter_circle_sector_mesh.template.h:573
double Lambda_y
Fractional height of central box.
Definition: quarter_circle_sector_mesh.template.h:637
void node_update(const bool &update_all_solid_nodes=false)
Definition: quarter_circle_sector_mesh.template.h:501
void setup_algebraic_node_update()
Setup algebraic update operation for all nodes.
Definition: quarter_circle_sector_mesh.template.cc:557
AlgebraicRefineableQuarterCircleSectorMesh(GeomObject *wall_pt, const double &xi_lo, const double &fract_mid, const double &xi_hi, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Definition: quarter_circle_sector_mesh.template.h:451
unsigned self_test()
Run self-test for algebraic mesh – return 0/1 for OK/failure.
Definition: quarter_circle_sector_mesh.template.h:491
@ Lower_right_box
Definition: quarter_circle_sector_mesh.template.h:628
@ Central_box
Definition: quarter_circle_sector_mesh.template.h:627
@ Upper_left_box
Definition: quarter_circle_sector_mesh.template.h:629
void update_node_update_in_lower_right_box(AlgebraicNode *&node_pt)
Update algebraic update function for nodes in lower right box.
Definition: quarter_circle_sector_mesh.template.cc:1159
void node_update_in_central_box(const unsigned &t, AlgebraicNode *&node_pt)
Definition: quarter_circle_sector_mesh.template.cc:851
void node_update_in_lower_right_box(const unsigned &t, AlgebraicNode *&node_pt)
Definition: quarter_circle_sector_mesh.template.cc:940
void update_node_update_in_upper_left_box(AlgebraicNode *&node_pt)
Update algebraic update function for nodes in upper left box.
Definition: quarter_circle_sector_mesh.template.cc:1259
void algebraic_node_update(const unsigned &t, AlgebraicNode *&node_pt)
Definition: quarter_circle_sector_mesh.template.h:527
void node_update_in_upper_left_box(const unsigned &t, AlgebraicNode *&node_pt)
Definition: quarter_circle_sector_mesh.template.cc:1048
double Lambda_x
Fractional width of central box.
Definition: quarter_circle_sector_mesh.template.h:634
Definition: geom_objects.h:101
Base class for elements that allow MacroElement-based node update.
Definition: macro_element_node_update_element.h:197
Definition: macro_element_node_update_element.h:360
void set_geom_object_vector_pt(Vector< GeomObject * > geom_object_vector_pt)
Definition: macro_element_node_update_element.h:510
void node_update(const bool &update_all_solid_nodes=false)
Definition: macro_element_node_update_element.h:387
Domain *& macro_domain_pt()
Broken assignment operator.
Definition: macro_element_node_update_element.h:376
Definition: quarter_circle_sector_mesh.template.h:261
virtual ~MacroElementNodeUpdateRefineableQuarterCircleSectorMesh()
Destructor: empty.
Definition: quarter_circle_sector_mesh.template.h:311
void setup_macro_element_node_update()
Definition: quarter_circle_sector_mesh.template.h:344
void node_update(const bool &update_all_solid_nodes=false)
Definition: quarter_circle_sector_mesh.template.h:318
MacroElementNodeUpdateRefineableQuarterCircleSectorMesh(GeomObject *wall_pt, const double &xi_lo, const double &fract_mid, const double &xi_hi, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Definition: quarter_circle_sector_mesh.template.h:270
static Steady< 0 > Default_TimeStepper
The Steady Timestepper.
Definition: mesh.h:75
const Vector< GeneralisedElement * > & element_pt() const
Return reference to the Vector of elements.
Definition: mesh.h:460
unsigned long nelement() const
Return number of elements in the mesh.
Definition: mesh.h:590
Definition: oomph_definitions.h:222
Base class for quad meshes (meshes made of 2D quad elements).
Definition: quad_mesh.h:57
Definition: quarter_circle_sector_domain.h:43
double(* BLSquashFctPt)(const double &s)
Definition: quarter_circle_sector_domain.h:84
BLSquashFctPt & bl_squash_fct_pt()
Definition: quarter_circle_sector_domain.h:91
Definition: quarter_circle_sector_mesh.template.h:87
GeomObject *& wall_pt()
Access function to GeomObject representing wall.
Definition: quarter_circle_sector_mesh.template.h:105
double Fract_mid
Fraction along wall where outer ring is to be divided.
Definition: quarter_circle_sector_mesh.template.h:138
double Xi_hi
Upper limit for the (1D) coordinates along the wall.
Definition: quarter_circle_sector_mesh.template.h:141
GeomObject * Wall_pt
Definition: quarter_circle_sector_mesh.template.h:132
QuarterCircleSectorMesh(GeomObject *wall_pt, const double &xi_lo, const double &fract_mid, const double &xi_hi, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Definition: quarter_circle_sector_mesh.template.cc:44
QuarterCircleSectorDomain * Domain_pt
Pointer to Domain.
Definition: quarter_circle_sector_mesh.template.h:128
QuarterCircleSectorDomain * domain_pt()
Access function to domain.
Definition: quarter_circle_sector_mesh.template.h:111
QuarterCircleSectorDomain::BLSquashFctPt & bl_squash_fct_pt()
Definition: quarter_circle_sector_mesh.template.h:120
double Xi_lo
Lower limit for the (1D) coordinates along the wall.
Definition: quarter_circle_sector_mesh.template.h:135
virtual ~QuarterCircleSectorMesh()
Destructor:
Definition: quarter_circle_sector_mesh.template.h:102
Definition: refineable_quad_mesh.h:53
void setup_quadtree_forest()
Definition: refineable_quad_mesh.h:88
Definition: quarter_circle_sector_mesh.template.h:188
RefineableQuarterCircleSectorMesh(GeomObject *wall_pt, const double &xi_lo, const double &fract_mid, const double &xi_hi, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Definition: quarter_circle_sector_mesh.template.h:196
virtual ~RefineableQuarterCircleSectorMesh()
Destructor: Empty.
Definition: quarter_circle_sector_mesh.template.h:213
Definition: timesteppers.h:231
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
string name
Definition: plotDoE.py:33
t
Definition: plotPSD.py:36
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86