ElasticRefineableTwoLayerMesh< ELEMENT > Class Template Reference
+ Inheritance diagram for ElasticRefineableTwoLayerMesh< ELEMENT >:

Public Member Functions

 ElasticRefineableTwoLayerMesh (const unsigned &nx, const unsigned &ny1, const unsigned &ny2, const double &lx, const double &h1, const double &h2, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
 ElasticRefineableTwoLayerMesh (const unsigned &nx, const unsigned &ny1, const unsigned &ny2, const double &lx, const double &h1, const double &h2, const bool &periodic_in_x, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
void setup_upper_and_lower_elements ()
 
unsigned nlower () const
 
unsigned nupper () const
 
FiniteElementlower_layer_element_pt (const unsigned &e) const
 
FiniteElementupper_layer_element_pt (const unsigned &e) const
 
 ElasticRefineableTwoLayerMesh (const unsigned &nx, const unsigned &ny1, const unsigned &ny2, const double &lx, const double &h1, const double &h2, const bool &periodic_in_x, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
void setup_upper_and_lower_elements ()
 
unsigned nlower () const
 
unsigned nupper () const
 
FiniteElementlower_layer_element_pt (const unsigned &e) const
 
FiniteElementupper_layer_element_pt (const unsigned &e) const
 
 ElasticRefineableTwoLayerMesh (const unsigned &nx, const unsigned &ny1, const unsigned &ny2, const double &lx, const double &h1, const double &h2, const bool &periodic_in_x, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
- Public Member Functions inherited from oomph::ElasticRefineableRectangularQuadMesh< ELEMENT >
 ElasticRefineableRectangularQuadMesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
 ElasticRefineableRectangularQuadMesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly, const bool &periodic_in_x, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
 ElasticRefineableRectangularQuadMesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly, const Vector< double > &origin, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
- Public Member Functions inherited from oomph::ElasticRectangularQuadMesh< ELEMENT >
 ElasticRectangularQuadMesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly, const Vector< double > &origin, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
 ElasticRectangularQuadMesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
 ElasticRectangularQuadMesh (const unsigned &nx, const unsigned &ny, const double &lx, const double &ly, const bool &periodic_in_x, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
- 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)
 
- Public Member Functions inherited from oomph::RefineableQuadMesh< ELEMENT >
 RefineableQuadMesh ()
 Constructor: Setup static quadtree data. More...
 
 RefineableQuadMesh (const RefineableQuadMesh &dummy)=delete
 Broken copy constructor. More...
 
virtual ~RefineableQuadMesh ()
 Broken assignment operator. More...
 
virtual void setup_tree_forest ()
 
void setup_quadtree_forest ()
 
- Public Member Functions inherited from oomph::TreeBasedRefineableMesh< ELEMENT >
 TreeBasedRefineableMesh ()
 Constructor, call the constructor of the base class. More...
 
 TreeBasedRefineableMesh (const TreeBasedRefineableMesh &dummy)=delete
 Broken copy constructor. More...
 
virtual ~TreeBasedRefineableMesh ()
 Empty virtual destructor. More...
 
- Public Member Functions inherited from oomph::TreeBasedRefineableMeshBase
 TreeBasedRefineableMeshBase ()
 Constructor. More...
 
 TreeBasedRefineableMeshBase (const TreeBasedRefineableMeshBase &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const TreeBasedRefineableMeshBase &)=delete
 Broken assignment operator. More...
 
virtual ~TreeBasedRefineableMeshBase ()
 Empty Destructor: More...
 
void adapt (const Vector< double > &elemental_error)
 
void p_adapt (const Vector< double > &elemental_error)
 
void refine_uniformly (DocInfo &doc_info)
 Refine mesh uniformly and doc process. More...
 
void refine_uniformly ()
 Refine mesh uniformly. More...
 
void p_refine_uniformly (DocInfo &doc_info)
 p-refine mesh uniformly and doc process More...
 
void p_refine_uniformly ()
 p-refine mesh uniformly More...
 
unsigned unrefine_uniformly ()
 
void p_unrefine_uniformly (DocInfo &doc_info)
 p-unrefine mesh uniformly More...
 
TreeForestforest_pt ()
 Return pointer to the Forest represenation of the mesh. More...
 
void doc_adaptivity_targets (std::ostream &outfile)
 Doc the targets for mesh adaptation. More...
 
unsignedmax_refinement_level ()
 Access fct for max. permissible refinement level (relative to base mesh) More...
 
unsignedmin_refinement_level ()
 Access fct for min. permissible refinement level (relative to base mesh) More...
 
unsignedmax_p_refinement_level ()
 
unsignedmin_p_refinement_level ()
 
virtual void adapt_mesh (DocInfo &doc_info)
 
virtual void adapt_mesh ()
 
void p_adapt_mesh (DocInfo &doc_info)
 
void p_adapt_mesh ()
 
virtual void refine_selected_elements (const Vector< unsigned > &elements_to_be_refined)
 
virtual void refine_selected_elements (const Vector< RefineableElement * > &elements_to_be_refined)
 
void p_refine_selected_elements (const Vector< unsigned > &elements_to_be_refined)
 p-refine mesh by refining the elements identified by their numbers. More...
 
void p_refine_selected_elements (const Vector< PRefineableElement * > &elements_to_be_refined_pt)
 p-refine mesh by refining the elements identified by their pointers. More...
 
virtual void refine_base_mesh_as_in_reference_mesh (TreeBasedRefineableMeshBase *const &ref_mesh_pt)
 Refine to same degree as the reference mesh. More...
 
virtual bool refine_base_mesh_as_in_reference_mesh_minus_one (TreeBasedRefineableMeshBase *const &ref_mesh_pt)
 
virtual void refine_as_in_reference_mesh (TreeBasedRefineableMeshBase *const &ref_mesh_pt)
 
virtual void get_refinement_levels (unsigned &min_refinement_level, unsigned &max_refinement_level)
 Get max/min refinement levels in mesh. More...
 
virtual void get_elements_at_refinement_level (unsigned &refinement_level, Vector< RefineableElement * > &level_elements)
 
virtual void get_refinement_pattern (Vector< Vector< unsigned >> &to_be_refined)
 
void refine_base_mesh (Vector< Vector< unsigned >> &to_be_refined)
 Refine base mesh according to specified refinement pattern. More...
 
virtual void refine (std::ifstream &restart_file)
 Refine mesh according to refinement pattern in restart file. More...
 
virtual void dump_refinement (std::ostream &outfile)
 Dump refinement pattern to allow for rebuild. More...
 
virtual void read_refinement (std::ifstream &restart_file, Vector< Vector< unsigned >> &to_be_refined)
 Read refinement pattern to allow for rebuild. More...
 
unsigned uniform_refinement_level_when_pruned () const
 
unsigneduniform_refinement_level_when_pruned ()
 Level to which the mesh was uniformly refined when it was pruned. More...
 
- Public Member Functions inherited from oomph::RefineableMeshBase
bool adapt_flag ()
 
 RefineableMeshBase ()
 
 RefineableMeshBase (const RefineableMeshBase &dummy)=delete
 Broken copy constructor. More...
 
void operator= (const RefineableMeshBase &)=delete
 Broken assignment operator. More...
 
virtual ~RefineableMeshBase ()
 Empty Destructor: More...
 
unsigned nrefined ()
 Access fct for number of elements that were refined. More...
 
unsigned nunrefined ()
 Access fct for number of elements that were unrefined. More...
 
unsignednrefinement_overruled ()
 
unsignedmax_keep_unrefined ()
 
ErrorEstimator *& spatial_error_estimator_pt ()
 Access to spatial error estimator. More...
 
ErrorEstimatorspatial_error_estimator_pt () const
 Access to spatial error estimator (const version. More...
 
doublemin_permitted_error ()
 
doublemax_permitted_error ()
 
doublemin_error ()
 
doublemax_error ()
 
DocInfo *& doc_info_pt ()
 Access fct for pointer to DocInfo. More...
 
void enable_adaptation ()
 Enable adaptation. More...
 
void disable_adaptation ()
 Disable adaptation. More...
 
void enable_p_adaptation ()
 Enable adaptation. More...
 
void disable_p_adaptation ()
 Disable adaptation. More...
 
void enable_additional_synchronisation_of_hanging_nodes ()
 Enable additional synchronisation of hanging nodes. More...
 
void disable_additional_synchronisation_of_hanging_nodes ()
 Disable additional synchronisation of hanging nodes. More...
 
bool is_adaptation_enabled () const
 Return whether the mesh is to be adapted. More...
 
bool is_p_adaptation_enabled () const
 Return whether the mesh is to be adapted. More...
 
bool is_additional_synchronisation_of_hanging_nodes_disabled () const
 Return whether additional synchronisation is enabled. More...
 
DocInfo doc_info ()
 Access fct for DocInfo. More...
 
void p_unrefine_uniformly (DocInfo &doc_info)
 p-unrefine mesh uniformly More...
 

Private Attributes

unsigned Nlower
 
unsigned Nupper
 
Vector< TreeRoot * > Upper_tree_root_pt
 
Vector< TreeRoot * > Lower_tree_root_pt
 
Vector< FiniteElement * > Upper_element_pt
 
Vector< FiniteElement * > Lower_element_pt
 

Additional Inherited Members

- 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)
 
- 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 Member Functions inherited from oomph::TreeBasedRefineableMeshBase
void complete_hanging_nodes (const int &ncont_interpolated_values)
 Complete the hanging node scheme recursively. More...
 
void complete_hanging_nodes_recursively (Node *&nod_pt, Vector< Node * > &master_nodes, Vector< double > &hang_weights, const int &ival)
 Auxiliary routine for recursive hanging node completion. More...
 
- 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
 
- Protected Attributes inherited from oomph::TreeBasedRefineableMeshBase
unsigned Uniform_refinement_level_when_pruned
 Level to which the mesh was uniformly refined when it was pruned. More...
 
unsigned Max_refinement_level
 Max. permissible refinement level (relative to base mesh) More...
 
unsigned Min_refinement_level
 Min. permissible refinement level (relative to base mesh) More...
 
unsigned Max_p_refinement_level
 Max. permissible p-refinement level (relative to base mesh) More...
 
unsigned Min_p_refinement_level
 Min. permissible p-refinement level (relative to base mesh) More...
 
TreeForestForest_pt
 Forest representation of the mesh. More...
 
- Protected Attributes inherited from oomph::RefineableMeshBase
ErrorEstimatorSpatial_error_estimator_pt
 Pointer to spatial error estimator. More...
 
double Max_permitted_error
 Max. error (i.e. split elements if their error is larger) More...
 
double Min_permitted_error
 Min. error (i.e. (try to) merge elements if their error is smaller) More...
 
double Min_error
 Min.actual error. More...
 
double Max_error
 Max. actual error. More...
 
unsigned Nrefined
 Stats: Number of elements that were refined. More...
 
unsigned Nunrefined
 Stats: Number of elements that were unrefined. More...
 
bool Adapt_flag
 Flag that requests adaptation. More...
 
bool P_adapt_flag
 Flag that requests p-adaptation. More...
 
bool Additional_synchronisation_of_hanging_nodes_not_required
 Flag that disables additional synchronisation of hanging nodes. More...
 
DocInfoDoc_info_pt
 Pointer to DocInfo. More...
 
unsigned Max_keep_unrefined
 
unsigned Nrefinement_overruled
 

Detailed Description

template<class ELEMENT>
class ElasticRefineableTwoLayerMesh< ELEMENT >

/////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// Two layer mesh which employs a pseudo-solid node-update strategy. This class is essentially a wrapper to an ElasticRefineableRectangularQuadMesh, with an additional boundary to represent the interface between the two fluid layers.

Two layer mesh which employs a pseudo-solid node-update strategy. This class is essentially a wrapper to an ElasticRefineableRectangularQuadMesh, with an additional boundary to represent the interface between the two fluid layers.

Constructor & Destructor Documentation

◆ ElasticRefineableTwoLayerMesh() [1/4]

template<class ELEMENT >
ElasticRefineableTwoLayerMesh< ELEMENT >::ElasticRefineableTwoLayerMesh ( const unsigned nx,
const unsigned ny1,
const unsigned ny2,
const double lx,
const double h1,
const double h2,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper 
)
inline

Constructor: Pass number of elements in x-direction, number of elements in y-direction in bottom and top layer, respectively, axial length and height of top and bottom layers, and pointer to timestepper (defaults to Steady timestepper)

124  : RectangularQuadMesh<ELEMENT>(nx,ny1+ny2,lx,h1+h2,
125  false,time_stepper_pt),
127  false,time_stepper_pt),
129  false,time_stepper_pt)
130  {
131  // ----------------------------------------------------
132  // Convert all nodes on the interface to boundary nodes
133  // ----------------------------------------------------
134 
135  // Set the number of boundaries to 5
136  this->set_nboundary(5);
137 
138  // Loop over horizontal elements
139  for(unsigned e=0;e<nx;e++)
140  {
141  // Get pointer to element in lower fluid adjacent to interface
142  FiniteElement* el_pt = this->finite_element_pt(nx*(ny1-1)+e);
143 
144  // Determine number of nodes in this element
145  const unsigned n_node = el_pt->nnode();
146 
147  // The last three nodes in this element are those on the interface.
148  // Loop over these nodes and convert them to boundary nodes.
149  for(unsigned n=0;n<3;n++)
150  {
151  Node* nod_pt = el_pt->node_pt(n_node-3+n);
152  this->convert_to_boundary_node(nod_pt);
153  this->add_boundary_node(4,nod_pt);
154  }
155  } // End of loop over horizontal elements
156 
157  // Set up the boundary element information
159  }
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Definition: rectangular_quadmesh.template.h:423
Definition: rectangular_quadmesh.template.h:573
Definition: elements.h:1313
Node *& node_pt(const unsigned &n)
Return a pointer to the local node n.
Definition: elements.h:2175
unsigned nnode() const
Return the number of nodes.
Definition: elements.h:2210
void add_boundary_node(const unsigned &b, Node *const &node_pt)
Add a (pointer to) a node to the b-th boundary.
Definition: mesh.cc:243
FiniteElement * finite_element_pt(const unsigned &e) const
Definition: mesh.h:473
void set_nboundary(const unsigned &nbound)
Set the number of boundaries in the mesh.
Definition: mesh.h:505
void convert_to_boundary_node(Node *&node_pt, const Vector< FiniteElement * > &finite_element_pt)
Definition: mesh.cc:2590
Definition: nodes.h:906
void setup_boundary_element_info()
Definition: quad_mesh.h:73
Definition: rectangular_quadmesh.template.h:59
const unsigned & nx() const
Return number of elements in x direction.
Definition: rectangular_quadmesh.template.h:224
const double lx
Definition: ConstraintElementsUnitTest.cpp:33

References e(), n, oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), and Mesh_Parameters::nx.

◆ ElasticRefineableTwoLayerMesh() [2/4]

template<class ELEMENT >
ElasticRefineableTwoLayerMesh< ELEMENT >::ElasticRefineableTwoLayerMesh ( const unsigned nx,
const unsigned ny1,
const unsigned ny2,
const double lx,
const double h1,
const double h2,
const bool periodic_in_x,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper 
)
inline

Constructor: Pass number of elements in x-direction, number of elements in y-direction in bottom and top layer, respectively, axial length and height of top and bottom layers, a boolean flag to make the mesh periodic in the x-direction, and pointer to timestepper (defaults to Steady timestepper)

463  : RectangularQuadMesh<ELEMENT>(nx,ny1+ny2,lx,h1+h2,
464  periodic_in_x,time_stepper_pt),
466  periodic_in_x,time_stepper_pt),
468  periodic_in_x,
469  time_stepper_pt)
470  {
471  // ----------------------------------------------------
472  // Convert all nodes on the interface to boundary nodes
473  // ----------------------------------------------------
474 
475  // Set the number of boundaries to 5
476  this->set_nboundary(5);
477 
478  //Set the boundary coordinate to be the Lagrangian x coordinate the new boundary
479  Vector<double> zeta(1);
480  // Loop over horizontal elements
481  for(unsigned e=0;e<nx;e++)
482  {
483  // Get pointer to element in lower fluid adjacent to interface
484  FiniteElement* el_pt = this->finite_element_pt(nx*(ny1-1)+e);
485 
486  // Determine number of nodes in this element
487  const unsigned n_node = el_pt->nnode();
488 
489  // The last three nodes in this element are those on the interface.
490  // Loop over these nodes and convert them to boundary nodes.
491  for(unsigned n=0;n<3;n++)
492  {
493  Node* nod_pt = el_pt->node_pt(n_node-3+n);
494  this->convert_to_boundary_node(nod_pt);
495  this->add_boundary_node(4,nod_pt);
496 
497  //Boundary coordinate is the origin x coordinate
498  zeta[0] = nod_pt->x(0);
500  }
501  } // End of loop over horizontal elements
502  this->Boundary_coordinate_exists[4] = true;
503 
504  // Set up the boundary element information
506 
507  Nlower = nx*ny1; Nupper = nx*ny2;
508 
509  //The default position is that the interface will be located half-way between the
510  //boundaries, now we need to rescale.
511  double half_height = 0.5*(h1+h2);
512  //Loop over all nodes
513  unsigned n_node = this->nnode();
514  for(unsigned n=0;n<n_node;++n)
515  {
516  SolidNode* nod_pt = this->node_pt(n);
517  double y = nod_pt->x(1);
518  if(y < half_height) {nod_pt->x(1) = h1*y/half_height;}
519  else {nod_pt->x(1) = h1 + h2*((y-half_height)/half_height);}
520  }
521 
522  //Reset the Lagrangian coordinates
524 
525 
526  //Set the upper and lower tree roots
527  this->Lower_tree_root_pt.resize(Nlower);
528  for(unsigned e=0;e<Nlower;e++)
529  {
530  this->Lower_tree_root_pt[e] =
531  dynamic_cast<ELEMENT*>(this->element_pt(e))->
532  tree_pt()->root_pt();
533  }
534  this->Upper_tree_root_pt.resize(Nupper);
535  for(unsigned e=0;e<Nupper;e++)
536  {
537  this->Upper_tree_root_pt[e] =
538  dynamic_cast<ELEMENT*>(this->element_pt(Nlower+e))->
539  tree_pt()->root_pt();
540  }
541 
542 
543  //Sort out periodicity for the adaptive mesh
544  if(periodic_in_x)
545  {
546  // Now establish the new neighbours (created by "wrapping around"
547  // the domain) in the TreeForst representation of the mesh
548  unsigned ny = ny1+ny2;
549  // Get pointers to tree roots associated with elements on the
550  // left and right boundaries
551  Vector<TreeRoot*> left_root_pt(ny);
552  Vector<TreeRoot*> right_root_pt(ny);
553  for(unsigned i=0;i<ny;i++)
554  {
555  left_root_pt[i] =
556  dynamic_cast<ELEMENT*>(this->element_pt(i*nx))->
557  tree_pt()->root_pt();
558  right_root_pt[i] =
559  dynamic_cast<ELEMENT*>(this->element_pt(nx-1+i*nx))->
560  tree_pt()->root_pt();
561  }
562 
563  // Switch on QuadTreeNames for enumeration of directions
564  using namespace QuadTreeNames;
565 
566  //Set the neighbour and periodicity
567  for(unsigned i=0;i<ny;i++)
568  {
569  // The western neighbours of the elements on the left
570  // boundary are those on the right
571  left_root_pt[i]->neighbour_pt(W) = right_root_pt[i];
572  left_root_pt[i]->set_neighbour_periodic(W);
573 
574  // The eastern neighbours of the elements on the right
575  // boundary are those on the left
576  right_root_pt[i]->neighbour_pt(E) = left_root_pt[i];
577  right_root_pt[i]->set_neighbour_periodic(E);
578  } // done
579  }
580 
582 
583  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9
Vector< TreeRoot * > Lower_tree_root_pt
Definition: refineable_two_layer_soluble_surfactant.cc:439
void setup_upper_and_lower_elements()
Definition: refineable_two_layer_soluble_surfactant.cc:586
Vector< TreeRoot * > Upper_tree_root_pt
Definition: refineable_two_layer_soluble_surfactant.cc:436
unsigned Nupper
Definition: refineable_two_layer_soluble_surfactant.cc:430
unsigned Nlower
Definition: refineable_two_layer_soluble_surfactant.cc:427
std::vector< bool > Boundary_coordinate_exists
Definition: mesh.h:190
unsigned long nnode() const
Return number of nodes in the mesh.
Definition: mesh.h:596
const Vector< GeneralisedElement * > & element_pt() const
Return reference to the Vector of elements.
Definition: mesh.h:460
double & x(const unsigned &i)
Return the i-th nodal coordinate.
Definition: nodes.h:1060
virtual void set_coordinates_on_boundary(const unsigned &b, const unsigned &k, const Vector< double > &boundary_zeta)
Definition: nodes.cc:2394
const unsigned & ny() const
Return number of elements in y direction.
Definition: rectangular_quadmesh.template.h:231
SolidNode * node_pt(const unsigned long &n)
Return a pointer to the n-th global SolidNode.
Definition: mesh.h:2594
void set_lagrangian_nodal_coordinates()
Definition: mesh.cc:9564
Definition: nodes.h:1686
Scalar * y
Definition: level1_cplx_impl.h:128
EIGEN_STRONG_INLINE const Eigen::CwiseBinaryOp< Eigen::internal::scalar_zeta_op< typename DerivedX::Scalar >, const DerivedX, const DerivedQ > zeta(const Eigen::ArrayBase< DerivedX > &x, const Eigen::ArrayBase< DerivedQ > &q)
Definition: SpecialFunctionsArrayAPI.h:152
double E
Elastic modulus.
Definition: TwenteMeshGluing.cpp:68
@ W
Definition: quadtree.h:63

References Global_Physical_Variables::E, e(), i, n, oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), Mesh_Parameters::nx, Mesh_Parameters::ny, oomph::Node::set_coordinates_on_boundary(), oomph::QuadTreeNames::W, oomph::Node::x(), y, and Eigen::zeta().

