Public Member Functions | Private Types | Private Member Functions | Private Attributes | List of all members
oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT > Class Template Reference

AlgebraicMesh version of RefineableQuarterTubeMesh. More...

#include <quarter_tube_mesh.template.h>

Inheritance diagram for oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >:
oomph::RefineableQuarterTubeMesh< ELEMENT > oomph::QuarterTubeMesh< ELEMENT >

Public Member Functions

 AlgebraicRefineableQuarterTubeMesh (GeomObject *wall_pt, const Vector< double > &xi_lo, const double &fract_mid, const Vector< double > &xi_hi, const unsigned &nlayer, const double centre_box_size=1.0, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 Constructor: Pass pointer to geometric object, start and end coordinates of the geometric object and the fraction along the 2nd Lagrangian coordinate at which the dividing line between region 1 and region 2 is to be placed, and timestepper (defaults to (Steady) default timestepper defined in Mesh). Sets up the refineable mesh (by calling the constructor for the underlying RefineableQuarterTubeMesh). More...
 
unsigned self_test ()
 Run self-test for algebraic mesh – return 0/1 for OK/failure. More...
 
QuarterTubeDomain::AxialSpacingFctPtaxial_spacing_fct_pt ()
 Broken version of the QuarterTubeDomain function Function is broken because axial spacing isn't implemented yet for the Algebraic version of the RefineableQuarterTubeMesh. Note: this function must be used BEFORE algebraic_node_update(...) is called. More...
 
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 use this mesh with SolidElements anyway, so we buffer the case if update_all_solid_nodes is set to true.]. More...
 
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): Update with the node's first (default) update function. More...
 
void update_node_update (AlgebraicNode *&node_pt)
 Update the node update info for specified algebraic node following any spatial mesh adaptation. More...
 
