oomph::CircularCylindricalShellMesh< ELEMENT > Class Template Reference

#include <circular_shell_mesh.template.h>

+ Inheritance diagram for oomph::CircularCylindricalShellMesh< ELEMENT >:

Public Types

typedef double(* AxialBLStretchingFctPt) (const double &x)
 Typedef for fct that defines the axial stretching fct. More...
 
- Public Types inherited from oomph::Mesh
typedef void(FiniteElement::* SteadyExactSolutionFctPt) (const Vector< double > &x, Vector< double > &soln)
 
typedef void(FiniteElement::* UnsteadyExactSolutionFctPt) (const double &time, const Vector< double > &x, Vector< double > &soln)
 

Public Member Functions

 CircularCylindricalShellMesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 Constructor for the mesh – uniformly spaced elements. More...
 
 CircularCylindricalShellMesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly, AxialBLStretchingFctPt axial_bl_stretching_fct_pt, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
 CircularCylindricalShellMesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly, const unsigned &nx_bl, const double &delta_bl, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
void assign_undeformed_positions (GeomObject *const &undeformed_midplane_pt)
 Set the undeformed coordinates of the nodes. More...
 
AxialBLStretchingFctPt axial_bl_stretching_fct_pt () const
 Access to fct pointer to fct that defines the axial stretching fct. More...
 
