oomph::LineMeshBase Class Reference

Base class for line meshes (meshes made of 1D line elements) More...

#include <line_mesh.h>

+ Inheritance diagram for oomph::LineMeshBase:

Public Member Functions

 LineMeshBase ()
 Constructor (empty) More...
 
 LineMeshBase (const LineMeshBase &node)=delete
 Broken copy constructor. More...
 
void operator= (const LineMeshBase &)=delete
 Broken assignment operator. More...
 
virtual ~LineMeshBase ()
 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)
 
virtual void scale_mesh (const double &factor)
 
 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...
 

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...
 
- 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::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

Base class for line meshes (meshes made of 1D line elements)

Constructor & Destructor Documentation

◆ LineMeshBase() [1/2]

oomph::LineMeshBase::LineMeshBase ( )
inline

Constructor (empty)

57 {}

◆ LineMeshBase() [2/2]

oomph::LineMeshBase::LineMeshBase ( const LineMeshBase node)
delete

Broken copy constructor.

◆ ~LineMeshBase()

virtual oomph::LineMeshBase::~LineMeshBase ( )
inlinevirtual

Destructor (empty)

66 {}

Member Function Documentation

◆ operator=()

void oomph::LineMeshBase::operator= ( const LineMeshBase )
delete

Broken assignment operator.

◆ setup_boundary_element_info() [1/2]

void oomph::LineMeshBase::setup_boundary_element_info ( )
inlinevirtual

Set up lookup schemes which establish which elements are located next to mesh's boundaries (wrapper to suppress doc)

Reimplemented from oomph::Mesh.

71  {
72  std::ofstream outfile;
74  }
void setup_boundary_element_info()
Definition: line_mesh.h:70

◆ setup_boundary_element_info() [2/2]

void oomph::LineMeshBase::setup_boundary_element_info ( std::ostream &  outfile)
virtual

Set up lookup schemes which establish which elements are located next to mesh's boundaries. Doc in outfile (if it's open).