◆ ElasticRefineableTwoLayerMesh() [3/4]

template<class ELEMENT >
ElasticRefineableTwoLayerMesh< ELEMENT >::ElasticRefineableTwoLayerMesh ( const unsigned nx,
const unsigned ny1,
const unsigned ny2,
const double lx,
const double h1,
const double h2,
const bool periodic_in_x,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper 
)
inline

Constructor: Pass number of elements in x-direction, number of elements in y-direction in bottom and top layer, respectively, axial length and height of top and bottom layers, a boolean flag to make the mesh periodic in the x-direction, and pointer to timestepper (defaults to Steady timestepper)

460  : RectangularQuadMesh<ELEMENT>(nx,ny1+ny2,lx,h1+h2,
461  periodic_in_x,time_stepper_pt),
463  periodic_in_x,time_stepper_pt),
465  periodic_in_x,
466  time_stepper_pt)
467  {
468  // ----------------------------------------------------
469  // Convert all nodes on the interface to boundary nodes
470  // ----------------------------------------------------
471 
472  // Set the number of boundaries to 5
473  this->set_nboundary(5);
474 
475  //Set the boundary coordinate to be the Lagrangian x coordinate the new boundary
476  Vector<double> zeta(1);
477  // Loop over horizontal elements
478  for(unsigned e=0;e<nx;e++)
479  {
480  // Get pointer to element in lower fluid adjacent to interface
481  FiniteElement* el_pt = this->finite_element_pt(nx*(ny1-1)+e);
482 
483  // Determine number of nodes in this element
484  const unsigned n_node = el_pt->nnode();
485 
486  // The last three nodes in this element are those on the interface.
487  // Loop over these nodes and convert them to boundary nodes.
488  for(unsigned n=0;n<3;n++)
489  {
490  Node* nod_pt = el_pt->node_pt(n_node-3+n);
491  this->convert_to_boundary_node(nod_pt);
492  this->add_boundary_node(4,nod_pt);
493 
494  //Boundary coordinate is the origin x coordinate
495  zeta[0] = nod_pt->x(0);
497  }
498  } // End of loop over horizontal elements
499  this->Boundary_coordinate_exists[4] = true;
500 
501  // Set up the boundary element information
503 
504  Nlower = nx*ny1; Nupper = nx*ny2;
505 
506  //The default position is that the interface will be located half-way between the
507  //boundaries, now we need to rescale.
508  double half_height = 0.5*(h1+h2);
509  //Loop over all nodes
510  unsigned n_node = this->nnode();
511  for(unsigned n=0;n<n_node;++n)
512  {
513  SolidNode* nod_pt = this->node_pt(n);
514  double y = nod_pt->x(1);
515  if(y < half_height) {nod_pt->x(1) = h1*y/half_height;}
516  else {nod_pt->x(1) = h1 + h2*((y-half_height)/half_height);}
517  }
518 
519  //Reset the Lagrangian coordinates
521 
522 
523  //Set the upper and lower tree roots
524  this->Lower_tree_root_pt.resize(Nlower);
525  for(unsigned e=0;e<Nlower;e++)
526  {
527  this->Lower_tree_root_pt[e] =
528  dynamic_cast<ELEMENT*>(this->element_pt(e))->
529  tree_pt()->root_pt();
530  }
531  this->Upper_tree_root_pt.resize(Nupper);
532  for(unsigned e=0;e<Nupper;e++)
533  {
534  this->Upper_tree_root_pt[e] =
535  dynamic_cast<ELEMENT*>(this->element_pt(Nlower+e))->
536  tree_pt()->root_pt();
537  }
538 
539 
540  //Sort out periodicity for the adaptive mesh
541  if(periodic_in_x)
542  {
543  // Now establish the new neighbours (created by "wrapping around"
544  // the domain) in the TreeForst representation of the mesh
545  unsigned ny = ny1+ny2;
546  // Get pointers to tree roots associated with elements on the
547  // left and right boundaries
548  Vector<TreeRoot*> left_root_pt(ny);
549  Vector<TreeRoot*> right_root_pt(ny);
550  for(unsigned i=0;i<ny;i++)
551  {
552  left_root_pt[i] =
553  dynamic_cast<ELEMENT*>(this->element_pt(i*nx))->
554  tree_pt()->root_pt();
555  right_root_pt[i] =
556  dynamic_cast<ELEMENT*>(this->element_pt(nx-1+i*nx))->
557  tree_pt()->root_pt();
558  }
559 
560  // Switch on QuadTreeNames for enumeration of directions
561  using namespace QuadTreeNames;
562 
563  //Set the neighbour and periodicity
564  for(unsigned i=0;i<ny;i++)
565  {
566  // The western neighbours of the elements on the left
567  // boundary are those on the right
568  left_root_pt[i]->neighbour_pt(W) = right_root_pt[i];
569  left_root_pt[i]->set_neighbour_periodic(W);
570 
571  // The eastern neighbours of the elements on the right
572  // boundary are those on the left
573  right_root_pt[i]->neighbour_pt(E) = left_root_pt[i];
574  right_root_pt[i]->set_neighbour_periodic(E);
575  } // done
576  }
577 
579 
580  }

