oomph::AlgebraicCollapsibleChannelMesh< ELEMENT > Class Template Reference

Collapsible channel mesh with algebraic node update. More...

#include <collapsible_channel_mesh.template.h>

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

Public Member Functions

 AlgebraicCollapsibleChannelMesh (const unsigned &nup, const unsigned &ncollapsible, const unsigned &ndown, const unsigned &ny, const double &lup, const double &lcollapsible, const double &ldown, const double &ly, GeomObject *wall_pt, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
virtual ~AlgebraicCollapsibleChannelMesh ()
 Destructor: empty. More...
 
 AlgebraicCollapsibleChannelMesh (const unsigned &nup, const unsigned &ncollapsible, const unsigned &ndown, const unsigned &ny, const double &lup, const double &lcollapsible, const double &ldown, const double &ly, GeomObject *wall_pt, CollapsibleChannelDomain::BLSquashFctPt bl_squash_function_pt, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
CollapsibleChannelDomain::BLSquashFctPtbl_squash_fct_pt ()
 
CollapsibleChannelDomain::BLSquashFctPtaxial_spacing_fct_pt ()
 
void algebraic_node_update (const unsigned &t, AlgebraicNode *&node_pt)
 
void update_node_update (AlgebraicNode *&node_pt)
 
- Public Member Functions inherited from oomph::CollapsibleChannelMesh< ELEMENT >
 CollapsibleChannelMesh (const unsigned &nup, const unsigned &ncollapsible, const unsigned &ndown, const unsigned &ny, const double &lup, const double &lcollapsible, const double &ldown, const double &ly, GeomObject *wall_pt, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
 ~CollapsibleChannelMesh ()
 destructor More...
 
GeomObject *& wall_pt ()
 Access function to GeomObject representing wall. More...
 
CollapsibleChannelDomaindomain_pt ()
 Access function to domain. More...
 
CollapsibleChannelDomain::BLSquashFctPt bl_squash_fct_pt () const
 
virtual CollapsibleChannelDomain::AxialSpacingFctPtaxial_spacing_fct_pt () const
 
- Public Member Functions inherited from oomph::SimpleRectangularQuadMesh< ELEMENT >
 SimpleRectangularQuadMesh (const unsigned &Nx, const unsigned &Ny, const double &Lx, const double &Ly, TimeStepper *time_stepper_pt=&Mesh::Default_TimeStepper)
 
const unsignednx () const
 Access function for number of elements in x directions. More...
 
const unsignedny () const
 Access function for number of elements in y directions. More...
 
- 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)
 
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...
 
- Public Member Functions inherited from oomph::AlgebraicMesh
 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...
 
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...
 

Protected Member Functions

void setup_algebraic_node_update ()
 Function to setup the algebraic node update. 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

CollapsibleChannelDomain::BLSquashFctPt Dummy_fct_pt
 Dummy function pointer. More...
 
- Protected Attributes inherited from oomph::CollapsibleChannelMesh< ELEMENT >
CollapsibleChannelDomainDomain_pt
 Pointer to domain. More...
 
unsigned Nup
 Number of element columns in upstream part. More...
 
unsigned Ncollapsible
 Number of element columns in collapsible part. More...
 
unsigned Ndown
 Number of element columns in downstream part. More...
 
unsigned Ny
 Number of element rows across channel. More...
 
GeomObjectWall_pt
 Pointer to geometric object that represents the moving wall. More...
 
- 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
 

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

Detailed Description

template<class ELEMENT>
class oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >

Collapsible channel mesh with algebraic node update.

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

Constructor & Destructor Documentation

◆ AlgebraicCollapsibleChannelMesh() [1/2]

template<class ELEMENT >
oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::AlgebraicCollapsibleChannelMesh ( const unsigned nup,
const unsigned ncollapsible,
const unsigned ndown,
const unsigned ny,
const double lup,
const double lcollapsible,
const double ldown,
const double ly,
GeomObject wall_pt,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper 
)
inline

Constructor: Pass number of elements in upstream/collapsible/ downstream segment and across the channel; lengths of upstream/ collapsible/downstream segments and width of channel, pointer to GeomObject that defines the collapsible segment and pointer to TimeStepper (defaults to the default timestepper, Steady).

447  : CollapsibleChannelMesh<ELEMENT>(nup,
448  ncollapsible,
449  ndown,
450  ny,
451  lup,
452  lcollapsible,
453  ldown,
454  ly,
455  wall_pt,
456  time_stepper_pt)
457  {
458  // Add the geometric object to the list associated with this AlgebraicMesh
460 
461  // Setup algebraic node update operations
463  }
void setup_algebraic_node_update()
Function to setup the algebraic node update.
Definition: collapsible_channel_mesh.template.cc:324
void add_geom_object_list_pt(GeomObject *geom_object_pt)
Definition: algebraic_elements.h:823
GeomObject *& wall_pt()
Access function to GeomObject representing wall.
Definition: collapsible_channel_mesh.template.h:91
const unsigned & ny() const
Access function for number of elements in y directions.
Definition: simple_rectangular_quadmesh.template.h:77
const double ly
Definition: ConstraintElementsUnitTest.cpp:34

References oomph::AlgebraicMesh::add_geom_object_list_pt(), oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::setup_algebraic_node_update(), and oomph::CollapsibleChannelMesh< ELEMENT >::wall_pt().

◆ ~AlgebraicCollapsibleChannelMesh()

template<class ELEMENT >
virtual oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::~AlgebraicCollapsibleChannelMesh ( )
inlinevirtual

Destructor: empty.

466 {}

◆ AlgebraicCollapsibleChannelMesh() [2/2]

template<class ELEMENT >
oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::AlgebraicCollapsibleChannelMesh ( const unsigned nup,
const unsigned ncollapsible,
const unsigned ndown,
const unsigned ny,
const double lup,
const double lcollapsible,
const double ldown,
const double ly,
GeomObject wall_pt,
CollapsibleChannelDomain::BLSquashFctPt  bl_squash_function_pt,
TimeStepper time_stepper_pt = &Mesh::Default_TimeStepper 
)
inline

Constructor: Pass number of elements in upstream/collapsible/ downstream segment and across the channel; lengths of upstream/ collapsible/downstream segments and width of channel, pointer to GeomObject that defines the collapsible segment and pointer to TimeStepper (defaults to the default timestepper, Steady).

486  : CollapsibleChannelMesh<ELEMENT>(nup,
487  ncollapsible,
488  ndown,
489  ny,
490  lup,
491  lcollapsible,
492  ldown,
493  ly,
494  wall_pt,
495  time_stepper_pt)
496  {
497  // Add the geometric object to the list associated with this AlgebraicMesh
499 
500  // Set boundary layer squash function
501  this->Domain_pt->bl_squash_fct_pt() = bl_squash_function_pt;
502 
503  // Do MacroElement-based node update
505 
506  // Setup algebraic node update operations
508  }
BLSquashFctPt & bl_squash_fct_pt()
Definition: collapsible_channel_domain.h:165
CollapsibleChannelDomain * Domain_pt
Pointer to domain.
Definition: collapsible_channel_mesh.template.h:147
virtual void node_update(const bool &update_all_solid_nodes=false)
Definition: mesh.cc:287

References oomph::AlgebraicMesh::add_geom_object_list_pt(), oomph::CollapsibleChannelDomain::bl_squash_fct_pt(), oomph::CollapsibleChannelMesh< ELEMENT >::Domain_pt, oomph::Mesh::node_update(), oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::setup_algebraic_node_update(), and oomph::CollapsibleChannelMesh< ELEMENT >::wall_pt().

Member Function Documentation

◆ algebraic_node_update()

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

Update nodal position at time level t (t=0: present; t>0: previous)

//////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////////////////// Perform algebraic mesh update at time level t (t=0: present; t>0: previous)

Implements oomph::AlgebraicMesh.

244  {
245 #ifdef PARANOID
246  // We're updating the nodal positions (!) at time level t
247  // and determine them by evaluating the wall GeomObject's
248  // position at that gime level. I believe this only makes sense
249  // if the t-th history value in the positional timestepper
250  // actually represents previous values (rather than some
251  // generalised quantity). Hence if this function is called with
252  // t>nprev_values(), we issue a warning and terminate the execution.
253  // It *might* be possible that the code still works correctly
254  // even if this condition is violated (e.g. if the GeomObject's
255  // position() function returns the appropriate "generalised"
256  // position value that is required by the timestepping scheme but it's
257  // probably worth flagging this up and forcing the user to manually switch
258  // off this warning if he/she is 100% sure that this is kosher.
260  {
261  std::string error_message =
262  "Trying to update the nodal position at a time level";
263  error_message += "beyond the number of previous values in the nodes'";
264  error_message += "position timestepper. This seems highly suspect!";
265  error_message += "If you're sure the code behaves correctly";
266  error_message += "in your application, remove this warning ";
267  error_message += "or recompile with PARNOID switched off.";
268 
269  std::string function_name = "AlgebraicCollapsibleChannelMesh::";
270  function_name += "algebraic_node_update()";
271 
272  throw OomphLibError(
274  }
275 #endif
276 
277  // Extract references for update by copy construction
278  Vector<double> ref_value(node_pt->vector_ref_value());
279 
280  // First reference value: Original x-position. Used as the start point
281  // for the lines connecting the nodes in the vertical direction
282  double x_bottom = ref_value[0];
283 
284  // Second reference value: Fractional position along
285  // straight line from the bottom (at the original x position)
286  // to the reference point on the upper wall
287  double fract = ref_value[1];
288 
289  // Third reference value: Reference local coordinate
290  // in GeomObject that represents the upper wall (local coordinate
291  // in finite element if the wall GeomObject is a finite element mesh)
292  Vector<double> s(1);
293  s[0] = ref_value[2];
294 
295  // Fourth reference value: zeta coordinate on the upper wall
296  // If the wall is a simple GeomObject, zeta[0]=s[0]
297  // but if it's a compound GeomObject (e.g. a finite element mesh)
298  // zeta scales during mesh refinement, whereas s[0] and the
299  // pointer to the geom object have to be re-computed.
300  // double zeta=ref_value[3]; // not needed here
301 
302  // Extract geometric objects for update by copy construction
303  Vector<GeomObject*> geom_object_pt(node_pt->vector_geom_object_pt());
304 
305  // Pointer to actual wall geom object (either the same as the wall object
306  // or the pointer to the actual finite element)
307  GeomObject* geom_obj_pt = geom_object_pt[0];
308 
309  // Get position vector to wall at previous timestep t!
310  Vector<double> r_wall(2);
311  geom_obj_pt->position(t, s, r_wall);
312 
313  // Assign new nodal coordinate
314  node_pt->x(t, 0) = x_bottom + fract * (r_wall[0] - x_bottom);
315  node_pt->x(t, 1) = fract * r_wall[1];
316  }
AlgebraicNode * node_pt(const unsigned long &n)
Return a pointer to the n-th global AlgebraicNode.
Definition: algebraic_elements.h:620
Vector< GeomObject * > & vector_geom_object_pt(const int &id)
Definition: algebraic_elements.h:200
Vector< double > & vector_ref_value()
Definition: algebraic_elements.h:251
double & x(const unsigned &i)
Return the i-th nodal coordinate.
Definition: nodes.h:1060
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
Definition: nodes.h:1022
virtual unsigned nprev_values() const =0
Number of previous values available: 0 for static, 1 for BDF<1>,...
RealScalar s
Definition: level1_cplx_impl.h:130
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
t
Definition: plotPSD.py:36
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References oomph::TimeStepper::nprev_values(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::GeomObject::position(), oomph::Node::position_time_stepper_pt(), s, oomph::Global_string_for_annotation::string(), plotPSD::t, oomph::AlgebraicNode::vector_geom_object_pt(), oomph::AlgebraicNode::vector_ref_value(), and oomph::Node::x().

◆ axial_spacing_fct_pt()

template<class ELEMENT >
CollapsibleChannelDomain::BLSquashFctPt& oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::axial_spacing_fct_pt ( )
inlinevirtual

Function pointer for function that redistributes nodes axially. Default trivial mapping (the identity) leaves vertical nodal positions unchanged. Mapping is used in underlying CollapsibleChannelDomain. Broken function that overloads the version in the CollapsibleChannelMesh. It does not make sense to specify the function pointer after the mesh has been set up!

Reimplemented from oomph::CollapsibleChannelMesh< ELEMENT >.

543  {
544  std::ostringstream error_message;
545  error_message
546  << "It does not make sense to set the axial_spacing_fct_pt \n"
547  << "outside the constructor as it's only used to set up the \n"
548  << "algebraic remesh data when the algebraic mesh is first built. \n";
549  std::string function_name =
550  "AlgebraicCollapsibleChannelMesh::axial_spacing_fct_pt()\n";
551 
552  throw OomphLibError(
553  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
554 
555  // Dummy return
556  return Dummy_fct_pt;
557  }
CollapsibleChannelDomain::BLSquashFctPt Dummy_fct_pt
Dummy function pointer.
Definition: collapsible_channel_mesh.template.h:574

References oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::Dummy_fct_pt, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and oomph::Global_string_for_annotation::string().

◆ bl_squash_fct_pt()

template<class ELEMENT >
CollapsibleChannelDomain::BLSquashFctPt& oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::bl_squash_fct_pt ( )
inlinevirtual

Function pointer for function that squashes the mesh near the walls. Default trivial mapping (the identity) leaves vertical nodal positions unchanged. Mapping is used in underlying CollapsibleChannelDomain. Broken function that overloads the version in the CollapsibleChannelMesh. It does not make sense to specify the function pointer after the mesh has been set up!

Reimplemented from oomph::CollapsibleChannelMesh< ELEMENT >.

518  {
519  std::ostringstream error_message;
520  error_message
521  << "It does not make sense to set the bl_squash_fct_pt \n"
522  << "outside the constructor as it's only used to set up the \n"
523  << "algebraic remesh data when the algebraic mesh is first built. \n";
524  std::string function_name =
525  "AlgebraicCollapsibleChannelMesh::bl_squash_fct_pt()\n";
526 
527  throw OomphLibError(
528  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
529 
530  // Dummy return
531  return Dummy_fct_pt;
532  }

References oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::Dummy_fct_pt, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and oomph::Global_string_for_annotation::string().

◆ setup_algebraic_node_update()

template<class ELEMENT >
void oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::setup_algebraic_node_update
protected

Function to setup the algebraic node update.

Setup algebraic mesh update – assumes that mesh has initially been set up with a flush upper wall

325  {
326  // Shorthand for some geometric data:
327  double l_up = this->domain_pt()->l_up();
328  double l_collapsible = this->domain_pt()->l_collapsible();
329 
330  // Loop over all nodes in mesh
331  unsigned nnod = this->nnode();
332  for (unsigned j = 0; j < nnod; j++)
333  {
334  // Get pointer to node -- recall that that Mesh::node_pt(...) has been
335  // overloaded in the AlgebraicMesh class to return a pointer to
336  // an AlgebraicNode.
337  AlgebraicNode* nod_pt = node_pt(j);
338 
339  // Get coordinates
340  double x = nod_pt->x(0);
341  double y = nod_pt->x(1);
342 
343  // Check if it's in the collapsible part:
344  if ((x >= l_up) && (x <= (l_up + l_collapsible)))
345  {
346  // Get zeta coordinate on the undeformed wall
347  Vector<double> zeta(1);
348  zeta[0] = x - l_up;
349 
350  // Get pointer to geometric (sub-)object and Lagrangian coordinate
351  // on that sub-object. For a wall that is represented by
352  // a single geom object, this simply returns the input.
353  // If the geom object consists of sub-objects (e.g.
354  // if it is a finite element mesh representing a wall,
355  // then we'll obtain the pointer to the finite element
356  // (in its incarnation as a GeomObject) and the
357  // local coordinate in that element.
358  GeomObject* geom_obj_pt;
359  Vector<double> s(1);
360  this->Wall_pt->locate_zeta(zeta, geom_obj_pt, s);
361 
362  // Get position vector to wall:
363  Vector<double> r_wall(2);
364  geom_obj_pt->position(s, r_wall);
365 
366  // Sanity check: Confirm that the wall is in its undeformed position
367 #ifdef PARANOID
368  if ((std::fabs(r_wall[0] - x) > 1.0e-15) &&
369  (std::fabs(r_wall[1] - y) > 1.0e-15))
370  {
371  std::ostringstream error_stream;
372  error_stream << "Wall must be in its undeformed position when\n"
373  << "algebraic node update information is set up!\n "
374  << "x-discrepancy: " << std::fabs(r_wall[0] - x)
375  << std::endl
376  << "y-discrepancy: " << std::fabs(r_wall[1] - y)
377  << std::endl;
378 
379  throw OomphLibError(error_stream.str(),
382  }
383 #endif
384 
385 
386  // One geometric object is involved in update operation
387  Vector<GeomObject*> geom_object_pt(1);
388 
389  // The actual geometric object (If the wall is simple GeomObject
390  // this is the same as Wall_pt; if it's a compound GeomObject
391  // this points to the sub-object)
392  geom_object_pt[0] = geom_obj_pt;
393 
394  // The update function requires four parameters:
395  Vector<double> ref_value(4);
396 
397  // First reference value: Original x-position
398  ref_value[0] = r_wall[0];
399 
400  // Second reference value: fractional position along
401  // straight line from the bottom (at the original x position)
402  // to the point on the wall)
403  ref_value[1] = y / r_wall[1];
404 
405  // Third reference value: Reference local coordinate
406  // in wall element (local coordinate in FE if we're dealing
407  // with a wall mesh)
408  ref_value[2] = s[0];
409 
410  // Fourth reference value: zeta coordinate on wall
411  // If the wall is a simple GeomObject, zeta[0]=s[0]
412  // but if it's a compound GeomObject (e.g. a finite element mesh)
413  // zeta scales during mesh refinement, whereas s[0] and the
414  // pointer to the geom object have to be re-computed.
415  ref_value[3] = zeta[0];
416 
417  // Setup algebraic update for node: Pass update information
418  nod_pt->add_node_update_info(this, // mesh
419  geom_object_pt, // vector of geom objects
420  ref_value); // vector of ref. values
421  }
422  }
423 
424  } // end of setup_algebraic_node_update
double l_collapsible()
Length of collapsible segment.
Definition: collapsible_channel_domain.h:117
double l_up()
Length of upstream section.
Definition: collapsible_channel_domain.h:111
GeomObject * Wall_pt
Pointer to geometric object that represents the moving wall.
Definition: collapsible_channel_mesh.template.h:162
CollapsibleChannelDomain * domain_pt()
Access function to domain.
Definition: collapsible_channel_mesh.template.h:97
virtual void locate_zeta(const Vector< double > &zeta, GeomObject *&sub_geom_object_pt, Vector< double > &s, const bool &use_coordinate_as_initial_guess=false)
Definition: geom_objects.h:381
unsigned long nnode() const
Return number of nodes in the mesh.
Definition: mesh.h:596
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
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 oomph::AlgebraicNode::add_node_update_info(), boost::multiprecision::fabs(), j, OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, oomph::GeomObject::position(), s, plotDoE::x, oomph::Node::x(), y, and Eigen::zeta().

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

◆ update_node_update()

template<class ELEMENT >
void oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::update_node_update ( AlgebraicNode *&  node_pt)
inlinevirtual

Update the node-udate data after mesh adaptation. Empty – no update of node update required as this is non-refineable mesh.

Implements oomph::AlgebraicMesh.

Reimplemented in oomph::RefineableAlgebraicCollapsibleChannelMesh< ELEMENT >.

567 {}

Member Data Documentation

◆ Dummy_fct_pt


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