oomph::AlgebraicMesh Class Referenceabstract

#include <algebraic_elements.h>

+ Inheritance diagram for oomph::AlgebraicMesh:

Public Member Functions

 AlgebraicMesh ()
 
 AlgebraicMesh (const AlgebraicMesh &)=delete
 Broken copy constructor. More...
 
 ~AlgebraicMesh ()
 Broken assignment operator. More...
 
AlgebraicNodenode_pt (const unsigned long &n)
 Return a pointer to the n-th global AlgebraicNode. More...
 
virtual void algebraic_node_update (const unsigned &t, AlgebraicNode *&node_pt)=0
 
virtual void update_node_update (AlgebraicNode *&node_pt)=0
 
void node_update (const bool &update_all_solid_nodes=false)
 
unsigned self_test ()
 Self test: check consistentency of multiple node updates. More...
 
void add_geom_object_list_pt (GeomObject *geom_object_pt)
 
unsigned ngeom_object_list_pt ()
 Return number of geometric objects associated with AlgebraicMesh. More...
 
GeomObjectgeom_object_list_pt (const unsigned &i)
 Access function to the ith GeomObject. More...
 
- 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 setup_boundary_element_info ()
 
virtual void setup_boundary_element_info (std::ostream &outfile)
 
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 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...
 

Private Attributes

Vector< GeomObject * > Geom_object_list_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...
 
- 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

//////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////// Algebraic meshes contain AlgebraicElements and AlgebraicNodes. They implement the node update functions that are used by the AlgebraicNodes to update their positions.

Constructor & Destructor Documentation

◆ AlgebraicMesh() [1/2]

oomph::AlgebraicMesh::AlgebraicMesh ( )
inline