References Global_Physical_Variables::E, e(), i, n, oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), Mesh_Parameters::nx, Mesh_Parameters::ny, oomph::Node::set_coordinates_on_boundary(), oomph::QuadTreeNames::W, oomph::Node::x(), y, and Eigen::zeta().

◆ ElasticRefineableTwoLayerMesh() [4/4]

template<class ELEMENT >
ElasticRefineableTwoLayerMesh< ELEMENT >::ElasticRefineableTwoLayerMesh ( const unsigned nx,
const unsigned ny1,
const unsigned ny2,
const double lx,
const double h1,
const double h2,
const bool periodic_in_x,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper 
)
inline

Constructor: Pass number of elements in x-direction, number of elements in y-direction in bottom and top layer, respectively, axial length and height of top and bottom layers, a boolean flag to make the mesh periodic in the x-direction, and pointer to timestepper (defaults to Steady timestepper)

122  : RectangularQuadMesh<ELEMENT>(nx,ny1+ny2,lx,h1+h2,
123  periodic_in_x,time_stepper_pt),
125  periodic_in_x,time_stepper_pt),
127  periodic_in_x,
128  time_stepper_pt)
129  {
130  // ----------------------------------------------------
131  // Convert all nodes on the interface to boundary nodes
132  // ----------------------------------------------------
133 
134  // Set the number of boundaries to 5
135  this->set_nboundary(5);
136 
137  // Loop over horizontal elements
138  for(unsigned e=0;e<nx;e++)
139  {
140  // Get pointer to element in lower fluid adjacent to interface
141  FiniteElement* el_pt = this->finite_element_pt(nx*(ny1-1)+e);
142 
143  // Determine number of nodes in this element
144  const unsigned n_node = el_pt->nnode();
145 
146  // The last three nodes in this element are those on the interface.
147  // Loop over these nodes and convert them to boundary nodes.
148  for(unsigned n=0;n<3;n++)
149  {
150  Node* nod_pt = el_pt->node_pt(n_node-3+n);
151  this->convert_to_boundary_node(nod_pt);
152  this->add_boundary_node(4,nod_pt);
153  }
154  } // End of loop over horizontal elements
155 
156  // Set up the boundary element information
158  }