- Public Member Functions inherited from oomph::RectangularQuadMesh< ELEMENT >
 RectangularQuadMesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
 RectangularQuadMesh (const unsigned &nx, const unsigned &ny, const double &xmin, const double &xmax, const double &ymin, const double &ymax, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
 RectangularQuadMesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly, const bool &periodic_in_x, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
 RectangularQuadMesh (const unsigned &nx, const unsigned &ny, const double &xmin, const double &xmax, const double &ymin, const double &ymax, const bool &periodic_in_x, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
const unsignednx () const
 Return number of elements in x direction. More...
 
const unsignedny () const
 Return number of elements in y direction. More...
 
const double x_min () const
 Return the minimum value of x coordinate. More...
 
const double x_max () const
 Return the maximum value of x coordinate. More...
 
const double y_min () const
 Return the minimum value of y coordinate. More...
 
const double y_max () const
 Return the maximum value of y coordinate. More...
 
virtual void element_reorder ()
 
virtual double x_spacing_function (unsigned xelement, unsigned xnode, unsigned yelement, unsigned ynode)
 
virtual double y_spacing_function (unsigned xelement, unsigned xnode, unsigned yelement, unsigned ynode)
 
- Public Member Functions inherited from oomph::QuadMeshBase
 QuadMeshBase ()
 Constructor (empty) More...
 
 QuadMeshBase (const QuadMeshBase &node)=delete
 Broken copy constructor. More...
 
void operator= (const QuadMeshBase &)=delete
 Broken assignment operator. More...
 
virtual ~QuadMeshBase ()
 Destructor (empty) More...
 
void setup_boundary_element_info ()
 
void setup_boundary_element_info (std::ostream &outfile)
 
- Public Member Functions inherited from oomph::Mesh
 Mesh ()
 Default constructor. More...
 
 Mesh (const Vector< Mesh * > &sub_mesh_pt)
 
void merge_meshes (const Vector< Mesh * > &sub_mesh_pt)
 
virtual void reset_boundary_element_info (Vector< unsigned > &ntmp_boundary_elements, Vector< Vector< unsigned >> &ntmp_boundary_elements_in_region, Vector< FiniteElement * > &deleted_elements)
 Virtual function to perform the reset boundary elements info rutines. More...
 
template<class BULK_ELEMENT >
void doc_boundary_coordinates (const unsigned &b, std::ofstream &the_file)
 
 Mesh (const Mesh &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const Mesh &)=delete
 Broken assignment operator. More...
 
virtual ~Mesh ()
 Virtual Destructor to clean up all memory. More...
 
void flush_element_and_node_storage ()
 
void flush_element_storage ()
 
void flush_node_storage ()
 
Node *& node_pt (const unsigned long &n)
 Return pointer to global node n. More...
 
Nodenode_pt (const unsigned long &n) const
 Return pointer to global node n (const version) More...
 
GeneralisedElement *& element_pt (const unsigned long &e)
 Return pointer to element e. More...
 
GeneralisedElementelement_pt (const unsigned long &e) const
 Return pointer to element e (const version) More...
 
const Vector< GeneralisedElement * > & element_pt () const
 Return reference to the Vector of elements. More...
 
Vector< GeneralisedElement * > & element_pt ()
 Return reference to the Vector of elements. More...
 
FiniteElementfinite_element_pt (const unsigned &e) const
 
Node *& boundary_node_pt (const unsigned &b, const unsigned &n)
 Return pointer to node n on boundary b. More...
 
Nodeboundary_node_pt (const unsigned &b, const unsigned &n) const
 Return pointer to node n on boundary b. More...
 
void set_nboundary (const unsigned &nbound)
 Set the number of boundaries in the mesh. More...
 
void remove_boundary_nodes ()
 Clear all pointers to boundary nodes. More...
 
void remove_boundary_nodes (const unsigned &b)
 
void remove_boundary_node (const unsigned &b, Node *const &node_pt)
 Remove a node from the boundary b. More...
 
void add_boundary_node (const unsigned &b, Node *const &node_pt)
 Add a (pointer to) a node to the b-th boundary. More...
 
void copy_boundary_node_data_from_nodes ()
 
bool boundary_coordinate_exists (const unsigned &i) const
 Indicate whether the i-th boundary has an intrinsic coordinate. More...
 
unsigned long nelement () const
 Return number of elements in the mesh. More...
 
unsigned long nnode () const
 Return number of nodes in the mesh. More...
 
unsigned ndof_types () const
 Return number of dof types in mesh. More...
 
unsigned elemental_dimension () const
 Return number of elemental dimension in mesh. More...
 
unsigned nodal_dimension () const
 Return number of nodal dimension in mesh. More...
 
void add_node_pt (Node *const &node_pt)
 Add a (pointer to a) node to the mesh. More...
 
void add_element_pt (GeneralisedElement *const &element_pt)
 Add a (pointer to) an element to the mesh. More...
 
virtual void node_update (const bool &update_all_solid_nodes=false)
 
virtual void reorder_nodes (const bool &use_old_ordering=true)
 
virtual void get_node_reordering (Vector< Node * > &reordering, const bool &use_old_ordering=true) const
 
template<class BULK_ELEMENT , template< class > class FACE_ELEMENT>
void build_face_mesh (const unsigned &b, Mesh *const &face_mesh_pt)
 
unsigned self_test ()
 Self-test: Check elements and nodes. Return 0 for OK. More...
 
void max_and_min_element_size (double &max_size, double &min_size)
 
double total_size ()
 
void check_inverted_elements (bool &mesh_has_inverted_elements, std::ofstream &inverted_element_file)
 
void check_inverted_elements (bool &mesh_has_inverted_elements)
 
unsigned check_for_repeated_nodes (const double &epsilon=1.0e-12)
 
Vector< Node * > prune_dead_nodes ()
 
unsigned nboundary () const
 Return number of boundaries. More...
 
unsigned long nboundary_node (const unsigned &ibound) const
 Return number of nodes on a particular boundary. More...
 
FiniteElementboundary_element_pt (const unsigned &b, const unsigned &e) const
 Return pointer to e-th finite element on boundary b. More...
 
Nodeget_some_non_boundary_node () const
 
unsigned nboundary_element (const unsigned &b) const
 Return number of finite elements that are adjacent to boundary b. More...
 
int face_index_at_boundary (const unsigned &b, const unsigned &e) const
 
virtual void dump (std::ofstream &dump_file, const bool &use_old_ordering=true) const
 Dump the data in the mesh into a file for restart. More...
 
void dump (const std::string &dump_file_name, const bool &use_old_ordering=true) const
 Dump the data in the mesh into a file for restart. More...
 
virtual void read (std::ifstream &restart_file)
 Read solution from restart file. More...
 
void output_paraview (std::ofstream &file_out, const unsigned &nplot) const
 
void output_fct_paraview (std::ofstream &file_out, const unsigned &nplot, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt) const
 
void output_fct_paraview (std::ofstream &file_out, const unsigned &nplot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt) const
 
void output (std::ostream &outfile)
 Output for all elements. More...
 
void output (std::ostream &outfile, const unsigned &n_plot)
 Output at f(n_plot) points in each element. More...
 
void output (FILE *file_pt)
 Output for all elements (C-style output) More...
 
void output (FILE *file_pt, const unsigned &nplot)
 Output at f(n_plot) points in each element (C-style output) More...
 
void output (const std::string &output_filename)
 Output for all elements. More...
 
void output (const std::string &output_filename, const unsigned &n_plot)
 Output at f(n_plot) points in each element. More...
 
void output_fct (std::ostream &outfile, const unsigned &n_plot, FiniteElement::SteadyExactSolutionFctPt)
 Output a given Vector function at f(n_plot) points in each element. More...
 
void output_fct (std::ostream &outfile, const unsigned &n_plot, const double &time, FiniteElement::UnsteadyExactSolutionFctPt)
 
void output_boundaries (std::ostream &outfile)
 Output the nodes on the boundaries (into separate tecplot zones) More...
 
void output_boundaries (const std::string &output_filename)
 
void assign_initial_values_impulsive ()
 Assign initial values for an impulsive start. More...
 
void shift_time_values ()
 
void calculate_predictions ()
 
void set_nodal_and_elemental_time_stepper (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
 
virtual void set_mesh_level_time_stepper (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
 
void set_consistent_pinned_values_for_continuation (ContinuationStorageScheme *const &continuation_stepper_pt)
 Set consistent values for pinned data in continuation. More...
 
bool does_pointer_correspond_to_mesh_data (double *const &parameter_pt)
 Does the double pointer correspond to any mesh data. More...
 
void set_nodal_time_stepper (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
 Set the timestepper associated with the nodal data in the mesh. More...
 
void set_elemental_internal_time_stepper (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
 
virtual void compute_norm (double &norm)
 
virtual void compute_norm (Vector< double > &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 
virtual void compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, double &error, double &norm)
 
virtual void compute_error (FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (std::ostream &outfile, FiniteElement::SteadyExactSolutionFctPt exact_soln_pt, Vector< double > &error, Vector< double > &norm)
 
virtual void compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, double &error, double &norm)
 Returns the norm of the error and that of the exact solution. More...
 
virtual void compute_error (FiniteElement::UnsteadyExactSolutionFctPt exact_soln_pt, const double &time, Vector< double > &error, Vector< double > &norm)
 
bool is_mesh_distributed () const
 Boolean to indicate if Mesh has been distributed. More...
 
OomphCommunicatorcommunicator_pt () const
 
void delete_all_external_storage ()
 Wipe the storage for all externally-based elements. More...
 
- Public Member Functions inherited from oomph::SolidMesh
 SolidMesh ()
 Default constructor. More...
 
 SolidMesh (const SolidMesh &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const SolidMesh &)=delete
 Broken assignment operator. More...
 
 SolidMesh (const Vector< SolidMesh * > &sub_mesh_pt)
 
SolidNodenode_pt (const unsigned long &n)
 Return a pointer to the n-th global SolidNode. More...
 
SolidNodeboundary_node_pt (const unsigned &b, const unsigned &n)
 Return n-th SolidNodes on b-th boundary. More...
 
SolidNodeelement_node_pt (const unsigned long &e, const unsigned &n)
 
void set_lagrangian_nodal_coordinates ()
 
void scale_mesh (const double &factor)
 

Private Member Functions

void build_mesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly)
 Mesh build helper fct. More...
 
double scaled_x (const double &x)
 
double piecewise_linear_axial_bl_stretching_fct (const double &xi)
 Default axial scaling fct. More...
 

Private Attributes

AxialBLStretchingFctPt Axial_bl_stretching_fct_pt
 Fct pointer to fct that defines the axial stretching fct. More...
 
unsigned Nx_bl
 
double Delta_bl
 

Additional Inherited Members

- Static Public Attributes inherited from oomph::Mesh
static Steady< 0 > Default_TimeStepper
 The Steady Timestepper. More...
 
static bool Suppress_warning_about_empty_mesh_level_time_stepper_function
 Static boolean flag to control warning about mesh level timesteppers. More...
 
- Static Public Attributes inherited from oomph::SolidMesh
static SolidICProblem Solid_IC_problem
 
- Protected Member Functions inherited from oomph::RectangularQuadMesh< ELEMENT >
void build_mesh (TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 Generic mesh construction function: contains all the hard work. More...
 
 RectangularQuadMesh (const unsigned &nx, const unsigned &ny, const double &xmin, const double &xmax, const double &ymin, const double &ymax, const bool &periodic_in_x, const bool &build, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
- Protected Member Functions inherited from oomph::Mesh
unsigned long assign_global_eqn_numbers (Vector< double * > &Dof_pt)
 Assign (global) equation numbers to the nodes. More...
 
void describe_dofs (std::ostream &out, const std::string &current_string) const
 
void describe_local_dofs (std::ostream &out, const std::string &current_string) const
 
void assign_local_eqn_numbers (const bool &store_local_dof_pt)
 Assign local equation numbers in all elements. More...
 
void convert_to_boundary_node (Node *&node_pt, const Vector< FiniteElement * > &finite_element_pt)
 
void convert_to_boundary_node (Node *&node_pt)
 
- Protected Attributes inherited from oomph::RectangularQuadMesh< ELEMENT >
unsigned Nx
 Nx: number of elements in x-direction. More...
 
unsigned Ny
 Ny: number of elements in y-direction. More...
 
unsigned Np
 Np: number of (linear) points in the element. More...
 
double Xmin
 Minimum value of x coordinate. More...
 
double Xmax
 Maximum value of x coordinate. More...
 
double Ymin
 Minimum value of y coordinate. More...
 
double Ymax
 Maximum value of y coordinate. More...
 
bool Xperiodic
 
- Protected Attributes inherited from oomph::Mesh
Vector< Vector< Node * > > Boundary_node_pt
 
bool Lookup_for_elements_next_boundary_is_setup
 
Vector< Vector< FiniteElement * > > Boundary_element_pt
 
Vector< Vector< int > > Face_index_at_boundary
 
Vector< Node * > Node_pt
 Vector of pointers to nodes. More...
 
Vector< GeneralisedElement * > Element_pt
 Vector of pointers to generalised elements. More...
 
std::vector< boolBoundary_coordinate_exists
 

Detailed Description

template<class ELEMENT>
class oomph::CircularCylindricalShellMesh< ELEMENT >

A 2D solid mesh for (topologically) circular cylindrical shells. The shell is represented by two Lagrangian coordinates that correspond to z and theta in cylindrical polars. The required mesh is therefore a 2D mesh and is therefore inherited from the generic RectangularQuadMesh

Member Typedef Documentation

◆ AxialBLStretchingFctPt

template<class ELEMENT >
typedef double(* oomph::CircularCylindricalShellMesh< ELEMENT >::AxialBLStretchingFctPt) (const double &x)

Typedef for fct that defines the axial stretching fct.

Constructor & Destructor Documentation

◆ CircularCylindricalShellMesh() [1/3]

template<class ELEMENT >
oomph::CircularCylindricalShellMesh< ELEMENT >::CircularCylindricalShellMesh ( const unsigned nx,
const unsigned ny,
const double lx,
const double ly,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper 
)
inline

Constructor for the mesh – uniformly spaced elements.

66  : RectangularQuadMesh<ELEMENT>(nx, ny, lx, ly, time_stepper_pt)
67  {
68  // Use default stretching fct
70 
71  // Assign dummy data consistent with uniform spacing
72  Nx_bl = 1;
73  Delta_bl = lx / double(nx);
74 
75  // Build mesh
76  this->build_mesh(nx, ny, lx, ly);
77  }
void build_mesh(const unsigned &nx, const unsigned &ny, const double &lx, const double &ly)
Mesh build helper fct.
Definition: circular_shell_mesh.template.cc:41
unsigned Nx_bl
Definition: circular_shell_mesh.template.h:197
AxialBLStretchingFctPt Axial_bl_stretching_fct_pt
Fct pointer to fct that defines the axial stretching fct.
Definition: circular_shell_mesh.template.h:193
double Delta_bl
Definition: circular_shell_mesh.template.h:201
const unsigned & ny() const
Return number of elements in y direction.
Definition: rectangular_quadmesh.template.h:231
const unsigned & nx() const
Return number of elements in x direction.
Definition: rectangular_quadmesh.template.h:224
const double ly
Definition: ConstraintElementsUnitTest.cpp:34
const double lx
Definition: ConstraintElementsUnitTest.cpp:33

References oomph::CircularCylindricalShellMesh< ELEMENT >::Axial_bl_stretching_fct_pt, oomph::CircularCylindricalShellMesh< ELEMENT >::build_mesh(), oomph::CircularCylindricalShellMesh< ELEMENT >::Delta_bl, Mesh_Parameters::lx, Mesh_Parameters::ly, oomph::RectangularQuadMesh< ELEMENT >::nx(), oomph::CircularCylindricalShellMesh< ELEMENT >::Nx_bl, and oomph::RectangularQuadMesh< ELEMENT >::ny().

◆ CircularCylindricalShellMesh() [2/3]

template<class ELEMENT >
oomph::CircularCylindricalShellMesh< ELEMENT >::CircularCylindricalShellMesh ( const unsigned nx,
const unsigned ny,
const double lx,
const double ly,
AxialBLStretchingFctPt  axial_bl_stretching_fct_pt,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper 
)
inline

Constructor for the mesh – specify fct that maps axial Lagr. coordinates to new positions to allow for better resolution of bending boundary layer

90  : RectangularQuadMesh<ELEMENT>(nx, ny, lx, ly, time_stepper_pt)
91  {
92  // Apply stretching fct
94 
95  // Assign dummy data consistent with uniform spacing
96  Nx_bl = 1;
97  Delta_bl = lx / double(nx);
98 
99  // Build mesh
100  this->build_mesh(nx, ny, lx, ly);
101  }
AxialBLStretchingFctPt axial_bl_stretching_fct_pt() const
Access to fct pointer to fct that defines the axial stretching fct.
Definition: circular_shell_mesh.template.h:136

References oomph::CircularCylindricalShellMesh< ELEMENT >::axial_bl_stretching_fct_pt(), oomph::CircularCylindricalShellMesh< ELEMENT >::Axial_bl_stretching_fct_pt, oomph::CircularCylindricalShellMesh< ELEMENT >::build_mesh(), oomph::CircularCylindricalShellMesh< ELEMENT >::Delta_bl, Mesh_Parameters::lx, Mesh_Parameters::ly, oomph::RectangularQuadMesh< ELEMENT >::nx(), oomph::CircularCylindricalShellMesh< ELEMENT >::Nx_bl, and oomph::RectangularQuadMesh< ELEMENT >::ny().

◆ CircularCylindricalShellMesh() [3/3]

template<class ELEMENT >
oomph::CircularCylindricalShellMesh< ELEMENT >::CircularCylindricalShellMesh ( const unsigned nx,
const unsigned ny,
const double lx,
const double ly,
const unsigned nx_bl,
const double delta_bl,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper 
)
inline

Constructor for the mesh. nx_bl azimuthal layers of elements near the ends are squashed to that axial extent of the elements changes from lx/nx to delta_bl.

114  : RectangularQuadMesh<ELEMENT>(nx, ny, lx, ly, time_stepper_pt)
115  {
116  // Use default stretching fct
118 
119  // Store bl data
120  Nx_bl = nx_bl;
121  Delta_bl = delta_bl;
122 
123  // Build mesh
124  this->build_mesh(nx, ny, lx, ly);
125  }

References oomph::CircularCylindricalShellMesh< ELEMENT >::Axial_bl_stretching_fct_pt, oomph::CircularCylindricalShellMesh< ELEMENT >::build_mesh(), oomph::CircularCylindricalShellMesh< ELEMENT >::Delta_bl, Mesh_Parameters::lx, Mesh_Parameters::ly, oomph::CircularCylindricalShellMesh< ELEMENT >::Nx_bl, and oomph::RectangularQuadMesh< ELEMENT >::ny().

Member Function Documentation

◆ assign_undeformed_positions()

template<class ELEMENT >
void oomph::CircularCylindricalShellMesh< ELEMENT >::assign_undeformed_positions ( GeomObject *const &  undeformed_midplane_pt)

Set the undeformed coordinates of the nodes.

In all elastic problems, the nodes must be assigned an undeformed, or reference, position, corresponding to the stress-free state of the elastic body. This function assigns the undeformed position for the nodes on the elastic tube

129  {
130  // Loop over nodes in elements
131  unsigned nelem = nelement();
132  for (unsigned e = 0; e < nelem; e++)
133  {
134  ELEMENT* el_pt = dynamic_cast<ELEMENT*>(element_pt(e));
135  unsigned n_node = el_pt->nnode();
136  for (unsigned n = 0; n < n_node; n++)
137  {
138  // Get the Lagrangian coordinates
139  Vector<double> xi(2);
140  xi[0] = dynamic_cast<SolidNode*>(el_pt->node_pt(n))->xi(0);
141  xi[1] = dynamic_cast<SolidNode*>(el_pt->node_pt(n))->xi(1);
142 
143  // Assign memory for values of derivatives, etc
144  Vector<double> R(3);
145  DenseMatrix<double> a(2, 3);
146  RankThreeTensor<double> dadxi(2, 2, 3);
147 
148  // Get the geometrical information from the geometric object
149  undeformed_midplane_pt->d2position(xi, R, a, dadxi);
150 
151 
152  // Get derivatives of Lagr coordinates w.r.t. local coords
153  DenseMatrix<double> dxids(2, 2);
154  Vector<double> s(2);
155  el_pt->local_coordinate_of_node(n, s);
156  el_pt->interpolated_dxids(s, dxids);
157  double dxds = dxids(0, 0);
158 
159  // Loop over coordinate directions
160  for (unsigned i = 0; i < 3; i++)
161  {
162  // Set the position
163  el_pt->node_pt(n)->x_gen(0, i) = R[i];
164 
165  // Set generalised positions
166  el_pt->node_pt(n)->x_gen(1, i) = a(0, i) * dxds;
167  el_pt->node_pt(n)->x_gen(2, i) =
168  0.5 * a(1, i) * ((this->Ymax - this->Ymin) / this->Ny);
169 
170  // Set the mixed derivative
171  el_pt->node_pt(n)->x_gen(3, i) = 0.0;
172 
173  // Check for warping
174  if (dadxi(0, 1, i) != 0.0)
175  {
176  std::ostringstream error_stream;
177  error_stream
178  << "Undef. GeomObject for this shell mesh should not be warped!\n"
179  << "It may be possible to generalise the mesh generator to \n"
180  << "deal with this case -- feel free to have a go...\n";
181  throw OomphLibError(error_stream.str(),
184  }
185  }
186  }
187  }
188  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
@ R
Definition: StatisticsVector.h:21
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
unsigned Ny
Ny: number of elements in y-direction.
Definition: rectangular_quadmesh.template.h:65
double Ymax
Maximum value of y coordinate.
Definition: rectangular_quadmesh.template.h:77
double Ymin
Minimum value of y coordinate.
Definition: rectangular_quadmesh.template.h:75
RealScalar s
Definition: level1_cplx_impl.h:130
const Scalar * a
Definition: level2_cplx_impl.h:32
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References a, oomph::GeomObject::d2position(), e(), i, n, GlobalParameters::Ny, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, R, and s.

◆ axial_bl_stretching_fct_pt()

template<class ELEMENT >
AxialBLStretchingFctPt oomph::CircularCylindricalShellMesh< ELEMENT >::axial_bl_stretching_fct_pt ( ) const
inline

Access to fct pointer to fct that defines the axial stretching fct.

137  {
139  }

References oomph::CircularCylindricalShellMesh< ELEMENT >::Axial_bl_stretching_fct_pt.

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

◆ build_mesh()

template<class ELEMENT >
void oomph::CircularCylindricalShellMesh< ELEMENT >::build_mesh ( const unsigned nx,
const unsigned ny,
const double lx,
const double ly 
)
private

Mesh build helper fct.

Mesh build fct.

45  {
46  // Mesh can only be built with 2D Qelements.
47  MeshChecker::assert_geometric_element<QElementGeometricBase, ELEMENT>(2);
48 
49  // Find out how many nodes there are
50  unsigned n_node = nnode();
51 
52  // Now in this case it is the Lagrangian coordinates that we want to set,
53  // so we have to loop over all nodes and set them to the Eulerian
54  // coordinates that are set by the generic mesh generator
55  for (unsigned i = 0; i < n_node; i++)
56  {
57  node_pt(i)->xi(0) = scaled_x(node_pt(i)->x(0));
58  node_pt(i)->xi(1) = node_pt(i)->x(1);
59  }
60 
61 
62  // Loop over elements and nodes to find out min axial spacing
63  // for all nodes
64 
65  // Initialise map
66  std::map<Node*, double> min_dx;
67  unsigned nnod = nnode();
68  for (unsigned j = 0; j < nnod; j++) min_dx[node_pt(j)] = DBL_MAX;
69 
70  // Loop over elements
71  unsigned nelem = nelement();
72  for (unsigned e = 0; e < nelem; e++)
73  {
74  ELEMENT* el_pt = dynamic_cast<ELEMENT*>(element_pt(e));
75  unsigned n_node = el_pt->nnode();
76  for (unsigned j = 0; j < n_node; j++)
77  {
78  SolidNode* nod_pt = dynamic_cast<SolidNode*>(el_pt->node_pt(j));
79  double x = nod_pt->xi(0);
80  for (unsigned k = 0; k < n_node; k++)
81  {
82  double dx =
83  fabs(x - dynamic_cast<SolidNode*>(el_pt->node_pt(k))->xi(0));
84  if (dx < min_dx[nod_pt])
85  {
86  if (dx != 0.0) min_dx[nod_pt] = dx;
87  }
88  }
89  }
90  }
91 
92 
93  // Assign gradients, etc for the Lagrangian coordinates of
94  // Hermite-type elements
95 
96  // Read out number of position dofs
97  unsigned n_position_type = finite_element_pt(0)->nnodal_position_type();
98 
99  // Assign generalised Lagrangian positions (min slope, c.f. M. Heil's PhD
100  // thesis
101  if (n_position_type > 1)
102  {
103  // Default spacing
104  double xstep = (this->Xmax - this->Xmin) / ((this->Np - 1) * this->Nx);
105  double ystep = (this->Ymax - this->Ymin) / ((this->Np - 1) * this->Ny);
106 
107  // Adjust for non-uniform spacing
108  for (unsigned j = 0; j < n_node; j++)
109  {
110  SolidNode* nod_pt = node_pt(j);
111 
112  // Get min. spacing for non-uniform axial spacing
113  xstep = min_dx[nod_pt];
114 
115  // The factor 0.5 is because our reference element has length 2.0
116  nod_pt->xi_gen(1, 0) = 0.5 * xstep;
117  nod_pt->xi_gen(2, 1) = 0.5 * ystep;
118  }
119  }
120  }
double scaled_x(const double &x)
Definition: circular_shell_mesh.template.h:152
unsigned nnodal_position_type() const
Definition: elements.h:2463
FiniteElement * finite_element_pt(const unsigned &e) const
Definition: mesh.h:473
unsigned long nnode() const
Return number of nodes in the mesh.
Definition: mesh.h:596
double & x(const unsigned &i)
Return the i-th nodal coordinate.
Definition: nodes.h:1060
unsigned Nx
Nx: number of elements in x-direction.
Definition: rectangular_quadmesh.template.h:63
unsigned Np
Np: number of (linear) points in the element.
Definition: rectangular_quadmesh.template.h:67
double Xmax
Maximum value of x coordinate.
Definition: rectangular_quadmesh.template.h:72
double Xmin
Minimum value of x coordinate.
Definition: rectangular_quadmesh.template.h:70
SolidNode * node_pt(const unsigned long &n)
Return a pointer to the n-th global SolidNode.
Definition: mesh.h:2594
double & xi(const unsigned &i)
Reference to i-th Lagrangian position.
Definition: nodes.h:1883
char char char int int * k
Definition: level2_impl.h:374
Real fabs(const Real &a)
Definition: boostmultiprec.cpp:117
list x
Definition: plotDoE.py:28
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References e(), boost::multiprecision::fabs(), i, j, k, GlobalParameters::Nx, GlobalParameters::Ny, plotDoE::x, oomph::SolidNode::xi(), and oomph::SolidNode::xi_gen().

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

◆ piecewise_linear_axial_bl_stretching_fct()

template<class ELEMENT >
double oomph::CircularCylindricalShellMesh< ELEMENT >::piecewise_linear_axial_bl_stretching_fct ( const double xi)
inlineprivate

Default axial scaling fct.

166  {
167  // Length of shell
168  double lx = this->Xmax - this->Xmin;
169 
170  // Old axial extent of the elements spanning the boundary layer
171  double old_delta_bl = double(Nx_bl) * lx / double(this->Nx);
172 
173  double tmp_xi = xi;
174  if (xi < old_delta_bl)
175  {
176  tmp_xi = xi * Delta_bl / old_delta_bl;
177  }
178  else if (xi < (lx - old_delta_bl))
179  {
180  tmp_xi = Delta_bl + (xi - old_delta_bl) / (lx - 2.0 * old_delta_bl) *
181  (lx - 2.0 * Delta_bl);
182  }
183  else
184  {
185  double end_x = lx - Delta_bl;
186  tmp_xi = end_x + (xi - (lx - old_delta_bl)) / old_delta_bl * Delta_bl;
187  }
188  return tmp_xi;
189  }

References oomph::CircularCylindricalShellMesh< ELEMENT >::Delta_bl, Mesh_Parameters::lx, oomph::RectangularQuadMesh< ELEMENT >::Nx, oomph::CircularCylindricalShellMesh< ELEMENT >::Nx_bl, oomph::RectangularQuadMesh< ELEMENT >::Xmax, and oomph::RectangularQuadMesh< ELEMENT >::Xmin.

Referenced by oomph::CircularCylindricalShellMesh< ELEMENT >::scaled_x().

◆ scaled_x()

template<class ELEMENT >
double oomph::CircularCylindricalShellMesh< ELEMENT >::scaled_x ( const double x)
inlineprivate

Fct that defines the axial stretching to accomodate bending boundary layers

153  {
155  {
157  }
158  else
159  {
160  return (*Axial_bl_stretching_fct_pt)(x);
161  }
162  }
double piecewise_linear_axial_bl_stretching_fct(const double &xi)
Default axial scaling fct.
Definition: circular_shell_mesh.template.h:165

References oomph::CircularCylindricalShellMesh< ELEMENT >::Axial_bl_stretching_fct_pt, oomph::CircularCylindricalShellMesh< ELEMENT >::piecewise_linear_axial_bl_stretching_fct(), and plotDoE::x.

Member Data Documentation

◆ Axial_bl_stretching_fct_pt

◆ Delta_bl

template<class ELEMENT >
double oomph::CircularCylindricalShellMesh< ELEMENT >::Delta_bl
private

Axial extent of the squashed boundary layer part of the mesh occupied by Nx_bl elements (at each end of the tube)

Referenced by oomph::CircularCylindricalShellMesh< ELEMENT >::CircularCylindricalShellMesh(), and oomph::CircularCylindricalShellMesh< ELEMENT >::piecewise_linear_axial_bl_stretching_fct().

◆ Nx_bl

template<class ELEMENT >
unsigned oomph::CircularCylindricalShellMesh< ELEMENT >::Nx_bl
private

Number of azimuthal element layers that get squashed into each of the the two boundary layers at the ends of the tube

Referenced by oomph::CircularCylindricalShellMesh< ELEMENT >::CircularCylindricalShellMesh(), and oomph::CircularCylindricalShellMesh< ELEMENT >::piecewise_linear_axial_bl_stretching_fct().


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