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"
82 template<
class ELEMENT>
179 template<
class ELEMENT>
182 public virtual RefineableQuadMesh<ELEMENT>
218 class MacroElementNodeUpdateNode;
252 template<
class ELEMENT>
254 :
public virtual MacroElementNodeUpdateMesh,
271 : MacroElementNodeUpdateMesh(),
281 <<
"Base class for ELEMENT in "
282 <<
"MacroElementNodeUpdateRefineableQuarterCircleSectorMesh needs"
283 <<
"to be of type MacroElementNodeUpdateElement!\n";
288 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh::\n";
290 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh()";
319 "Doesn't make sense to use an MacroElementNodeUpdateMesh with\n";
321 "SolidElements so specifying update_all_solid_nodes=true\n";
325 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh::\n";
332 MacroElementNodeUpdateMesh::node_update();
355 <<
"Failed to upcast to MacroElementNodeUpdateElementBase\n";
357 "MacroElementNodeUpdateElementBase\n";
361 "MacroElementNodeUpdateRefineableQuaterCircleSectorMesh::\n";
381 MacroElementNodeUpdateMesh::set_geom_object_vector_pt(
geom_object_pt);
384 MacroElementNodeUpdateMesh::macro_domain_pt() = this->
domain_pt();
432 template<
class ELEMENT>
434 :
public virtual AlgebraicMesh,
461 <<
"AlgebraicRefineableQuarterCircleSectorMesh needs"
462 <<
"to be of type AlgebraicElement!\n";
467 " AlgebraicRefineableQuarterCircleSectorMesh::\n";
468 function_name +=
"AlgebraicRefineableQuarterCircleSectorMesh()";
478 AlgebraicMesh::add_geom_object_list_pt(
wall_pt);
487 return AlgebraicMesh::self_test();
501 "Doesn't make sense to use an AlgebraicMesh with\n";
503 "SolidElements so specifying update_all_solid_nodes=true\n";
507 " AlgebraicRefineableQuarterCircleSectorMesh::";
514 AlgebraicMesh::node_update();
525 unsigned id =
node_pt->node_update_fct_id();
551 <<
", but it should only be one of " <<
Central_box
555 " AlgebraicRefineableQuarterCircleSectorMesh::";
570 node_pt->node_update_fct_id(
id);
605 " AlgebraicRefineableQuarterCircleSectorMesh::";
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.
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 ...
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:
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.
Unstructured refineable Triangle Mesh.