References e(), n, oomph::FiniteElement::nnode(), oomph::FiniteElement::node_pt(), and Mesh_Parameters::nx.

Member Function Documentation

◆ lower_layer_element_pt() [1/2]

template<class ELEMENT >
FiniteElement* ElasticRefineableTwoLayerMesh< ELEMENT >::lower_layer_element_pt ( const unsigned e) const
inline
625  {return this->Lower_element_pt[e];}
Vector< FiniteElement * > Lower_element_pt
Definition: refineable_two_layer_soluble_surfactant.cc:445

References e().

Referenced by SurfactantProblem< ELEMENT, INTERFACE_ELEMENT >::compute_areas().

◆ lower_layer_element_pt() [2/2]

template<class ELEMENT >
FiniteElement* ElasticRefineableTwoLayerMesh< ELEMENT >::lower_layer_element_pt ( const unsigned e) const
inline
622  {return this->Lower_element_pt[e];}

References e().

◆ nlower() [1/2]

◆ nlower() [2/2]

template<class ELEMENT >
unsigned ElasticRefineableTwoLayerMesh< ELEMENT >::nlower ( ) const
inline
617 {return(Nlower);}

◆ nupper() [1/2]

template<class ELEMENT >
unsigned ElasticRefineableTwoLayerMesh< ELEMENT >::nupper ( ) const
inline

◆ nupper() [2/2]

template<class ELEMENT >
unsigned ElasticRefineableTwoLayerMesh< ELEMENT >::nupper ( ) const
inline
619 {return(Nupper);}

◆ setup_upper_and_lower_elements() [1/2]

template<class ELEMENT >
void ElasticRefineableTwoLayerMesh< ELEMENT >::setup_upper_and_lower_elements ( )
inline
587  {
588  unsigned Nupper_root = Upper_tree_root_pt.size();
589  Vector<Tree*> upper_leaves_pt;
590  for(unsigned i=0;i<Nupper_root;++i)
591  {
592  Upper_tree_root_pt[i]->stick_leaves_into_vector(upper_leaves_pt);
593  }
594 
595  Nupper = upper_leaves_pt.size();
596  Upper_element_pt.resize(Nupper);
597 
598  for(unsigned i=0;i<Nupper;++i)
599  {
600  Upper_element_pt[i] = upper_leaves_pt[i]->object_pt();
601  }
602 
603  unsigned Nlower_root = Lower_tree_root_pt.size();
604  Vector<Tree*> lower_leaves_pt;
605  for(unsigned i=0;i<Nlower_root;++i)
606  {
607  Lower_tree_root_pt[i]->stick_leaves_into_vector(lower_leaves_pt);
608  }
609 
610  Nlower = lower_leaves_pt.size();
611  Lower_element_pt.resize(Nlower);
612 
613  for(unsigned i=0;i<Nlower;++i)
614  {
615  Lower_element_pt[i] = lower_leaves_pt[i]->object_pt();
616  }
617  }
Vector< FiniteElement * > Upper_element_pt
Definition: refineable_two_layer_soluble_surfactant.cc:442

References i.

◆ setup_upper_and_lower_elements() [2/2]

template<class ELEMENT >
void ElasticRefineableTwoLayerMesh< ELEMENT >::setup_upper_and_lower_elements ( )
inline
584  {
585  unsigned Nupper_root = Upper_tree_root_pt.size();
586  Vector<Tree*> upper_leaves_pt;
587  for(unsigned i=0;i<Nupper_root;++i)
588  {
589  Upper_tree_root_pt[i]->stick_leaves_into_vector(upper_leaves_pt);
590  }
591 
592  Nupper = upper_leaves_pt.size();
593  Upper_element_pt.resize(Nupper);
594 
595  for(unsigned i=0;i<Nupper;++i)
596  {
597  Upper_element_pt[i] = upper_leaves_pt[i]->object_pt();
598  }
599 
600  unsigned Nlower_root = Lower_tree_root_pt.size();
601  Vector<Tree*> lower_leaves_pt;
602  for(unsigned i=0;i<Nlower_root;++i)
603  {
604  Lower_tree_root_pt[i]->stick_leaves_into_vector(lower_leaves_pt);
605  }
606 
607  Nlower = lower_leaves_pt.size();
608  Lower_element_pt.resize(Nlower);
609 
610  for(unsigned i=0;i<Nlower;++i)
611  {
612  Lower_element_pt[i] = lower_leaves_pt[i]->object_pt();
613  }
614  }

References i.

◆ upper_layer_element_pt() [1/2]

template<class ELEMENT >
FiniteElement* ElasticRefineableTwoLayerMesh< ELEMENT >::upper_layer_element_pt ( const unsigned e) const
inline

◆ upper_layer_element_pt() [2/2]

template<class ELEMENT >
FiniteElement* ElasticRefineableTwoLayerMesh< ELEMENT >::upper_layer_element_pt ( const unsigned e) const
inline
625  {return this->Upper_element_pt[e];}

References e().

Member Data Documentation

◆ Lower_element_pt

template<class ELEMENT >
Vector< FiniteElement * > ElasticRefineableTwoLayerMesh< ELEMENT >::Lower_element_pt
private

◆ Lower_tree_root_pt

template<class ELEMENT >
Vector< TreeRoot * > ElasticRefineableTwoLayerMesh< ELEMENT >::Lower_tree_root_pt
private

◆ Nlower

template<class ELEMENT >
unsigned ElasticRefineableTwoLayerMesh< ELEMENT >::Nlower
private

◆ Nupper

template<class ELEMENT >
unsigned ElasticRefineableTwoLayerMesh< ELEMENT >::Nupper
private

◆ Upper_element_pt

template<class ELEMENT >
Vector< FiniteElement * > ElasticRefineableTwoLayerMesh< ELEMENT >::Upper_element_pt
private

◆ Upper_tree_root_pt

template<class ELEMENT >
Vector< TreeRoot * > ElasticRefineableTwoLayerMesh< ELEMENT >::Upper_tree_root_pt
private

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