26#ifndef OOMPH_QUARTER_CIRCLE_SECTOR_MESH_HEADER
27#define OOMPH_QUARTER_CIRCLE_SECTOR_MESH_HEADER
82 template<
class ELEMENT>
179 template<
class ELEMENT>
218 class MacroElementNodeUpdateNode;
252 template<
class ELEMENT>
276 ELEMENT*
el_pt =
new ELEMENT;
279 std::ostringstream error_message;
281 <<
"Base class for ELEMENT in "
282 <<
"MacroElementNodeUpdateRefineableQuarterCircleSectorMesh needs"
283 <<
"to be of type MacroElementNodeUpdateElement!\n";
284 error_message <<
"Whereas it is: typeid(el_pt).name()"
288 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh::\n";
290 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh()";
318 std::string error_message =
319 "Doesn't make sense to use an MacroElementNodeUpdateMesh with\n";
321 "SolidElements so specifying update_all_solid_nodes=true\n";
322 error_message +=
"doesn't make sense either\n";
325 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh::\n";
342 for (
unsigned i = 0;
i < n_element;
i++)
353 std::ostringstream error_message;
355 <<
"Failed to upcast to MacroElementNodeUpdateElementBase\n";
356 error_message <<
"Element must be derived from "
357 "MacroElementNodeUpdateElementBase\n";
358 error_message <<
"but it is of type " <<
typeid(
el_pt).
name();
361 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh::\n";
371 geom_object_pt[0] = this->
Wall_pt;
375 el_pt->set_node_update_info(geom_object_pt);
380 geom_object_pt[0] = this->
Wall_pt;
432 template<
class ELEMENT>
455 ELEMENT*
el_pt =
new ELEMENT;
458 std::ostringstream error_message;
460 error_message <<
"Base class for ELEMENT in "
461 <<
"AlgebraicRefineableQuarterCircleSectorMesh needs"
462 <<
"to be of type AlgebraicElement!\n";
463 error_message <<
"Whereas it is: typeid(el_pt).name()"
467 " AlgebraicRefineableQuarterCircleSectorMesh::\n";
468 function_name +=
"AlgebraicRefineableQuarterCircleSectorMesh()";
500 std::string error_message =
501 "Doesn't make sense to use an AlgebraicMesh with\n";
503 "SolidElements so specifying update_all_solid_nodes=true\n";
504 error_message +=
"doesn't make sense either\n";
507 " AlgebraicRefineableQuarterCircleSectorMesh::";
549 std::ostringstream error_message;
550 error_message <<
"The node update fct id is " <<
id
551 <<
", but it should only be one of " <<
Central_box
555 " AlgebraicRefineableQuarterCircleSectorMesh::";
598 std::ostringstream error_message;
599 error_message <<
"Node update fct id is " <<
id[
i]
605 " AlgebraicRefineableQuarterCircleSectorMesh::";
Base class for algebraic elements.
Algebraic meshes contain AlgebraicElements and AlgebraicNodes. They implement the node update functio...
void node_update(const bool &update_all_solid_nodes=false)
Update all nodal positions via algebraic node update functions [Doesn't make sense to use this mesh w...
unsigned self_test()
Self test: check consistentency of multiple node updates.
void add_geom_object_list_pt(GeomObject *geom_object_pt)
Add the specified GeomObject to the list of geometric objects associated with this AlgebraicMesh; rem...
AlgebraicNode * node_pt(const unsigned long &n)
Return a pointer to the n-th global AlgebraicNode.
Algebraic nodes are nodes with an algebraic positional update function.
int node_update_fct_id()
Default (usually first if there are multiple ones) node update fct id.
Algebraic version of RefineableQuarterCircleSectorMesh.
void update_node_update(AlgebraicNode *&node_pt)
Update the node update info for specified algebraic node following any spatial mesh adaptation.
double Lambda_y
Fractional height of central box.
void node_update(const bool &update_all_solid_nodes=false)
Resolve mesh update: Update current nodal positions via algebraic node update. [Doesn't make sense to...
void setup_algebraic_node_update()
Setup algebraic update operation for all nodes.
AlgebraicRefineableQuarterCircleSectorMesh(GeomObject *wall_pt, const double &xi_lo, const double &fract_mid, const double &xi_hi, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass pointer to geometric object, start and end coordinates on the geometric object and ...
unsigned self_test()
Run self-test for algebraic mesh – return 0/1 for OK/failure.
void update_node_update_in_lower_right_box(AlgebraicNode *&node_pt)
Update algebraic node update function for nodes in lower right box.
void node_update_in_central_box(const unsigned &t, AlgebraicNode *&node_pt)
Algebraic update function for a node that is located in the central box.
void node_update_in_lower_right_box(const unsigned &t, AlgebraicNode *&node_pt)
Algebraic update function for a node that is located in the lower right box.
void update_node_update_in_upper_left_box(AlgebraicNode *&node_pt)
Update algebraic node update function for nodes in upper left box.
void algebraic_node_update(const unsigned &t, AlgebraicNode *&node_pt)
Implement the algebraic node update function for a node at time level t (t=0: present; t>0: previous)...
void node_update_in_upper_left_box(const unsigned &t, AlgebraicNode *&node_pt)
Algebraic update function for a node that is located in the upper left box.
double Lambda_x
Fractional width of central box.
double size() const
Calculate the size of the element (length, area, volume,...) in Eulerian computational coordinates....
A geometric object is an object that provides a parametrised description of its shape via the functio...
Base class for elements that allow MacroElement-based node update.
MacroElementNodeUpdateMeshes contain MacroElementNodeUpdateNodes which have their own node update fun...
void set_geom_object_vector_pt(Vector< GeomObject * > geom_object_vector_pt)
Set geometric objects associated with MacroElementNodeUpdateMesh; this must also be called from the c...
Domain *& macro_domain_pt()
Broken assignment operator.
void node_update(const bool &update_all_solid_nodes=false)
Update all nodal positions via sparse MacroElement-based update functions. If a Node is hanging its p...
MacroElementNodeUpdate version of RefineableQuarterCircleSectorMesh.
virtual ~MacroElementNodeUpdateRefineableQuarterCircleSectorMesh()
Destructor: empty.
void setup_macro_element_node_update()
Setup all the information that's required for MacroElement-based node update: Tell the elements that ...
void node_update(const bool &update_all_solid_nodes=false)
Resolve mesh update: Update current nodal positions via sparse MacroElement-based update....
MacroElementNodeUpdateRefineableQuarterCircleSectorMesh(GeomObject *wall_pt, const double &xi_lo, const double &fract_mid, const double &xi_hi, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass pointer to geometric object, start and end coordinates on the geometric object and ...
static Steady< 0 > Default_TimeStepper
Default Steady Timestepper, to be used in default arguments to Mesh constructors.
const Vector< GeneralisedElement * > & element_pt() const
Return reference to the Vector of elements.
unsigned long nelement() const
Return number of elements in the mesh.
An OomphLibError object which should be thrown when an run-time error is encountered....
Base class for quad meshes (meshes made of 2D quad elements).
Circular sector as domain. Domain is bounded by curved boundary which is represented by a GeomObject....
double(* BLSquashFctPt)(const double &s)
Typedef for function pointer for function that squashes the outer two macro elements towards the wall...
BLSquashFctPt & bl_squash_fct_pt()
Function pointer for function that squashes the outer two macro elements towards the wall by mapping ...
2D quarter ring mesh class. The domain is specified by the GeomObject that identifies boundary 1.
double Fract_mid
Fraction along wall where outer ring is to be divided.
GeomObject *& wall_pt()
Access function to GeomObject representing wall.
double Xi_hi
Upper limit for the (1D) coordinates along the wall.
GeomObject * Wall_pt
Pointer to the geometric object that represents the curved wall (mesh boundary 1)
QuarterCircleSectorDomain * Domain_pt
Pointer to Domain.
QuarterCircleSectorDomain * domain_pt()
Access function to domain.
double Xi_lo
Lower limit for the (1D) coordinates along the wall.
QuarterCircleSectorDomain::BLSquashFctPt & bl_squash_fct_pt()
Function pointer for function that squashes the outer two macro elements towards the wall by mapping ...
virtual ~QuarterCircleSectorMesh()
Destructor:
Intermediate mesh class that implements the mesh adaptation functions specified in the TreeBasedRefin...
void setup_quadtree_forest()
Set up QuadTreeForest. Wipes any existing tree structure below the minimum refinement level and regar...
2D quarter ring mesh class inherited from RefineableQuadMesh. The domain is specified by the GeomObje...
RefineableQuarterCircleSectorMesh(GeomObject *wall_pt, const double &xi_lo, const double &fract_mid, const double &xi_hi, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass pointer to geometric object that specifies the wall, start and end coordinates on t...
virtual ~RefineableQuarterCircleSectorMesh()
Destructor: Empty.
TAdvectionDiffusionReactionElement<NREAGENT,DIM,NNODE_1D> elements are isoparametric triangular DIM-d...
Base class for time-stepping schemes. Timestepper provides an approximation of the temporal derivativ...
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).