Constructor: create a null zeroth entry in the Geom_object_list_pt Vector (each AlgebraicMesh's constructor should add any other geometric objects to this list)

605  {
607  }
void add_geom_object_list_pt(GeomObject *geom_object_pt)
Definition: algebraic_elements.h:823

References add_geom_object_list_pt().

◆ AlgebraicMesh() [2/2]

oomph::AlgebraicMesh::AlgebraicMesh ( const AlgebraicMesh )
delete

Broken copy constructor.

◆ ~AlgebraicMesh()

oomph::AlgebraicMesh::~AlgebraicMesh ( )
inline

Broken assignment operator.

Surely a proper destructor is required... ?

616 {}

Member Function Documentation

◆ add_geom_object_list_pt()

◆ algebraic_node_update()

◆ geom_object_list_pt()

GeomObject* oomph::AlgebraicMesh::geom_object_list_pt ( const unsigned i)
inline

Access function to the ith GeomObject.

836  {
837  // Probably should be a range check in here...
838  return Geom_object_list_pt[i];
839  }
int i
Definition: BiCGSTAB_step_by_step.cpp:9

References Geom_object_list_pt, and i.

◆ ngeom_object_list_pt()

unsigned oomph::AlgebraicMesh::ngeom_object_list_pt ( )
inline

Return number of geometric objects associated with AlgebraicMesh.

830  {
831  return Geom_object_list_pt.size();
832  }

References Geom_object_list_pt.

◆ node_pt()

AlgebraicNode* oomph::AlgebraicMesh::node_pt ( const unsigned long &  n)
inline

Return a pointer to the n-th global AlgebraicNode.

621  {
622 #ifdef PARANOID
623  if (!dynamic_cast<AlgebraicNode*>(Node_pt[n]))
624  {
625  std::ostringstream error_stream;
626  error_stream << "Error: Node " << n << "is a "
627  << typeid(Node_pt[n]).name() << ", not an AlgebraicNode"
628  << std::endl;
629  throw OomphLibError(
630  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
631  }
632 #endif
633  // Return a cast to the Node_pt
634  return (dynamic_cast<AlgebraicNode*>(Node_pt[n]));
635  }
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
Vector< Node * > Node_pt
Vector of pointers to nodes.
Definition: mesh.h:183
string name
Definition: plotDoE.py:33
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References n, plotDoE::name, oomph::Mesh::Node_pt, OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

Referenced by oomph::AlgebraicFishMesh< ELEMENT >::algebraic_node_update(), oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >::algebraic_node_update(), oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::algebraic_node_update(), node_update(), self_test(), TurekProblem< FLUID_ELEMENT, SOLID_ELEMENT >::TurekProblem(), oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >::update_node_update(), and oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::update_node_update().

◆ node_update()

void oomph::AlgebraicMesh::node_update ( const bool update_all_solid_nodes = false)
inlinevirtual

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

Reimplemented from oomph::Mesh.

Reimplemented in oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >, oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >, oomph::AlgebraicRefineableQuarterCircleSectorMesh< FLUID_ELEMENT >, oomph::AlgebraicRefineableFishMesh< ELEMENT >, and oomph::AlgebraicFishMesh< ELEMENT >.

654  {
655 #ifdef PARANOID
656  if (update_all_solid_nodes)
657  {
658  std::string error_message =
659  "Doesn't make sense to use an AlgebraicMesh with\n";
660  error_message +=
661  "SolidElements so specifying update_all_solid_nodes=true\n";
662  error_message += "doesn't make sense either\n";
663 
664  throw OomphLibError(
666  }
667 #endif
668  // Initial loop over ALL nodes to setup (need to place at least
669  // all master nodes before we can update the position of the
670  // hanging ones)
671  AlgebraicNode* alg_nod_pt = 0;
672  unsigned n_node = nnode();
673 
674  // In parallel there may be no nodes on a particular process
675  if (n_node > 0)
676  {
677  for (unsigned n = 0; n < n_node; n++)
678  {
679  alg_nod_pt = static_cast<AlgebraicNode*>(node_pt(n));
680  alg_nod_pt->node_update();
681  }
682 
683  // Figure out spatial dimension of node
684  unsigned n_dim = alg_nod_pt->ndim();
685 
686  // Now loop over hanging nodes and adjust their nodal positions
687  // to reflect the hanging node constraints
688  for (unsigned n = 0; n < n_node; n++)
689  {
690  Node* nod_pt = node_pt(n);
691  if (nod_pt->is_hanging())
692  {
693  // Initialise
694  Vector<double> x(n_dim);
695  for (unsigned i = 0; i < n_dim; i++)
696  {
697  x[i] = 0.0;
698  }
699 
700  // Loop over master nodes
701  unsigned nmaster = nod_pt->hanging_pt()->nmaster();
702  for (unsigned imaster = 0; imaster < nmaster; imaster++)
703  {
704  // Loop over directions
705  for (unsigned i = 0; i < n_dim; i++)
706  {
707  x[i] += nod_pt->hanging_pt()->master_node_pt(imaster)->x(i) *
708  nod_pt->hanging_pt()->master_weight(imaster);
709  }
710  }
711 
712  // Copy across
713  for (unsigned i = 0; i < n_dim; i++)
714  {
715  nod_pt->x(i) = x[i];
716  }
717  nod_pt->perform_auxiliary_node_update_fct();
718  }
719  }
720  } // end if (n_node>0)
721 
722 #ifdef OOMPH_HAS_MPI
723  // Update positions for external halo nodes attached to this mesh
724  // Loop over processors
725  for (std::map<unsigned, Vector<Node*>>::iterator it =
726  External_halo_node_pt.begin();
727  it != External_halo_node_pt.end();
728  it++)
729  {
730  int iproc = (*it).first;
731  AlgebraicNode* alg_nod_pt = 0;
732  unsigned n_ext_halo_node = nexternal_halo_node(iproc);
733  // Only act if there are any external halo nodes
734  if (n_ext_halo_node > 0)
735  {
736  for (unsigned n = 0; n < n_ext_halo_node; n++)
737  {
738  alg_nod_pt =
739  static_cast<AlgebraicNode*>(external_halo_node_pt(iproc, n));
740  alg_nod_pt->node_update();
741  }
742 
743  // Figure out spatial dimension of node
744  unsigned n_dim = alg_nod_pt->ndim();
745 
746  // Now loop over hanging nodes and adjust their nodal positions
747  // to reflect the hanging node constraints
748  for (unsigned n = 0; n < n_ext_halo_node; n++)
749  {
750  Node* nod_pt = external_halo_node_pt(iproc, n);
751  if (nod_pt->is_hanging())
752  {
753  // Initialise
754  Vector<double> x(n_dim);
755  for (unsigned i = 0; i < n_dim; i++)
756  {
757  x[i] = 0.0;
758  }
759 
760  // Loop over master nodes
761  unsigned nmaster = nod_pt->hanging_pt()->nmaster();
762  for (unsigned imaster = 0; imaster < nmaster; imaster++)
763  {
764  // Loop over directions
765  for (unsigned i = 0; i < n_dim; i++)
766  {
767  x[i] += nod_pt->hanging_pt()->master_node_pt(imaster)->x(i) *
768  nod_pt->hanging_pt()->master_weight(imaster);
769  }
770  }
771 
772  // Copy across
773  for (unsigned i = 0; i < n_dim; i++)
774  {
775  nod_pt->x(i) = x[i];
776  }
777  }
778  }
779  }
780 
781  } // end loop over processors
782 #endif
783  }
AlgebraicNode * node_pt(const unsigned long &n)
Return a pointer to the n-th global AlgebraicNode.
Definition: algebraic_elements.h:620
unsigned long nnode() const
Return number of nodes in the mesh.
Definition: mesh.h:596
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
list x
Definition: plotDoE.py:28

References oomph::Node::hanging_pt(), i, oomph::Node::is_hanging(), oomph::HangInfo::master_node_pt(), oomph::HangInfo::master_weight(), n, oomph::Node::ndim(), oomph::HangInfo::nmaster(), oomph::Mesh::nnode(), node_pt(), oomph::AlgebraicNode::node_update(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::Node::perform_auxiliary_node_update_fct(), oomph::Global_string_for_annotation::string(), plotDoE::x, and oomph::Node::x().

Referenced by oomph::AlgebraicFishMesh< ELEMENT >::node_update(), oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >::node_update(), and oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update().

◆ self_test()

unsigned oomph::AlgebraicMesh::self_test ( )
inline

Self test: check consistentency of multiple node updates.

787  {
788  // Initialise
789  bool passed = true;
790 
791  unsigned test = Mesh::self_test();
792  if (test != 0)
793  {
794  passed = false;
795  }
796 
797  // Loop over nodes
798  unsigned n_node = nnode();
799  for (unsigned n = 0; n < n_node; n++)
800  {
801  if (static_cast<AlgebraicNode*>(node_pt(n))->self_test() != 0)
802  {
803  passed = false;
804  }
805  }
806 
807  oomph_info << "Done algnode selftest in mesh" << std::endl;
808 
809  // Return verdict
810  if (passed)
811  {
812  return 0;
813  }
814  else
815  {
816  return 1;
817  }
818  }
unsigned self_test()
Self test: check consistentency of multiple node updates.
Definition: algebraic_elements.h:786
unsigned self_test()
Self-test: Check elements and nodes. Return 0 for OK.
Definition: mesh.cc:778
OomphInfo oomph_info
Definition: oomph_definitions.cc:319
Definition: indexed_view.cpp:20

References n, oomph::Mesh::nnode(), node_pt(), oomph::oomph_info, and oomph::Mesh::self_test().

Referenced by oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >::self_test(), and oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::self_test().

◆ update_node_update()

Member Data Documentation

◆ Geom_object_list_pt

Vector<GeomObject*> oomph::AlgebraicMesh::Geom_object_list_pt
private

Vector of GeomObjects associated with this AlgebraicMesh The zeroth entry is null, proper entries from the 1st index onwards...

Referenced by add_geom_object_list_pt(), geom_object_list_pt(), and ngeom_object_list_pt().


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