- Public Member Functions inherited from oomph::RefineableQuarterTubeMesh< ELEMENT >
 RefineableQuarterTubeMesh (GeomObject *wall_pt, const Vector< double > &xi_lo, const double &fract_mid, const Vector< double > &xi_hi, const unsigned &nlayer, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 Constructor for adaptive deformable quarter tube mesh class. The domain is specified by the GeomObject that identifies boundary 3. Pass pointer to geometric object that specifies the wall, start and end coordinates on the geometric object, and the fraction along which the dividing line is to be placed, and the timestepper. Timestepper defaults to Steady dummy timestepper. More...
 
virtual ~RefineableQuarterTubeMesh ()
 Destructor: empty. More...
 
- Public Member Functions inherited from oomph::QuarterTubeMesh< ELEMENT >
 QuarterTubeMesh (GeomObject *wall_pt, const Vector< double > &xi_lo, const double &fract_mid, const Vector< double > &xi_hi, const unsigned &nlayer, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 Constructor: Pass pointer to geometric object that specifies the wall, start and end coordinates on the geometric object, and the fraction along which the dividing line is to be placed, and the timestepper. Timestepper defaults to Steady dummy timestepper. More...
 
virtual ~QuarterTubeMesh ()
 Destructor: empty. More...
 
GeomObject *& wall_pt ()
 Access function to GeomObject representing wall. More...
 
QuarterTubeDomaindomain_pt ()
 Access function to domain. More...
 
QuarterTubeDomain::BLSquashFctPtbl_squash_fct_pt ()
 Function pointer for function that squashes the outer macro elements towards the wall by mapping the input value of the "radial" macro element coordinate to the return value (defined in the underlying Domain object) More...
 
QuarterTubeDomaindomain_pt () const
 Access function to underlying domain. More...
 

Private Types

enum  { Central_region , Lower_right_region , Upper_left_region }
 Remesh function ids. More...
 

Private Member Functions

void node_update_central_region (const unsigned &t, AlgebraicNode *&node_pt)
 Algebraic update function for a node that is located in the central region. More...
 
void node_update_lower_right_region (const unsigned &t, AlgebraicNode *&node_pt)
 Algebraic update function for a node that is located in the lower-right region. More...
 
void node_update_upper_left_region (const unsigned &t, AlgebraicNode *&node_pt)
 Algebraic update function for a node that is located in the upper-left region. More...
 
void setup_algebraic_node_update ()
 Setup algebraic update operation for all nodes. More...
 
void update_node_update_in_region (AlgebraicNode *&node_pt, int &region_id)
 Update algebraic node update function for nodes in the region defined by region_id. More...
 

Private Attributes

double Centre_box_size
 Size of centre box. More...
 
double Lambda_x
 Fractional width of central region. More...
 
double Lambda_y
 Fractional height of central region. More...
 

Additional Inherited Members

- Protected Attributes inherited from oomph::QuarterTubeMesh< ELEMENT >
QuarterTubeDomainDomain_pt
 Pointer to domain. More...
 
GeomObject * Wall_pt
 Pointer to the geometric object that represents the curved wall. More...
 
Vector< double > Xi_lo
 Lower limits for the coordinates along the wall. More...
 
double Fract_mid
 Fraction along wall where outer ring is to be divided. More...
 
Vector< double > Xi_hi
 Upper limits for the coordinates along the wall. More...
 

Detailed Description

template<class ELEMENT>
class oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >

AlgebraicMesh version of RefineableQuarterTubeMesh.

Algebraic 3D quarter tube mesh class.

The mesh boundaries are numbered as follows:

Cross section through mesh looking along tube.........

                 ---___
                |      ---____
                |              -   BOUNDARY 3
                |                /
                |  [Region 2]   /  |
                |              /     |
                | N           /        |
                | |_ E       /          |
  BOUNDARY 1    |------------            |
                |            |            |
                | [Region 0] | [Region 1] |  ^
                |            |            | / \  direction of
                | N          |    N       |  |   2nd Lagrangian
                | |_ E       |    |_ E    |  |   coordinate
                |____________|____________|  |   along wall GeomObject

                      BOUNDARY 2

The Domain is built of slices each consisting of three MacroElements as sketched. The local coordinates are such that the (E)astern direction coincides with the positive s_0 direction, while the (N)orther direction coincides with the positive s_1 direction. The positive s_2 direction points down the tube.

Elements need to be derived from AlgebraicElementBase. In addition to the refinement procedures available for the RefineableQuarterTubeMesh which forms the basis for this mesh, three algebraic node update functions are implemented for the nodes in the three regions defined by the Domain MacroElements. Note: it is assumed the cross section down the tube is uniform when setup_algebraic_node_update() is called.

Definition at line 436 of file quarter_tube_mesh.template.h.

Member Enumeration Documentation

◆ anonymous enum

template<class ELEMENT >
anonymous enum
private

Remesh function ids.

Enumerator
Central_region 
Lower_right_region 
Upper_left_region 

Definition at line 614 of file quarter_tube_mesh.template.h.

Constructor & Destructor Documentation

◆ AlgebraicRefineableQuarterTubeMesh()

template<class ELEMENT >
oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::AlgebraicRefineableQuarterTubeMesh ( GeomObject *  wall_pt,
const Vector< double > &  xi_lo,
const double &  fract_mid,
const Vector< double > &  xi_hi,
const unsigned &  nlayer,
const double  centre_box_size = 1.0,
TimeStepper *  time_stepper_pt = &Mesh::Default_TimeStepper 
)
inline

Constructor: Pass pointer to geometric object, start and end coordinates of the geometric object and the fraction along the 2nd Lagrangian coordinate at which the dividing line between region 1 and region 2 is to be placed, and timestepper (defaults to (Steady) default timestepper defined in Mesh). Sets up the refineable mesh (by calling the constructor for the underlying RefineableQuarterTubeMesh).

Definition at line 448 of file quarter_tube_mesh.template.h.

References oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update(), oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::setup_algebraic_node_update(), and oomph::QuarterTubeMesh< ELEMENT >::wall_pt().

Member Function Documentation

◆ algebraic_node_update()

template<class ELEMENT >
void oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::algebraic_node_update ( const unsigned &  t,
AlgebraicNode *&  node_pt 
)
inline

◆ axial_spacing_fct_pt()

template<class ELEMENT >
QuarterTubeDomain::AxialSpacingFctPt& oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::axial_spacing_fct_pt ( )
inlinevirtual

Broken version of the QuarterTubeDomain function Function is broken because axial spacing isn't implemented yet for the Algebraic version of the RefineableQuarterTubeMesh. Note: this function must be used BEFORE algebraic_node_update(...) is called.

Reimplemented from oomph::QuarterTubeMesh< ELEMENT >.

Definition at line 505 of file quarter_tube_mesh.template.h.

References oomph::QuarterTubeDomain::axial_spacing_fct_pt(), and oomph::QuarterTubeMesh< ELEMENT >::Domain_pt.

◆ node_update()

template<class ELEMENT >
void oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update ( const bool &  update_all_solid_nodes = false)
inline

Resolve mesh update: Update current nodal positions via algebraic node update. [Doesn't make sense to use this mesh with SolidElements anyway, so we buffer the case if update_all_solid_nodes is set to true.].

Definition at line 525 of file quarter_tube_mesh.template.h.

Referenced by oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::AlgebraicRefineableQuarterTubeMesh().

◆ node_update_central_region()

template<class ELEMENT >
void oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update_central_region ( const unsigned &  t,
AlgebraicNode *&  node_pt 
)
private

Algebraic update function for a node that is located in the central region.

Algebraic update function: Update in central region according to wall shape at time level t (t=0: present; t>0: previous)

Definition at line 961 of file quarter_tube_mesh.template.cc.

Referenced by oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::algebraic_node_update().

◆ node_update_lower_right_region()

template<class ELEMENT >
void oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update_lower_right_region ( const unsigned &  t,
AlgebraicNode *&  node_pt 
)
private

Algebraic update function for a node that is located in the lower-right region.

Algebraic update function: Update in lower-right region according to wall shape at time level t (t=0: present; t>0: previous)

Definition at line 1051 of file quarter_tube_mesh.template.cc.

Referenced by oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::algebraic_node_update().

◆ node_update_upper_left_region()

template<class ELEMENT >
void oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update_upper_left_region ( const unsigned &  t,
AlgebraicNode *&  node_pt 
)
private

Algebraic update function for a node that is located in the upper-left region.

Algebraic update function: Update in upper left region according to wall shape at time level t (t=0: present; t>0: previous)

Definition at line 1168 of file quarter_tube_mesh.template.cc.

Referenced by oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::algebraic_node_update().

◆ self_test()

template<class ELEMENT >
unsigned oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::self_test ( )
inline

Run self-test for algebraic mesh – return 0/1 for OK/failure.

Definition at line 495 of file quarter_tube_mesh.template.h.

◆ setup_algebraic_node_update()

template<class ELEMENT >
void oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::setup_algebraic_node_update
private

Setup algebraic update operation for all nodes.

////////////////////////////////////////////////////////////////////

//////////////////////////////////////////////////////////////////// Setup algebraic node update data, based on 3 regions, each undergoing a different node update strategy. These regions are defined by the three MacroElements in each of the nlayer slices of the QuarterTubeDomain used to build the mesh. The Mesh is suspended from the ‘wall’ GeomObject pointed to by wall_pt. The lower right edge of the mesh is located at the wall's coordinate xi[1]==xi_lo[1], the upper left edge at xi[1]=xi_hi[1], i.e. a view looking down the tube length. The dividing line between the two outer regions is located at the fraction fract_mid between these two coordinates. Node updating strategy:

  • the starting cross sectional shape along the tube length is assumed to be uniform
  • the cross sectional shape of the central region remains rectangular; the position of its top right corner is located at a fixed fraction of the starting width and height of the domain measured at xi[1]==xi_lo[1] and xi[1]==xi_hi[1] respectively. Nodes in this region are located at fixed horizontal and vertical fractions of the region.
  • Nodes in the two outer regions (bottom right and top left) are located on straight lines running from the edges of the central region to the outer wall.

Pointer to first algebraic element in central region

Definition at line 660 of file quarter_tube_mesh.template.cc.

Referenced by oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::AlgebraicRefineableQuarterTubeMesh().

◆ update_node_update()

template<class ELEMENT >
void oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::update_node_update ( AlgebraicNode *&  node_pt)
inline

Update the node update info for specified algebraic node following any spatial mesh adaptation.

Definition at line 595 of file quarter_tube_mesh.template.h.

References oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::update_node_update_in_region().

◆ update_node_update_in_region()

template<class ELEMENT >
void oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::update_node_update_in_region ( AlgebraicNode *&  node_pt,
int &  region_id 
)
private

Update algebraic node update function for nodes in the region defined by region_id.

Update algebraic update function for nodes in region defined by region_id.

Definition at line 1288 of file quarter_tube_mesh.template.cc.

Referenced by oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::update_node_update().

Member Data Documentation

◆ Centre_box_size

template<class ELEMENT >
double oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::Centre_box_size
private

Size of centre box.

Definition at line 611 of file quarter_tube_mesh.template.h.

◆ Lambda_x

template<class ELEMENT >
double oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::Lambda_x
private

Fractional width of central region.

Definition at line 622 of file quarter_tube_mesh.template.h.

◆ Lambda_y

template<class ELEMENT >
double oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::Lambda_y
private

Fractional height of central region.

Definition at line 625 of file quarter_tube_mesh.template.h.


The documentation for this class was generated from the following files: