26#ifndef OOMPH_CHANNEL_WITH_LEAFLET_MESH_HEADER
27#define OOMPH_CHANNEL_WITH_LEAFLET_MESH_HEADER
52 template<
class ELEMENT>
69 const double& hleaflet,
71 const unsigned& nleft,
72 const unsigned& nright,
102 template<
class ELEMENT>
120 const double& lright,
121 const double& hleaflet,
123 const unsigned& nleft,
124 const unsigned& nright,
162 template<
class ELEMENT>
180 const double& lright,
181 const double& hleaflet,
183 const unsigned& nleft,
184 const unsigned& nright,
200 ELEMENT*
el_pt =
new ELEMENT;
203 std::ostringstream error_message;
204 error_message <<
"Base class for ELEMENT in "
205 <<
"MacroElementNodeUpdateChannelWithLeafletMesh needs"
206 <<
"to be of type MacroElementNodeUpdateElement!\n";
207 error_message <<
"Whereas it is: typeid(el_pt).name()"
211 "MacroElementNodeUpdateChannelWithLeafletMesh::\n";
212 function_name +=
"MacroElementNodeUpdateChannelWithLeafletMesh()";
225 for (
unsigned i = 0;
i < n_element;
i++)
236 std::ostringstream error_message;
238 <<
"Failed to upcast to MacroElementNodeUpdateElementBase\n";
239 error_message <<
"Element must be derived from "
240 "MacroElementNodeUpdateElementBase\n";
241 error_message <<
"but it is of type " <<
typeid(
el_pt).
name();
244 "MacroElementNodeUpdateChannelWithLeafletMesh::\n";
245 function_name +=
"MacroElementNodeUpdateChannelWithLeafletMesh()";
259 el_pt->set_node_update_info(geom_object_pt);
286 template<
class ELEMENT>
304 const double& lright,
305 const double& hleaflet,
307 const unsigned& nleft,
308 const unsigned& nright,
353 template<
class ELEMENT>
371 const double& lright,
372 const double& hleaflet,
374 const unsigned& nleft,
375 const unsigned& nright,
461 template<
class ELEMENT>
479 const double& lright,
480 const double& hleaflet,
482 const unsigned& nleft,
483 const unsigned& nright,
525 template<
class ELEMENT>
542 const double& lright,
543 const double& hleaflet,
545 const unsigned& nleft,
546 const unsigned& nright,
Algebraic version of ChannelWithLeafletMesh. Leaflet is assumed to be in its undeformed (straight ver...
void setup_algebraic_node_update()
Function to setup the algebraic node update.
double X_0
Origin of the wall (stored explicitly for reference in algebraic node update – it's also stored indep...
AlgebraicChannelWithLeafletMesh(GeomObject *leaflet_pt, const double &lleft, const double &lright, const double &hleaflet, const double &htot, const unsigned &nleft, const unsigned &nright, const unsigned &ny1, const unsigned &ny2, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass pointer to GeomObject that represents the leaflet, the length of the domain to left...
double Hleaflet
Length of the leaflet (stored explicitly for reference in algebraic node update – it's also stored in...
void algebraic_node_update(const unsigned &t, AlgebraicNode *&node_pt)
Update nodal position at time level t (t=0: present; t>0: previous)
void node_update_I(const unsigned &t, AlgebraicNode *&node_pt)
Update function for nodes in lower left region (I)
void node_update_III(const unsigned &t, AlgebraicNode *&node_pt)
Update function for nodes in upper left region (III)
virtual ~AlgebraicChannelWithLeafletMesh()
Destructor: empty.
void node_update_II(const unsigned &t, AlgebraicNode *&node_pt)
Update function for nodes in lower right region (II)
void slanted_bound_up(const unsigned &t, const Vector< double > &zeta, Vector< double > &r)
Helper function.
void node_update_IV(const unsigned &t, AlgebraicNode *&node_pt)
Update function for nodes in upper right region (IV)
void update_node_update(AlgebraicNode *&node_pt)
Update the geometric references that are used to update node after mesh adaptation....
Algebraic meshes contain AlgebraicElements and AlgebraicNodes. They implement the node update functio...
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.
Rectangular domain with a leaflet blocking the lower half.
Channel with leaflet mesh.
ChannelWithLeafletDomain * domain_pt()
Access function to domain.
ChannelWithLeafletDomain * Domain_pt
Pointer to domain.
GeomObject * Leaflet_pt
Pointer to GeomObject that represents the leaflet.
virtual ~ChannelWithLeafletMesh()
Destructor : empty.
A geometric object is an object that provides a parametrised description of its shape via the functio...
virtual void position(const Vector< double > &zeta, Vector< double > &r) const =0
Parametrised position on object at current time: r(zeta).
Channel with leaflet mesh with MacroElement-based node update. The leaflet is represented by the spec...
virtual ~MacroElementNodeUpdateChannelWithLeafletMesh()
Destructor: empty.
MacroElementNodeUpdateChannelWithLeafletMesh(GeomObject *leaflet_pt, const double &lleft, const double &lright, const double &hleaflet, const double &htot, const unsigned &nleft, const unsigned &nright, const unsigned &ny1, const unsigned &ny2, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass pointer to GeomObject that represents the leaflet, the length of the domain to left...
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.
Refineable mesh with MacroElement-based node update.
MacroElementNodeUpdateRefineableChannelWithLeafletMesh(GeomObject *leaflet_pt, const double &lleft, const double &lright, const double &hleaflet, const double &htot, const unsigned &nleft, const unsigned &nright, const unsigned &ny1, const unsigned &ny2, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass pointer to GeomObject that represents the leaflet, the length of the domain to left...
virtual ~MacroElementNodeUpdateRefineableChannelWithLeafletMesh()
Destructor: empty.
static Steady< 0 > Default_TimeStepper
Default Steady Timestepper, to be used in default arguments to Mesh constructors.
virtual void node_update(const bool &update_all_solid_nodes=false)
Update nodal positions in response to changes in the domain shape. Uses the FiniteElement::get_x(....
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....
Channel with leaflet mesh upgraded to (pseudo-)solid mesh.
PseudoElasticChannelWithLeafletMesh(GeomObject *leaflet_pt, const double &lleft, const double &lright, const double &hleaflet, const double &htot, const unsigned &nleft, const unsigned &nright, const unsigned &ny1, const unsigned &ny2, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass pointer to GeomObject that represents the leaflet, the length of the domain to left...
virtual ~PseudoElasticChannelWithLeafletMesh()
Destructor : empty.
Refineable version of algebraic ChannelWithLeafletMesh.
RefineableAlgebraicChannelWithLeafletMesh(GeomObject *leaflet_pt, const double &lleft, const double &lright, const double &hleaflet, const double &htot, const unsigned &nleft, const unsigned &nright, const unsigned &ny1, const unsigned &ny2, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass pointer to GeomObject that represents the leaflet, the length of the domain to left...
void update_node_update(AlgebraicNode *&node_pt)
Update the node update data for specified node following any mesh adapation.
Refineable version of ChannelWithLeafletMesh.
RefineableChannelWithLeafletMesh(GeomObject *leaflet_pt, const double &lleft, const double &lright, const double &hleaflet, const double &htot, const unsigned &nleft, const unsigned &nright, const unsigned &ny1, const unsigned &ny2, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
Constructor: Pass pointer to GeomObject that represents the leaflet, the length of the domain to left...
virtual ~RefineableChannelWithLeafletMesh()
Destructor (empty)
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...
Simple rectangular 2D Quad mesh class. Nx : number of elements in the x direction.
void set_lagrangian_nodal_coordinates()
Make the current configuration the undeformed one by setting the nodal Lagrangian coordinates to thei...
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).