Set up lookup schemes which establish which elements are located next to which boundaries (doc to outfile if it's open)

Reimplemented from oomph::Mesh.

37  {
38  // Initialise documentation flag
39  bool doc = false;
40 
41  // Set this to true if an open file has been passed to the function
42  if (outfile)
43  {
44  doc = true;
45  }
46 
47  // Determine number of boundaries in mesh
48  const unsigned n_bound = nboundary();
49 
50  // Wipe/allocate storage for arrays
51  Boundary_element_pt.clear();
52  Face_index_at_boundary.clear();
53  Boundary_element_pt.resize(n_bound);
54  Face_index_at_boundary.resize(n_bound);
55 
56  // Matrix map for working out the fixed local coord for elements on boundary
57  MapMatrixMixed<unsigned, FiniteElement*, Vector<int>*> boundary_identifier;
58 
59  // Determine number of elements in the mesh
60  const unsigned n_element = nelement();
61 
62  // Loop over elements
63  for (unsigned e = 0; e < n_element; e++)
64  {
65  // Get pointer to element
66  FiniteElement* fe_pt = finite_element_pt(e);
67 
68  // Output information to output file
69  if (doc)
70  {
71  outfile << "Element: " << e << " " << fe_pt << std::endl;
72  }
73 
74  // Only include 1D elements! Some meshes contain interface elements too.
75  if (fe_pt->dim() == 1)
76  {
77  // Loop over the element's nodes and find out which boundaries they're
78  // on
79  // ----------------------------------------------------------------------
80 
81  // Determine number of nodes in the element
82  const unsigned n_node = fe_pt->nnode_1d();
83 
84  // Loop over nodes in order
85  for (unsigned n = 0; n < n_node; n++)
86  {
87  // Allocate storage for pointer to set of boundaries that node lives
88  // on
89  std::set<unsigned>* boundaries_pt = 0;
90 
91  // Get pointer to vector of boundaries that this node lives on
92  fe_pt->node_pt(n)->get_boundaries_pt(boundaries_pt);
93 
94  // If the node lives on some boundaries....
95  if (boundaries_pt != 0)
96  {
97  // Determine number of boundaries which node lives on
98  const unsigned n_bound_node_lives_on = (*boundaries_pt).size();
99 
100  // Throw an error if the node lives on more than one boundary
101  if (n_bound_node_lives_on > 1)
102  {
103  std::string error_message =
104  "In a 1D mesh a node shouldn't be able to live on more than\n";
105  error_message += "one boundary, yet this node claims to.";
106 
107  throw OomphLibError(error_message,
110  }
111  // If the node lives on just one boundary
112  else if (n_bound_node_lives_on == 1)
113  {
114  // Determine which boundary the node lives on
115  const std::set<unsigned>::iterator boundary =
116  boundaries_pt->begin();
117 
118  // In 1D if an element has any nodes on a boundary then it must
119  // be a boundary element. This means that (unlike in the 2D and
120  // 3D cases) we can immediately add this element to permanent
121  // storage.
122  Boundary_element_pt[*boundary].push_back(fe_pt);
123 
124  // Record information required for FaceElements.
125  // `Face_index_at_boundary' = -/+1 for nodes on the left/right
126  // boundary. This allows us to decide which edge of the element
127  // coincides with the boundary since the line element must have
128  // precisely one vertex node on the boundary.
129 
130  // Are we at the left-hand vertex node? (left face)
131  if (n == 0)
132  {
133  Face_index_at_boundary[*boundary].push_back(-1);
134  }
135 
136  // Are we at the right-hand vertex node? (right face)
137  else if (n == n_node - 1)
138  {
139  Face_index_at_boundary[*boundary].push_back(1);
140  }
141  }
142  } // End of if node lives on some boundaries
143 
144  } // End of loop over nodes
145  }
146  } // End of loop over elements
147 
148 #ifdef PARANOID
149 
150  // Check each boundary only has precisely one element next to it
151  // -------------------------------------------------------------
152  // Only if not distributed
153 #ifdef OOMPH_HAS_MPI
154  if (Comm_pt == 0)
155 #endif
156  {
157  // Loop over boundaries
158  for (unsigned b = 0; b < n_bound; b++)
159  {
160  // Evaluate number of elements adjacent to boundary b
161  const unsigned n_element = Boundary_element_pt[b].size();
162 
163  switch (n_element)
164  {
165  // Boundary b has no adjacent elements
166  case 0:
167  {
168  std::ostringstream error_stream;
169  error_stream << "Boundary " << b
170  << " has no element adjacent to it\n";
171  throw OomphLibError(error_stream.str(),
174  break;
175  }
176  // Boundary b has one adjacent element (this is good!)
177  case 1:
178  break;
179 
180  // Boundary b has more than one adjacent element
181  default:
182  {
183  std::ostringstream error_stream;
184  error_stream << "Boundary " << b << " has " << n_element
185  << " elements adjacent to it.\n"
186  << "This shouldn't occur in a 1D mesh.\n";
187  throw OomphLibError(error_stream.str(),
190  break;
191  }
192  } // End of switch
193 
194  // Because each boundary should only have one element adjacent to it,
195  // each `Face_index_at_boundary[b]' should be of size one.
196 
197  const unsigned face_index_at_boundary_size =
198  Face_index_at_boundary[b].size();
199 
200  if (face_index_at_boundary_size != 1)
201  {
202  std::ostringstream error_stream;
203  error_stream
204  << "Face_index_at_boundary[" << b << "] has size"
205  << face_index_at_boundary_size << " which does not make sense.\n"
206  << "In a 1D mesh its size should always be one since only\n"
207  << "one element can be adjacent to any particular boundary";
208  throw OomphLibError(error_stream.str(),
211  }
212  } // End of loop over boundaries
213  }
214 #endif
215 
216  // Doc?
217  // ----
218  if (doc)
219  {
220  // Loop over boundaries
221  for (unsigned b = 0; b < n_bound; b++)
222  {
223  const unsigned n_element = Boundary_element_pt[b].size();
224  outfile << "Boundary: " << b << " is adjacent to " << n_element
225  << " elements" << std::endl;
226 
227  // Loop over elements on given boundary
228  for (unsigned e = 0; e < n_element; e++)
229  {
230  FiniteElement* fe_pt = Boundary_element_pt[b][e];
231  outfile << "Boundary element:" << fe_pt
232  << " Face index on boundary is "
233  << Face_index_at_boundary[b][e] << std::endl;
234  }
235  }
236  } // End of if(doc)
237 
238 
239  // Lookup scheme has now been set up
241 
242  } // End of setup_boundary_element_info()
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Array< double, 1, 3 > e(1./3., 0.5, 2.)
Scalar * b
Definition: benchVecAdd.cpp:17
Vector< Vector< FiniteElement * > > Boundary_element_pt
Definition: mesh.h:91
bool Lookup_for_elements_next_boundary_is_setup
Definition: mesh.h:87
FiniteElement * finite_element_pt(const unsigned &e) const
Definition: mesh.h:473
Vector< Vector< int > > Face_index_at_boundary
Definition: mesh.h:95
unsigned nboundary() const
Return number of boundaries.
Definition: mesh.h:827
unsigned long nelement() const
Return number of elements in the mesh.
Definition: mesh.h:590
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References b, oomph::Mesh::Boundary_element_pt, oomph::FiniteElement::dim(), e(), oomph::Mesh::Face_index_at_boundary, oomph::Mesh::finite_element_pt(), oomph::Node::get_boundaries_pt(), oomph::Mesh::Lookup_for_elements_next_boundary_is_setup, n, oomph::Mesh::nboundary(), oomph::Mesh::nelement(), oomph::FiniteElement::nnode_1d(), oomph::FiniteElement::node_pt(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and oomph::Global_string_for_annotation::string().


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