oomph::Node Class Reference

#include <nodes.h>

+ Inheritance diagram for oomph::Node:

Public Types

typedef void(* AuxNodeUpdateFctPt) (Node *)
 Function pointer to auxiliary node update function. More...
 

Public Member Functions

 Node ()
 Default constructor. More...
 
 Node (const unsigned &n_dim, const unsigned &n_position_type, const unsigned &initial_n_value, const bool &allocate_x_position=true)
 
 Node (TimeStepper *const &time_stepper_pt, const unsigned &n_dim, const unsigned &n_position_type, const unsigned &initial_n_value, const bool &allocate_x_position=true)
 
virtual ~Node ()
 Destructor: Clean up the memory allocated for nodal position. More...
 
 Node (const Node &node)=delete
 Broken copy constructor. More...
 
void operator= (const Node &)=delete
 Broken assignment operator. More...
 
unsigned nposition_type () const
 
TimeStepper *& position_time_stepper_pt ()
 Return a pointer to the position timestepper. More...
 
TimeStepper *const & position_time_stepper_pt () const
 Return a pointer to the position timestepper (const version). More...
 
virtual void set_position_time_stepper (TimeStepper *const &position_time_stepper_pt, const bool &preserve_existing_data)
 
virtual bool does_pointer_correspond_to_position_data (double *const &parameter_pt)
 
virtual void assign_eqn_numbers (unsigned long &global_ndof, Vector< double * > &dof_pt)
 
unsigned ndim () const
 Return (Eulerian) spatial dimension of the node. More...
 
doublex (const unsigned &i)
 Return the i-th nodal coordinate. More...
 
const doublex (const unsigned &i) const
 Return the i-th nodal coordinate (const version). More...
 
doublex (const unsigned &t, const unsigned &i)
 
const doublex (const unsigned &t, const unsigned &i) const
 
double dx_dt (const unsigned &i) const
 Return the i-th component of nodal velocity: dx/dt. More...
 
double dx_dt (const unsigned &j, const unsigned &i) const
 
virtual Nodecopied_node_pt () const
 
virtual bool position_is_a_copy () const
 Return whether any position coordinate has been copied (always false) More...
 
virtual bool position_is_a_copy (const unsigned &i) const
 Return whether the position coordinate i has been copied (always false) More...
 
doublex_gen (const unsigned &k, const unsigned &i)
 
const doublex_gen (const unsigned &k, const unsigned &i) const
 
doublex_gen (const unsigned &t, const unsigned &k, const unsigned &i)
 
const doublex_gen (const unsigned &t, const unsigned &k, const unsigned &i) const
 
double dx_gen_dt (const unsigned &k, const unsigned &i) const
 
double dx_gen_dt (const unsigned &j, const unsigned &k, const unsigned &i) const
 
doublex_pt (const unsigned &t, const unsigned &i)
 
void copy (Node *orig_node_pt)
 Copy all nodal data from specified Node object. More...
 
virtual void dump (std::ostream &dump_file) const
 Dump nodal position and associated data to file for restart. More...
 
void read (std::ifstream &restart_file)
 Read nodal position and associated data from file for restart. More...
 
virtual void pin_all ()
 
virtual void unpin_all ()
 
unsigned hang_code ()
 
HangInfo *const & hanging_pt () const
 
HangInfo *const & hanging_pt (const int &i) const
 Return pointer to hanging node data for value i (const version) More...
 
bool is_hanging () const
 Test whether the node is geometrically hanging. More...
 
bool is_hanging (const int &i) const
 Test whether the i-th value is hanging. More...
 
void set_hanging_pt (HangInfo *const &hang_pt, const int &i)
 Set the hanging data for the i-th value. (hang_pt=0 to make non-hanging) More...
 
void set_nonhanging ()
 Label node as non-hanging node by removing all hanging node data. More...
 
void resize (const unsigned &n_value)
 Resize the number of equations. More...
 
virtual void constrain_positions ()
 
virtual void unconstrain_positions ()
 
virtual void make_periodic (Node *const &node_pt)
 
virtual void make_periodic_nodes (const Vector< Node * > &periodic_nodes_pt)
 
virtual void get_boundaries_pt (std::set< unsigned > *&boundaries_pt)
 
virtual bool is_on_boundary () const
 
virtual bool is_on_boundary (const unsigned &b) const
 
virtual void add_to_boundary (const unsigned &b)
 
virtual void remove_from_boundary (const unsigned &b)
 
virtual unsigned ncoordinates_on_boundary (const unsigned &b)
 
virtual bool boundary_coordinates_have_been_set_up ()
 
virtual void get_coordinates_on_boundary (const unsigned &b, const unsigned &k, Vector< double > &boundary_zeta)
 
virtual void set_coordinates_on_boundary (const unsigned &b, const unsigned &k, const Vector< double > &boundary_zeta)
 
virtual void get_coordinates_on_boundary (const unsigned &b, Vector< double > &boundary_zeta)
 
virtual void set_coordinates_on_boundary (const unsigned &b, const Vector< double > &boundary_zeta)
 
void set_obsolete ()
 Mark node as obsolete. More...
 
void set_non_obsolete ()
 Mark node as non-obsolete. More...
 
bool is_obsolete ()
 Test whether node is obsolete. More...
 
double raw_value (const unsigned &i) const
 
double raw_value (const unsigned &t, const unsigned &i) const
 
double value (const unsigned &i) const
 
double value (const unsigned &t, const unsigned &i) const
 
void value (Vector< double > &values) const
 
Vector< doublevalue () const
 Return vector of values calculated using value(vector). More...
 
void value (const unsigned &t, Vector< double > &values) const
 
void position (Vector< double > &pos) const
 
Vector< doubleposition () const
 Return vector of position of node at current time. More...
 
void position (const unsigned &t, Vector< double > &pos) const
 
double position (const unsigned &i) const
 
double position (const unsigned &t, const unsigned &i) const
 
double position_gen (const unsigned &k, const unsigned &i) const
 
double position_gen (const unsigned &t, const unsigned &k, const unsigned &i) const
 
double dposition_dt (const unsigned &i) const
 
double dposition_dt (const unsigned &j, const unsigned &i) const
 
double dposition_gen_dt (const unsigned &k, const unsigned &i) const
 
double dposition_gen_dt (const unsigned &j, const unsigned &k, const unsigned &i) const
 
virtual void node_update (const bool &update_all_time_levels_for_new_node=false)
 
void set_auxiliary_node_update_fct_pt (AuxNodeUpdateFctPt aux_node_update_fct_pt)
 
bool has_auxiliary_node_update_fct_pt ()
 
void perform_auxiliary_node_update_fct ()
 
virtual unsigned ngeom_data () const
 
virtual Data ** all_geom_data_pt ()
 
virtual unsigned ngeom_object () const
 
virtual GeomObject ** all_geom_object_pt ()
 
void output (std::ostream &outfile)
 Output nodal position. More...
 
- Public Member Functions inherited from oomph::Data
virtual void clear_copied_pointers ()
 
 Data ()
 Default constructor. More...
 
 Data (const unsigned &initial_n_value)
 
 Data (TimeStepper *const &time_stepper_pt, const unsigned &initial_n_value, const bool &allocate_storage=true)
 
 Data (const Data &data)=delete
 Broken copy constructor. More...
 
void operator= (const Data &)=delete
 Broken assignment operator. More...
 
virtual ~Data ()
 Destructor, deallocates memory assigned for data. More...
 
void set_time_stepper (TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
 
TimeStepper *& time_stepper_pt ()
 Return the pointer to the timestepper. More...
 
TimeStepper *const & time_stepper_pt () const
 Return the pointer to the timestepper (const version). More...
 
virtual bool is_a_copy () const
 
virtual bool is_a_copy (const unsigned &i) const
 
void set_value (const unsigned &i, const double &value_)
 
void set_value (const unsigned &t, const unsigned &i, const double &value_)
 
double value (const unsigned &i) const
 
double value (const unsigned &t, const unsigned &i) const
 
void value (Vector< double > &values) const
 Compute Vector of values for the Data value. More...
 
void value (const unsigned &t, Vector< double > &values) const
 
doublevalue_pt (const unsigned &i) const
 
doublevalue_pt (const unsigned &t, const unsigned &i) const
 
bool does_pointer_correspond_to_value (double *const &parameter_pt)
 Check whether the pointer parameter_pt addresses internal data values. More...
 
void copy (Data *orig_data_pt)
 Copy Data values from specified Data object. More...
 
void dump (std::ostream &dump_file) const
 Dump the data object to a file. More...
 
void read (std::ifstream &restart_file)
 Read data object from a file. More...
 
long * eqn_number_pt (const unsigned &i)
 Return the pointer to the equation number of the i-th stored variable. More...
 
long & eqn_number (const unsigned &i)
 Return the equation number of the i-th stored variable. More...
 
long eqn_number (const unsigned &i) const
 Return the equation number of the i-th stored variable. More...
 
void pin (const unsigned &i)
 Pin the i-th stored variable. More...
 
void unpin (const unsigned &i)
 Unpin the i-th stored variable. More...
 
void pin_all ()
 Pin all the stored variables. More...
 
void unpin_all ()
 Unpin all the stored variables. More...
 
bool is_pinned (const unsigned &i) const
 Test whether the i-th variable is pinned (1: true; 0: false). More...
 
bool is_segregated_solve_pinned (const unsigned &i)
 
void constrain (const unsigned &i)
 
void unconstrain (const unsigned &i)
 
void constrain_all ()
 Constrain all the stored variables when the data is made hanging. More...
 
void unconstrain_all ()
 Unconstrain all the stored variables when the data is made nonhanging. More...
 
bool is_constrained (const unsigned &i)
 
unsigned self_test ()
 
unsigned nvalue () const
 Return number of values stored in data object (incl pinned ones). More...
 
unsigned ntstorage () const
 
virtual void describe_dofs (std::ostream &out, const std::string &current_string) const
 
virtual void add_value_pt_to_map (std::map< unsigned, double * > &map_of_value_pt)
 

Static Public Attributes

static unsigned No_independent_position = 10
 
- Static Public Attributes inherited from oomph::Data
static long Is_pinned = -1
 Static "Magic number" to indicate pinned values. More...
 
static long Is_segregated_solve_pinned = -3
 
static long Is_unclassified = -10
 
static long Is_constrained = -2
 

Protected Member Functions

void x_gen_range_check (const unsigned &t, const unsigned &k, const unsigned &i) const
 
doublex_position_pt (const unsigned &i)
 Direct access to the pointer to the i-th stored coordinate data. More...
 
- Protected Member Functions inherited from oomph::Data
virtual void reset_copied_pointers ()
 

Protected Attributes

double ** X_position
 
TimeStepperPosition_time_stepper_pt
 Pointer to the timestepper associated with the position data. More...
 
HangInfo ** Hanging_pt
 
unsigned Ndim
 Eulerian dimension of the node. More...
 
unsigned Nposition_type
 
bool Obsolete
 
AuxNodeUpdateFctPt Aux_node_update_fct_pt
 
- Protected Attributes inherited from oomph::Data
Data ** Copy_of_data_pt
 
unsigned Ncopies
 

Friends

class BoundaryNodeBase
 to construct periodic Nodes More...
 
std::ostream & operator<< (std::ostream &out, const Node &d)
 

Additional Inherited Members

- Static Protected Attributes inherited from oomph::Data
static TimeStepperDefault_static_time_stepper_pt = new Steady<0>()
 Default (static) timestepper used in steady problems. More...
 

Detailed Description

Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a given dimension.

The nodal coordinates are used in the elements' mapping between local and global coordinates and in the simplest case (stationary nodes in Lagrange-type elements) this mapping is given by

\[ x_i = \sum_{j=1}^{N_{node}} X_{ij} \psi_{j}(s_k) \]

so we need only access to the nodal coordinates \( X_{ij}\ (i=1..DIM) \) of all nodes \( j \) : provided by the Node member function

int i
Definition: BiCGSTAB_step_by_step.cpp:9
double & x(const unsigned &i)
Return the i-th nodal coordinate.
Definition: nodes.h:1060

If the nodal positions are time-dependent, the mapping becomes

\[ x_i(t) = \sum_{j=1}^{N_{node}} X_{ij}(t) \ \psi_{j}(s_k). \]

Within the computation (where time is only evaluated at discrete levels) this becomes

\[ x_{ti} = \sum_{j=1}^{N_{node}} X_{ijt} \ \psi_{j}(s_k). \]

and we need access to the nodal coordinates \( X_{ijt} \ (i=1..DIM) \) of all nodes \( j \) at the present (t=0) and previous (t>0) timesteps: provided by the Node member function

t
Definition: plotPSD.py:36

Note: The interpretation of the history values is slightly more subtle than that. Depending on the positional TimeStepper used, only a limited number of the positional history values accessed Node::x(t,i) represent previous nodal positions; the others are generalised history values that the TimeStepper uses to determine approximations for the time-derivatives of the nodal positions.

Finally, some elements employ mappings that involve additional, generalised coordinates. For instance, in Hermite elements the mapping between local and global coordinates is based on an independent interpolation for the global coordinates and their derivative w.r.t. to the local coordinates. In such elements, the mapping becomes

\[ x_i = \sum_{j=1}^{N_{node}} \sum_{k=1}^{N_{type}} X_{ijk} \psi_{jk}(s_k) \]

where \( N_{type} \) is the number of the different types of generalised coordinates involved in the mapping. For instance, in 1D Hermite elements \( N_{type}=2 \) and k=0 corresponds to the global coordinates while k=1 corresponds to the derivative of the global coordinates w.r.t. to the local coordinate. In such cases we need access to the generalised nodal coordinates \( X_{ijk} \ (i=1..DIM, \ k=1..N_{type}) \) of all nodes \( j \). Access is provided by the Node member function

double & x_gen(const unsigned &k, const unsigned &i)
Definition: nodes.h:1126
char char char int int * k
Definition: level2_impl.h:374

and the corresponding time-dependent version

While this is all pretty straightforward, it does make the argument list of the Node constructors rather lengthy.

Member Typedef Documentation

◆ AuxNodeUpdateFctPt

typedef void(* oomph::Node::AuxNodeUpdateFctPt) (Node *)

Function pointer to auxiliary node update function.

Constructor & Destructor Documentation

◆ Node() [1/4]

oomph::Node::Node ( )

Default constructor.

1575  : Data(),
1577  Hanging_pt(0),
1578  Ndim(0),
1579  Nposition_type(0),
1580  Obsolete(false),
1582  {
1583 #ifdef LEAK_CHECK
1584  LeakCheckNames::Node_build += 1;
1585 #endif
1586  }
static TimeStepper * Default_static_time_stepper_pt
Default (static) timestepper used in steady problems.
Definition: nodes.h:162
Data()
Default constructor.
Definition: nodes.cc:237
AuxNodeUpdateFctPt Aux_node_update_fct_pt
Definition: nodes.h:967
TimeStepper * Position_time_stepper_pt
Pointer to the timestepper associated with the position data.
Definition: nodes.h:932
HangInfo ** Hanging_pt
Definition: nodes.h:942
unsigned Nposition_type
Definition: nodes.h:951
unsigned Ndim
Eulerian dimension of the node.
Definition: nodes.h:945
bool Obsolete
Definition: nodes.h:955

◆ Node() [2/4]

oomph::Node::Node ( const unsigned n_dim,
const unsigned n_position_type,
const unsigned initial_n_value,
const bool allocate_x_position = true 
)

Steady constructor, for a Node of spatial dimension n_dim. Allocates storage for initial_n_value values. NPosition_type is the number of coordinate types needed in the mapping between local and global coordinates (e.g. 1 for Lagrange-type elements; 2 for 1D Hermite elements; 4 for 2D Hermite elements, etc).

Steady Constructor, allocates storage for initial_n_value values at a node of spatial dimension NDim. nposition_type: # of coordinate types needed in the mapping between local and global coordinates (e.g. 1 for Lagrange-type elements; 2 for 1D Hermite elements; 4 for 2D Hermite elements, etc).

1599  : Data(initial_n_value),
1600  X_position(0),
1602  Hanging_pt(0),
1603  Ndim(n_dim),
1604  Nposition_type(n_position_type),
1605  Obsolete(false),
1607  {
1608 #ifdef LEAK_CHECK
1609  LeakCheckNames::Node_build += 1;
1610 #endif
1611 
1612  // Determine the total amount of storage required for position variables
1613  const unsigned n_storage = n_dim * n_position_type;
1614 
1615  // If we are in charge of the x coordinates (non-solid node)
1616  // the allocate storage
1617  if (allocate_x_position)
1618  {
1619  // Allocate the pointers to each coordinate and coordinate type
1620  X_position = new double*[n_storage];
1621 
1622  // Create one big array of positions
1623  double* x_positions = new double[n_storage];
1624 
1625  // Set pointers from the contiguous array
1626  for (unsigned j = 0; j < n_storage; j++)
1627  {
1628  X_position[j] = &x_positions[j];
1629  // Initialise value to zero
1630  X_position[j][0] = 0.0;
1631  }
1632  }
1633  }
double ** X_position
Definition: nodes.h:929
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2

References j, and X_position.

◆ Node() [3/4]

oomph::Node::Node ( TimeStepper *const &  time_stepper_pt_,
const unsigned n_dim,
const unsigned n_position_type,
const unsigned initial_n_value,
const bool allocate_x_position = true 
)

Unsteady constructor for a node of spatial dimension n_dim. Allocates storage for initial_n_value values with history values as required by the timestepper. n_position_type: # of coordinate types needed in the mapping between local and global coordinates (e.g. 1 for Lagrange-type elements; 2 for 1D Hermite elements; 4 for 2D Hermite elements).

Unsteady Constructor for a node of spatial dimension n_dim. Allocates storage for initial_n_value values with history values as required by timestepper. n_position_type: # of coordinate types needed in the mapping between local and global coordinates (e.g. 1 for Lagrange-type elements; 2 for 1D Hermite elements; 4 for 2D Hermite elements)

1649  : Data(time_stepper_pt_, initial_n_value),
1650  X_position(0),
1651  Position_time_stepper_pt(time_stepper_pt_),
1652  Hanging_pt(0),
1653  Ndim(n_dim),
1654  Nposition_type(n_position_type),
1655  Obsolete(false),
1657  {
1658 #ifdef LEAK_CHECK
1659  LeakCheckNames::Node_build += 1;
1660 #endif
1661 
1662  // Determine the total amount of storage required for position variables
1663  const unsigned n_storage = n_dim * n_position_type;
1664 
1665  // If we are allocating the storage (non-solid node)
1666  if (allocate_x_position)
1667  {
1668  // Amount of storage required for history values
1669  const unsigned n_tstorage = Position_time_stepper_pt->ntstorage();
1670 
1671  // Allocate the pointers to each coordinate and coordinate type
1672  X_position = new double*[n_storage];
1673 
1674  // Allocate the positions in one big array
1675  double* x_positions = new double[n_storage * n_tstorage];
1676 
1677  // Set the pointers to the contiguous memory
1678  for (unsigned j = 0; j < n_storage; j++)
1679  {
1680  // Set the pointer from the bug array
1681  X_position[j] = &x_positions[j * n_tstorage];
1682  // Initialise all values to zero
1683  for (unsigned t = 0; t < n_tstorage; t++)
1684  {
1685  X_position[j][t] = 0.0;
1686  }
1687  }
1688  }
1689  }
unsigned ntstorage() const
Definition: timesteppers.h:601

References j, oomph::TimeStepper::ntstorage(), Position_time_stepper_pt, plotPSD::t, and X_position.

◆ ~Node()

oomph::Node::~Node ( )
virtual

Destructor: Clean up the memory allocated for nodal position.

Destructor to clean up the memory allocated for nodal position.

1696  {
1697 #ifdef LEAK_CHECK
1698  LeakCheckNames::Node_build -= 1;
1699 #endif
1700 
1701  // Clean up memory allocated to hanging nodes
1702  if (Hanging_pt != 0)
1703  {
1704  // The number of hanging pointers is the number of values plus one
1705  const unsigned nhang = nvalue() + 1;
1706  for (unsigned ival = 1; ival < nhang; ival++)
1707  {
1708  // If the ival-th HangInfo object is not the same as the geometrical
1709  // one, delete it
1710  if (Hanging_pt[ival] != Hanging_pt[0])
1711  {
1712  delete Hanging_pt[ival];
1713  }
1714  // Always NULL out the HangInfo pointer
1715  Hanging_pt[ival] = 0;
1716  }
1717 
1718  // Delete the Geometrical HangInfo pointer
1719  delete Hanging_pt[0];
1720  Hanging_pt[0] = 0;
1721 
1722  // Delete the Hanging_pt
1723  delete[] Hanging_pt;
1724  Hanging_pt = 0;
1725  }
1726 
1727  // Free the memory allocated
1728 
1729  // If we did not allocate then the memory must have been freed by the
1730  // destructor of the object that did the allocating and X_position MUST
1731  // have been set back to zero
1732  // Test this and if so, we're done
1733  if (X_position == 0)
1734  {
1735  return;
1736  }
1737 
1738  // If we're still here we must free our own memory which was allocated
1739  // in one block
1740  delete[] X_position[0];
1741 
1742  // Now delete the pointer
1743  delete[] X_position;
1744  X_position = 0;
1745  }
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
Definition: nodes.h:483

References Hanging_pt, oomph::Data::nvalue(), and X_position.

◆ Node() [4/4]

oomph::Node::Node ( const Node node)
delete

Broken copy constructor.

Member Function Documentation

◆ add_to_boundary()

void oomph::Node::add_to_boundary ( const unsigned b)
virtual

Broken interface for adding the node to the mesh boundary b Essentially here for error reporting.

Interface for function to add the node to the mesh boundary b. Broken here in order to report run-time errors. Must be overloaded by all boundary nodes

2337  {
2338  std::stringstream ss;
2339  ss << "Cannot add non BoundaryNode<NODE> to boundary " << b << "\n";
2340  throw OomphLibError(
2342  }
Scalar * b
Definition: benchVecAdd.cpp:17
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86

References b, OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

Referenced by oomph::Mesh::add_boundary_node(), oomph::BackupMeshForProjection< GEOMETRIC_ELEMENT >::BackupMeshForProjection(), and oomph::RefineableSolidCubicMesh< ELEMENT >::RefineableSolidCubicMesh().

◆ all_geom_data_pt()

virtual Data** oomph::Node::all_geom_data_pt ( )
inlinevirtual

Return a pointer to an array of all (geometric) data that affect the nodal position. The default value is zero (node is stationary)

Reimplemented in oomph::SpineNode, and oomph::PerturbedSpineNode.

1633  {
1634  return 0;
1635  }

Referenced by oomph::ElementWithMovingNodes::assemble_set_of_all_geometric_data().

◆ all_geom_object_pt()

virtual GeomObject** oomph::Node::all_geom_object_pt ( )
inlinevirtual

Return a pointer to an array of all (geometric) objects that affect the nodal position. The default value is zero (node is stationary)

Reimplemented in oomph::SpineNode, oomph::MacroElementNodeUpdateNode, oomph::AlgebraicNode, and oomph::PerturbedSpineNode.

1648  {
1649  return 0;
1650  }

Referenced by oomph::ElementWithMovingNodes::assemble_set_of_all_geometric_data().

◆ assign_eqn_numbers()

void oomph::Node::assign_eqn_numbers ( unsigned long &  global_number,
Vector< double * > &  dof_pt 
)
virtual

Assign global equation numbers; increment global number of unknowns, global_ndof; and add any new dofs to the dof_pt.

Assign (global) equation number. Overloaded version for nodes. Checks if a hanging value has a non-negative equation number and if so shouts and then sets it to Is_constrained. Then drops down to Data version which does the actual work

Reimplemented from oomph::Data.

Reimplemented in oomph::SolidNode.

536  {
537  // Loop over the number of values
538  const unsigned eqn_number_range = nvalue();
539  for (unsigned i = 0; i < eqn_number_range; i++)
540  {
541  // Is it hanging and not constrained or pinned? If so shout and constrain
542  // it
543  if ((is_hanging(i)) && (!is_constrained(i)) && (!is_pinned(i)))
544  {
545 #ifdef PARANOID
546  std::ostringstream warn_message;
547  warn_message
548  << "Node::assign_eqn_numbers(...) noticed that " << i
549  << " -th value\n"
550  << "is hanging but not constrained. This shouldn't happen and is\n"
551  << "probably because a hanging value was unpinned manually\n"
552  << "Rectifying this now...\n";
553  OomphLibWarning(
554  warn_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
555 #endif
556  constrain(i);
557  }
558  }
559  // Now descend
560  Data::assign_eqn_numbers(global_number, dof_pt);
561  }
void constrain(const unsigned &i)
Definition: nodes.h:432
virtual void assign_eqn_numbers(unsigned long &global_ndof, Vector< double * > &dof_pt)
Definition: nodes.cc:896
bool is_constrained(const unsigned &i)
Definition: nodes.h:472
bool is_pinned(const unsigned &i) const
Test whether the i-th variable is pinned (1: true; 0: false).
Definition: nodes.h:417
bool is_hanging() const
Test whether the node is geometrically hanging.
Definition: nodes.h:1285

References oomph::Data::assign_eqn_numbers(), oomph::Data::constrain(), i, oomph::Data::is_constrained(), is_hanging(), oomph::Data::is_pinned(), oomph::Data::nvalue(), OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

◆ boundary_coordinates_have_been_set_up()

bool oomph::Node::boundary_coordinates_have_been_set_up ( )
virtual

Have boundary coordinates been set up? Broken virtual interface provides run-time error checking

Interface for function to report if boundary coordinates have been set up for this node Broken here in order to report run-time errors. Must be overloaded by all boundary nodes

2324  {
2325  std::stringstream ss;
2326  ss << "Node (bas class) can't have boundary coordinates\n";
2327  throw OomphLibError(
2329  }

References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

◆ constrain_positions()

virtual void oomph::Node::constrain_positions ( )
inlinevirtual

Constrain the positions when the node is made hanging Empty virtual function that is overloaded in SolidNodes

Reimplemented in oomph::SolidNode.

1345 {}

Referenced by set_hanging_pt().

◆ copied_node_pt()

◆ copy()

void oomph::Node::copy ( Node orig_node_pt)

Copy all nodal data from specified Node object.

1917  {
1918  // Number of positional values
1919  const unsigned npos_storage = Ndim * Nposition_type;
1920 
1921  // Check # of values:
1922  const unsigned long npos_storage_orig =
1923  orig_node_pt->ndim() * orig_node_pt->nposition_type();
1924  if (npos_storage != npos_storage_orig)
1925  {
1926  std::ostringstream error_stream;
1927  error_stream << "The allocated positional storage " << npos_storage
1928  << " is not the same as the original Node "
1929  << npos_storage_orig << std::endl;
1930 
1931  throw OomphLibError(
1932  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
1933  }
1934 
1935  // Number of time values (incl present)
1936  const unsigned n_time = Position_time_stepper_pt->ntstorage();
1937 
1938  // Check # of values:
1939  const unsigned long n_time_orig =
1940  orig_node_pt->position_time_stepper_pt()->ntstorage();
1941  if (n_time != n_time_orig)
1942  {
1943  std::ostringstream error_stream;
1944  error_stream << "The number of positional time history values, " << n_time
1945  << " is not the same of those in the original node "
1946  << n_time_orig << std::endl;
1947 
1948  throw OomphLibError(
1949  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
1950  }
1951 
1952  // Copy fixed nodal positions
1953  for (unsigned t = 0; t < n_time; t++)
1954  {
1955  for (unsigned j = 0; j < npos_storage; j++)
1956  {
1957  X_position[j][t] = orig_node_pt->X_position[j][t];
1958  }
1959  }
1960 
1961  // Read associated data
1962  Data::copy(orig_node_pt);
1963  }
void copy(Data *orig_data_pt)
Copy Data values from specified Data object.
Definition: nodes.cc:601

References oomph::Data::copy(), j, Ndim, ndim(), Nposition_type, nposition_type(), oomph::TimeStepper::ntstorage(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, Position_time_stepper_pt, position_time_stepper_pt(), plotPSD::t, and X_position.

Referenced by oomph::Mesh::convert_to_boundary_node(), and oomph::Problem::copy().

◆ does_pointer_correspond_to_position_data()

virtual bool oomph::Node::does_pointer_correspond_to_position_data ( double *const &  parameter_pt)
inlinevirtual

Check whether the pointer parameter_pt addresses position data values. It never does for a standard node, because the positions are not data

Reimplemented in oomph::SolidNode.

1044  {
1045  return false;
1046  }

◆ dposition_dt() [1/2]

double oomph::Node::dposition_dt ( const unsigned i) const

Return the i-th component of nodal velocity: dx/dt, either directly or via hanging node representation.

Return the i-th component of nodal velocity: dx/dt / Use the hanging node representation if required.

2660  {
2661  // Number of timsteps (past & present)
2662  const unsigned n_time = Position_time_stepper_pt->ntstorage();
2663 
2664  double dxdt = 0.0;
2665 
2666  // If the timestepper is not steady
2668  {
2669  // Loop over the additional storage and add the appropriate contributions
2670  for (unsigned t = 0; t < n_time; t++)
2671  {
2672  dxdt += Position_time_stepper_pt->weight(1, t) * position(t, i);
2673  }
2674  }
2675 
2676  return dxdt;
2677  }
Vector< double > position() const
Return vector of position of node at current time.
Definition: nodes.h:1525
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
Definition: timesteppers.h:594
bool is_steady() const
Definition: timesteppers.h:389

References i, oomph::TimeStepper::is_steady(), oomph::TimeStepper::ntstorage(), position(), Position_time_stepper_pt, plotPSD::t, and oomph::TimeStepper::weight().

Referenced by oomph::FSI_functions::apply_no_slip_on_moving_wall(), oomph::FiniteElement::dnodal_position_dt(), and FSIChannelWithLeafletProblem< ELEMENT >::doc_solution().

◆ dposition_dt() [2/2]

double oomph::Node::dposition_dt ( const unsigned j,
const unsigned i 
) const

Return the i-th component of j-th derivative of nodal position: d^jx/dt^j either directly or via hanging node representation

Return the i-th component of j-th derivative of nodal position: d^jx/dt^j. Use the hanging node representation.

2684  {
2685  // Number of timsteps (past & present)
2686  const unsigned n_time = Position_time_stepper_pt->ntstorage();
2687 
2688  double dxdt = 0.0;
2689 
2690  // If the timestepper is not steady
2691  if ((!Position_time_stepper_pt->is_steady()) || (j == 0))
2692  {
2693  // Loop over the additional storage and add the appropriate contributions
2694  for (unsigned t = 0; t < n_time; t++)
2695  {
2696  dxdt += Position_time_stepper_pt->weight(j, t) * position(t, i);
2697  }
2698  }
2699 
2700  return dxdt;
2701  }

References i, oomph::TimeStepper::is_steady(), j, oomph::TimeStepper::ntstorage(), position(), Position_time_stepper_pt, plotPSD::t, and oomph::TimeStepper::weight().

◆ dposition_gen_dt() [1/2]

double oomph::Node::dposition_gen_dt ( const unsigned j,
const unsigned k,
const unsigned i 
) const

i-th component of j-th time derivative (velocity) of the generalised position, d^jx(k,i)/dt^j. ‘Type’: k; Coordinate direction: i. This function uses the hanging node representation if necessary

i-th component of j-th time derivative (velocity) of the generalised position, d^jx(k,i)/dt^j. ‘Type’: k; Coordinate direction: i. Use the hanging node representation.

2737  {
2738  // Number of timsteps (past & present)
2739  const unsigned n_time = Position_time_stepper_pt->ntstorage();
2740 
2741  double dxdt = 0.0;
2742 
2743  // If the timestepper is not steady
2744  if ((!Position_time_stepper_pt->is_steady()) || (j == 0))
2745  {
2746  // Loop over the additional storage and add the appropriate contributions
2747  for (unsigned t = 0; t < n_time; t++)
2748  {
2749  dxdt += Position_time_stepper_pt->weight(j, t) * position_gen(t, k, i);
2750  }
2751  }
2752 
2753  return dxdt;
2754  }
double position_gen(const unsigned &k, const unsigned &i) const
Definition: nodes.cc:2592

References i, oomph::TimeStepper::is_steady(), j, k, oomph::TimeStepper::ntstorage(), position_gen(), Position_time_stepper_pt, plotPSD::t, and oomph::TimeStepper::weight().

◆ dposition_gen_dt() [2/2]

double oomph::Node::dposition_gen_dt ( const unsigned k,
const unsigned i 
) const

i-th component of time derivative (velocity) of the generalised position, dx(k,i)/dt. ‘Type’: k; Coordinate direction: i. This function uses the hanging node representation if necessary.

i-th component of time derivative (velocity) of the generalised position, dx(k,i)/dt. ‘Type’: k; Coordinate direction: i. Use the hanging node representation

2709  {
2710  // Number of timsteps (past & present)
2711  const unsigned n_time = Position_time_stepper_pt->ntstorage();
2712 
2713  double dxdt = 0.0;
2714 
2715  // If the timestepper is not steady
2717  {
2718  // Loop over the additional time storage and add the appropriate
2719  // contributions
2720  for (unsigned t = 0; t < n_time; t++)
2721  {
2722  dxdt += Position_time_stepper_pt->weight(1, t) * position_gen(t, k, i);
2723  }
2724  }
2725 
2726  return dxdt;
2727  }

References i, oomph::TimeStepper::is_steady(), k, oomph::TimeStepper::ntstorage(), position_gen(), Position_time_stepper_pt, plotPSD::t, and oomph::TimeStepper::weight().

Referenced by oomph::FiniteElement::dnodal_position_gen_dt().

◆ dump()

void oomph::Node::dump ( std::ostream &  dump_file) const
virtual

Dump nodal position and associated data to file for restart.

Dump nodal positions and associated data to file for restart.

Reimplemented in oomph::SolidNode.

1970  {
1971  // Number of positional values
1972  const unsigned npos_storage = Ndim * Nposition_type;
1973  dump_file << npos_storage << " # number of fixed position variables"
1974  << std::endl;
1975 
1976  const unsigned Time_steps_range = Position_time_stepper_pt->ntstorage();
1977  dump_file << Time_steps_range
1978  << " # total number of doubles for time history (incl present)"
1979  << std::endl;
1980 
1981  for (unsigned t = 0; t < Time_steps_range; t++)
1982  {
1983  for (unsigned j = 0; j < npos_storage; j++)
1984  {
1985  dump_file << X_position[j][t] << std::endl;
1986  }
1987  }
1988 
1989  // Dump out data
1990  Data::dump(dump_file);
1991  }
void dump(std::ostream &dump_file) const
Dump the data object to a file.
Definition: nodes.cc:645

References oomph::Data::dump(), j, Ndim, Nposition_type, oomph::TimeStepper::ntstorage(), Position_time_stepper_pt, plotPSD::t, and X_position.

Referenced by oomph::SolidNode::dump().

◆ dx_dt() [1/2]

double oomph::Node::dx_dt ( const unsigned i) const

Return the i-th component of nodal velocity: dx/dt.

1818  {
1819  // Number of timsteps (past & present)
1820  const unsigned n_time = Position_time_stepper_pt->ntstorage();
1821 
1822  double dxdt = 0.0;
1823 
1824  // If the timestepper is not steady
1826  {
1827  // Loop over the additional storage and add the appropriate contributions
1828  for (unsigned t = 0; t < n_time; t++)
1829  {
1830  dxdt += Position_time_stepper_pt->weight(1, t) * x(t, i);
1831  }
1832  }
1833 
1834  return dxdt;
1835  }

References i, oomph::TimeStepper::is_steady(), oomph::TimeStepper::ntstorage(), Position_time_stepper_pt, plotPSD::t, oomph::TimeStepper::weight(), and x().

Referenced by oomph::FiniteElement::raw_dnodal_position_dt().

◆ dx_dt() [2/2]

double oomph::Node::dx_dt ( const unsigned j,
const unsigned i 
) const

Return the i-th component of j-th derivative of nodal position: d^jx/dt^j.

1842  {
1843  // Number of timsteps (past & present)
1844  const unsigned n_time = Position_time_stepper_pt->ntstorage();
1845 
1846  double dxdt = 0.0;
1847 
1848  // If the timestepper is not steady
1849  if ((!Position_time_stepper_pt->is_steady()) || (j == 0))
1850  {
1851  // Loop over the additional storage and add the appropriate contributions
1852  for (unsigned t = 0; t < n_time; t++)
1853  {
1854  dxdt += Position_time_stepper_pt->weight(j, t) * x(t, i);
1855  }
1856  }
1857 
1858  return dxdt;
1859  }

References i, oomph::TimeStepper::is_steady(), j, oomph::TimeStepper::ntstorage(), Position_time_stepper_pt, plotPSD::t, oomph::TimeStepper::weight(), and x().

◆ dx_gen_dt() [1/2]

double oomph::Node::dx_gen_dt ( const unsigned j,
const unsigned k,
const unsigned i 
) const

i-th component of j-th time derivative (velocity) of the generalised position, d^jx(k,i)/dt^j. ‘Type’: k; Coordinate direction: i.

1893  {
1894  // Number of timsteps (past & present)
1895  const unsigned n_time = Position_time_stepper_pt->ntstorage();
1896 
1897  double dxdt = 0.0;
1898 
1899  // If the timestepper is not steady
1900  if ((!Position_time_stepper_pt->is_steady()) || (j == 0))
1901  {
1902  // Loop over the additional storage and add the appropriate contributions
1903  for (unsigned t = 0; t < n_time; t++)
1904  {
1905  dxdt += Position_time_stepper_pt->weight(j, t) * x_gen(t, k, i);
1906  }
1907  }
1908 
1909  return dxdt;
1910  }

References i, oomph::TimeStepper::is_steady(), j, k, oomph::TimeStepper::ntstorage(), Position_time_stepper_pt, plotPSD::t, oomph::TimeStepper::weight(), and x_gen().

◆ dx_gen_dt() [2/2]

double oomph::Node::dx_gen_dt ( const unsigned k,
const unsigned i 
) const

i-th component of time derivative (velocity) of the generalised position, dx(k,i)/dt. ‘Type’: k; Coordinate direction: i.

1866  {
1867  // Number of timsteps (past & present)
1868  const unsigned n_time = Position_time_stepper_pt->ntstorage();
1869 
1870  double dxdt = 0.0;
1871 
1872  // If the timestepper is not steady
1874  {
1875  // Loop over the additional time storage and add the appropriate
1876  // contributions
1877  for (unsigned t = 0; t < n_time; t++)
1878  {
1879  dxdt += Position_time_stepper_pt->weight(1, t) * x_gen(t, k, i);
1880  }
1881  }
1882 
1883  return dxdt;
1884  }

References i, oomph::TimeStepper::is_steady(), k, oomph::TimeStepper::ntstorage(), Position_time_stepper_pt, plotPSD::t, oomph::TimeStepper::weight(), and x_gen().

Referenced by oomph::FiniteElement::raw_dnodal_position_gen_dt().

◆ get_boundaries_pt()

◆ get_coordinates_on_boundary() [1/2]

void oomph::Node::get_coordinates_on_boundary ( const unsigned b,
const unsigned k,
Vector< double > &  boundary_zeta 
)
virtual

Return the vector of the k-th generalised boundary coordinates on mesh boundary b. Broken virtual interface provides run-time error checking

Interface for function to get the k-th generalised boundary coordinate of the node on boundary b. Broken here in order to provide run-time error reporting. Must be overloaded by all boundary nodes.

2382  {
2383  throw OomphLibError("Non-boundary Node cannot have boundary coordinates",
2386  }

References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

Referenced by UnstructuredTorusProblem< ELEMENT >::actions_after_adapt(), PrescribedBoundaryDisplacementProblem< ELEMENT >::actions_before_newton_solve(), AxisymmetricVibratingShellProblem< ELEMENT >::AxisymmetricVibratingShellProblem(), oomph::BackupMeshForProjection< GEOMETRIC_ELEMENT >::BackupMeshForProjection(), oomph::TwoLayerSpineMesh< BASE_ELEMENT >::build_two_layer_mesh(), ContactProblem< ELEMENT >::create_displ_imposition_elements(), oomph::DiskTetMeshFacetedSurface::DiskTetMeshFacetedSurface(), oomph::DiskWithTorusAroundEdgeTetMeshFacetedSurface::DiskWithTorusAroundEdgeTetMeshFacetedSurface(), ElasticTwoLayerMesh< ELEMENT >::ElasticTwoLayerMesh(), get_coordinates_on_boundary(), oomph::TriangleMesh< ELEMENT >::output_boundary_coordinates(), oomph::UnstructuredTwoDMeshGeometryBase::setup_boundary_coordinates(), oomph::RefineableTetgenMesh< ELEMENT >::snap_nodes_onto_boundary(), oomph::TetMeshBase::snap_nodes_onto_geometric_objects(), oomph::UnstructuredTwoDMeshGeometryBase::snap_nodes_onto_geometric_objects(), oomph::TetMeshBase::snap_to_quadratic_surface(), VibratingShellProblem< ELEMENT >::VibratingShellProblem(), oomph::FaceElement::zeta_nodal(), and oomph::GenericLagrangeInterpolatedProjectableElement< ELEMENT >::zeta_nodal().

◆ get_coordinates_on_boundary() [2/2]

virtual void oomph::Node::get_coordinates_on_boundary ( const unsigned b,
Vector< double > &  boundary_zeta 
)
inlinevirtual

Return the vector of coordinates on mesh boundary b Broken virtual interface provides run-time error checking

1422  {
1423  get_coordinates_on_boundary(b, 0, boundary_zeta);
1424  }
virtual void get_coordinates_on_boundary(const unsigned &b, const unsigned &k, Vector< double > &boundary_zeta)
Definition: nodes.cc:2379

References b, and get_coordinates_on_boundary().

◆ hang_code()

unsigned oomph::Node::hang_code ( )
inline

Code that encapsulates the hanging status of the node (incl. the geometric hanging status) as \( \sum_{i=-1}{nval-1} Node::is_hanging(i) 2^{i+1} \)

1214  {
1215  unsigned hang_code = 0;
1216  int nval = nvalue();
1217  for (int i = -1; i < nval; i++)
1218  {
1220  unsigned(std::pow(2.0, double(i + 1)));
1221  }
1222  return hang_code;
1223  }
unsigned hang_code()
Definition: nodes.h:1213
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625

References i, is_hanging(), oomph::Data::nvalue(), and Eigen::bfloat16_impl::pow().

◆ hanging_pt() [1/2]

HangInfo* const& oomph::Node::hanging_pt ( ) const
inline

Return pointer to hanging node data (this refers to the geometric hanging node status) (const version).

1229  {
1230 #ifdef PARANOID
1231  if (Hanging_pt == 0)
1232  {
1233  throw OomphLibError(
1234  "Vector of pointers to hanging data is not setup yet\n",
1237  }
1238 #endif
1239  return Hanging_pt[0];
1240  }

References Hanging_pt, OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

Referenced by oomph::TreeBasedRefineableMeshBase::adapt_mesh(), oomph::ElementWithMovingNodes::assemble_set_of_all_geometric_data(), oomph::RefineableElement::assign_hanging_local_eqn_numbers(), oomph::RefineableSolidElement::assign_solid_hanging_local_eqn_numbers(), oomph::TreeBasedRefineableMeshBase::complete_hanging_nodes(), oomph::TreeBasedRefineableMeshBase::complete_hanging_nodes_recursively(), oomph::Mesh::delete_all_external_storage(), oomph::RefineableAdvectionDiffusionEquations< DIM >::dinterpolated_u_adv_diff_ddata(), oomph::RefineableAxisymAdvectionDiffusionEquations::dinterpolated_u_adv_diff_ddata(), oomph::RefineableSphericalAdvectionDiffusionEquations::dinterpolated_u_adv_diff_ddata(), oomph::RefineableAxisymmetricNavierStokesEquations::dinterpolated_u_axi_nst_ddata(), oomph::RefineableGeneralisedNewtonianAxisymmetricNavierStokesEquations::dinterpolated_u_axi_nst_ddata(), oomph::RefineableGeneralisedNewtonianNavierStokesEquations< DIM >::dinterpolated_u_nst_ddata(), oomph::RefineableNavierStokesEquations< DIM >::dinterpolated_u_nst_ddata(), oomph::RefineableSpaceTimeNavierStokesEquations< DIM >::dinterpolated_u_nst_ddata(), oomph::RefineableSpaceTimeNavierStokesMixedOrderEquations< DIM >::dinterpolated_u_nst_ddata(), oomph::RefineableYoungLaplaceEquations::fill_in_contribution_to_residuals(), oomph::RefineableQDPVDElement< DIM, NNODE_1D >::fill_in_generic_contribution_to_residuals_pvd(), oomph::RefineablePVDEquations< DIM >::fill_in_generic_contribution_to_residuals_pvd(), oomph::RefineablePolarNavierStokesEquations::fill_in_generic_residual_contribution(), oomph::RefineablePolarStreamfunctionEquations::fill_in_generic_residual_contribution(), oomph::RefineableAxisymAdvectionDiffusionEquations::fill_in_generic_residual_contribution_axi_adv_diff(), oomph::RefineableAxisymmetricNavierStokesEquations::fill_in_generic_residual_contribution_axi_nst(), oomph::RefineableGeneralisedNewtonianAxisymmetricNavierStokesEquations::fill_in_generic_residual_contribution_axi_nst(), oomph::RefineableGeneralisedAxisymAdvectionDiffusionEquations::fill_in_generic_residual_contribution_cons_axisym_adv_diff(), oomph::RefineableLinearisedAxisymmetricNavierStokesEquations::fill_in_generic_residual_contribution_linearised_axi_nst(), oomph::RefineableLinearisedNavierStokesEquations::fill_in_generic_residual_contribution_linearised_nst(), oomph::RefineablePVDEquationsWithPressure< DIM >::fill_in_generic_residual_contribution_pvd_with_pressure(), oomph::RefineableSphericalAdvectionDiffusionEquations::fill_in_generic_residual_contribution_spherical_adv_diff(), oomph::RefineableSphericalNavierStokesEquations::fill_in_generic_residual_contribution_spherical_nst(), oomph::RefineableElement::fill_in_jacobian_from_nodal_by_fd(), oomph::RefineableSolidElement::fill_in_jacobian_from_solid_position_by_fd(), oomph::RefineableNavierStokesBoussinesqElement< NST_ELEMENT, AD_ELEMENT >::fill_in_off_diagonal_block_analytic(), oomph::RefineableAdvectionDiffusionBoussinesqElement< AD_ELEMENT, NST_ELEMENT >::fill_in_off_diagonal_block_analytic(), oomph::RefineableBuoyantQAxisymCrouzeixRaviartElement::fill_in_off_diagonal_jacobian_blocks_analytic(), oomph::RefineableBuoyantQSphericalCrouzeixRaviartElement::fill_in_off_diagonal_jacobian_blocks_analytic(), oomph::RefineableBuoyantQCrouzeixRaviartElement< DIM >::fill_in_off_diagonal_jacobian_blocks_analytic(), oomph::RefineableDoubleBuoyantQCrouzeixRaviartElement< DIM >::fill_in_off_diagonal_jacobian_blocks_by_fd(), oomph::RefineablePseudoSolidNodeUpdateElement< BASIC, SOLID >::fill_in_shape_derivatives_by_fd(), oomph::RefineableSolidElement::geom_data_pt(), oomph::RefineableAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::RefineableGeneralisedNewtonianAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::RefineablePVDEquationsWithPressure< DIM >::get_mass_matrix_diagonal(), oomph::RefineableElement::identify_field_data_for_interactions(), oomph::RefineableSolidElement::identify_geometric_data(), oomph::RefineableGeneralisedNewtonianQTaylorHoodElement< DIM >::identify_load_data(), oomph::RefineableGeneralisedNewtonianQCrouzeixRaviartElement< DIM >::identify_load_data(), oomph::RefineableQTaylorHoodElement< DIM >::identify_load_data(), oomph::RefineableQCrouzeixRaviartElement< DIM >::identify_load_data(), oomph::RefineableQTaylorHoodSpaceTimeElement< DIM >::identify_load_data(), oomph::RefineableQTaylorHoodMixedOrderSpaceTimeElement< DIM >::identify_load_data(), oomph::RefineablePolarTaylorHoodElement::insert_load_data(), oomph::RefineablePolarCrouzeixRaviartElement::insert_load_data(), oomph::SolidNode::lagrangian_position(), oomph::SolidNode::lagrangian_position_gen(), oomph::RefineableSolidElement::ngeom_data(), oomph::AlgebraicMesh::node_update(), oomph::Mesh::node_update(), oomph::AlgebraicNode::node_update(), oomph::MacroElementNodeUpdateNode::node_update(), oomph::RefineableQElement< 3 >::oc_hang_helper(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::oc_hang_helper(), oomph::TreeBasedRefineableMeshBase::p_adapt_mesh(), oomph::MGSolver< DIM >::plot(), position(), position_gen(), oomph::RefineableQElement< 2 >::quad_hang_helper(), oomph::RefineableSolidTractionElement< ELEMENT >::refineable_fill_in_contribution_to_residuals_solid_traction(), oomph::RefineableImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::refineable_fill_in_generic_contribution_to_residuals_displ_lagr_multiplier(), oomph::RefineableFSIImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::refineable_fill_in_generic_contribution_to_residuals_fsi_displ_lagr_multiplier(), oomph::RefineableNavierStokesFluxControlElement< ELEMENT >::refineable_fill_in_generic_residual_contribution_fluid_traction(), oomph::MGSolver< DIM >::setup_interpolation_matrices_unstructured(), oomph::HelmholtzMGPreconditioner< DIM >::setup_interpolation_matrices_unstructured(), and value().

◆ hanging_pt() [2/2]

HangInfo* const& oomph::Node::hanging_pt ( const int i) const
inline

Return pointer to hanging node data for value i (const version)

1244  {
1245 #ifdef PARANOID
1246  if (Hanging_pt == 0)
1247  {
1248  std::ostringstream error_message;
1249  error_message << "Vector of pointers to hanging data is not setup yet\n"
1250 #ifdef OOMPH_HAS_MPI
1251  << "I'm on processor "
1252  << MPI_Helpers::communicator_pt()->my_rank() << "\n"
1253 #endif
1254  << "Coordinates: \n";
1255 
1256  unsigned n_dim = ndim();
1257  for (unsigned i = 0; i < n_dim; i++)
1258  {
1259  error_message << this->x(i) << " ";
1260  }
1261  throw OomphLibError(error_message.str(),
1264  }
1265 #endif
1266 #ifdef RANGE_CHECKING
1267  // Range checking code.
1268  // Need to make sure that this is an int otherwise the test
1269  // fails when it shouldn't
1270  const int n_value = static_cast<int>(this->nvalue());
1271  if ((i < -1) || (i > n_value))
1272  {
1273  std::ostringstream error_message;
1274  error_message << "Range Error: Value " << i
1275  << " is not in the range (-1," << n_value << ")";
1276  throw OomphLibError(error_message.str(),
1279  }
1280 #endif
1281  return Hanging_pt[i + 1];
1282  }
static OomphCommunicator * communicator_pt()
access to the global oomph-lib communicator
Definition: oomph_utilities.cc:1046
unsigned ndim() const
Return (Eulerian) spatial dimension of the node.
Definition: nodes.h:1054
int my_rank() const
my rank
Definition: communicator.h:176

References oomph::MPI_Helpers::communicator_pt(), Hanging_pt, i, oomph::OomphCommunicator::my_rank(), ndim(), oomph::Data::nvalue(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, and x().

◆ has_auxiliary_node_update_fct_pt()

◆ is_hanging() [1/2]

bool oomph::Node::is_hanging ( ) const
inline

Test whether the node is geometrically hanging.

1286  {
1287  if (Hanging_pt == 0)
1288  {
1289  return false;
1290  }
1291  else
1292  {
1293  return (Hanging_pt[0] != 0);
1294  }
1295  }

References Hanging_pt.

Referenced by oomph::TreeBasedRefineableMeshBase::adapt_mesh(), oomph::ElementWithMovingNodes::assemble_set_of_all_geometric_data(), assign_eqn_numbers(), oomph::RefineableElement::assign_hanging_local_eqn_numbers(), oomph::ExtrudedCubeMeshFromQuadMesh< ELEMENT >::build_mesh(), oomph::TreeBasedRefineableMeshBase::complete_hanging_nodes(), oomph::TreeBasedRefineableMeshBase::complete_hanging_nodes_recursively(), oomph::Mesh::delete_all_external_storage(), oomph::RefineableAdvectionDiffusionEquations< DIM >::dinterpolated_u_adv_diff_ddata(), oomph::RefineableAxisymAdvectionDiffusionEquations::dinterpolated_u_adv_diff_ddata(), oomph::RefineableSphericalAdvectionDiffusionEquations::dinterpolated_u_adv_diff_ddata(), oomph::RefineableAxisymmetricNavierStokesEquations::dinterpolated_u_axi_nst_ddata(), oomph::RefineableGeneralisedNewtonianAxisymmetricNavierStokesEquations::dinterpolated_u_axi_nst_ddata(), oomph::RefineableGeneralisedNewtonianNavierStokesEquations< DIM >::dinterpolated_u_nst_ddata(), oomph::RefineableNavierStokesEquations< DIM >::dinterpolated_u_nst_ddata(), oomph::RefineableSpaceTimeNavierStokesEquations< DIM >::dinterpolated_u_nst_ddata(), oomph::RefineableSpaceTimeNavierStokesMixedOrderEquations< DIM >::dinterpolated_u_nst_ddata(), PRefineableDrivenCavityProblem< ELEMENT >::doc_solution(), oomph::RefineableQDPVDElement< DIM, NNODE_1D >::fill_in_generic_contribution_to_residuals_pvd(), oomph::RefineablePVDEquations< DIM >::fill_in_generic_contribution_to_residuals_pvd(), oomph::RefineablePolarNavierStokesEquations::fill_in_generic_residual_contribution(), oomph::RefineablePolarStreamfunctionEquations::fill_in_generic_residual_contribution(), oomph::RefineableAxisymAdvectionDiffusionEquations::fill_in_generic_residual_contribution_axi_adv_diff(), oomph::RefineableAxisymmetricNavierStokesEquations::fill_in_generic_residual_contribution_axi_nst(), oomph::RefineableGeneralisedNewtonianAxisymmetricNavierStokesEquations::fill_in_generic_residual_contribution_axi_nst(), oomph::RefineableGeneralisedAxisymAdvectionDiffusionEquations::fill_in_generic_residual_contribution_cons_axisym_adv_diff(), oomph::RefineableLinearisedAxisymmetricNavierStokesEquations::fill_in_generic_residual_contribution_linearised_axi_nst(), oomph::RefineableLinearisedNavierStokesEquations::fill_in_generic_residual_contribution_linearised_nst(), oomph::RefineablePVDEquationsWithPressure< DIM >::fill_in_generic_residual_contribution_pvd_with_pressure(), oomph::RefineableSphericalAdvectionDiffusionEquations::fill_in_generic_residual_contribution_spherical_adv_diff(), oomph::RefineableSphericalNavierStokesEquations::fill_in_generic_residual_contribution_spherical_nst(), oomph::RefineableElement::fill_in_jacobian_from_nodal_by_fd(), oomph::RefineableSolidElement::fill_in_jacobian_from_solid_position_by_fd(), oomph::RefineableNavierStokesBoussinesqElement< NST_ELEMENT, AD_ELEMENT >::fill_in_off_diagonal_block_analytic(), oomph::RefineableAdvectionDiffusionBoussinesqElement< AD_ELEMENT, NST_ELEMENT >::fill_in_off_diagonal_block_analytic(), oomph::RefineableBuoyantQAxisymCrouzeixRaviartElement::fill_in_off_diagonal_jacobian_blocks_analytic(), oomph::RefineableBuoyantQSphericalCrouzeixRaviartElement::fill_in_off_diagonal_jacobian_blocks_analytic(), oomph::RefineableBuoyantQCrouzeixRaviartElement< DIM >::fill_in_off_diagonal_jacobian_blocks_analytic(), oomph::RefineableDoubleBuoyantQCrouzeixRaviartElement< DIM >::fill_in_off_diagonal_jacobian_blocks_by_fd(), oomph::RefineablePseudoSolidNodeUpdateElement< BASIC, SOLID >::fill_in_shape_derivatives_by_fd(), oomph::RefineableAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::RefineableGeneralisedNewtonianAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::RefineablePVDEquationsWithPressure< DIM >::get_mass_matrix_diagonal(), hang_code(), oomph::RefineableElement::identify_field_data_for_interactions(), oomph::RefineableGeneralisedNewtonianQTaylorHoodElement< DIM >::identify_load_data(), oomph::RefineableGeneralisedNewtonianQCrouzeixRaviartElement< DIM >::identify_load_data(), oomph::RefineableQTaylorHoodElement< DIM >::identify_load_data(), oomph::RefineableQCrouzeixRaviartElement< DIM >::identify_load_data(), oomph::RefineableQTaylorHoodSpaceTimeElement< DIM >::identify_load_data(), oomph::RefineableQTaylorHoodMixedOrderSpaceTimeElement< DIM >::identify_load_data(), oomph::RefineablePolarTaylorHoodElement::insert_load_data(), oomph::RefineablePolarCrouzeixRaviartElement::insert_load_data(), is_hanging(), oomph::SolidNode::lagrangian_position(), oomph::SolidNode::lagrangian_position_gen(), oomph::AlgebraicMesh::node_update(), oomph::Mesh::node_update(), oomph::AlgebraicNode::node_update(), oomph::MacroElementNodeUpdateNode::node_update(), oomph::RefineableQElement< 3 >::oc_hang_helper(), oomph::TreeBasedRefineableMeshBase::p_adapt_mesh(), oomph::RefineableLinearisedAxisymmetricQTaylorHoodElement::pin_elemental_redundant_nodal_pressure_dofs(), oomph::RefineableAxisymmetricQTaylorHoodElement::pin_elemental_redundant_nodal_pressure_dofs(), oomph::RefineableGeneralisedNewtonianAxisymmetricQTaylorHoodElement::pin_elemental_redundant_nodal_pressure_dofs(), oomph::RefineableGeneralisedNewtonianQTaylorHoodElement< DIM >::pin_elemental_redundant_nodal_pressure_dofs(), oomph::RefineableLinearisedQTaylorHoodElement::pin_elemental_redundant_nodal_pressure_dofs(), oomph::RefineableQTaylorHoodElement< DIM >::pin_elemental_redundant_nodal_pressure_dofs(), oomph::RefineablePolarTaylorHoodElement::pin_elemental_redundant_nodal_pressure_dofs(), oomph::RefineableQTaylorHoodSpaceTimeElement< DIM >::pin_elemental_redundant_nodal_pressure_dofs(), oomph::RefineableQTaylorHoodMixedOrderSpaceTimeElement< DIM >::pin_elemental_redundant_nodal_pressure_dofs(), oomph::RefineableQSphericalTaylorHoodElement::pin_elemental_redundant_nodal_pressure_dofs(), oomph::RefineableQPVDElementWithContinuousPressure< DIM >::pin_elemental_redundant_nodal_solid_pressures(), oomph::MGSolver< DIM >::plot(), position(), position_gen(), oomph::RefineableQElement< 2 >::quad_hang_helper(), oomph::RefineableSolidTractionElement< ELEMENT >::refineable_fill_in_contribution_to_residuals_solid_traction(), oomph::RefineableImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::refineable_fill_in_generic_contribution_to_residuals_displ_lagr_multiplier(), oomph::RefineableFSIImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::refineable_fill_in_generic_contribution_to_residuals_fsi_displ_lagr_multiplier(), oomph::RefineableNavierStokesFluxControlElement< ELEMENT >::refineable_fill_in_generic_residual_contribution_fluid_traction(), oomph::MGSolver< DIM >::setup_interpolation_matrices_unstructured(), oomph::HelmholtzMGPreconditioner< DIM >::setup_interpolation_matrices_unstructured(), oomph::AxisymmetricTTaylorHoodElement::unpin_proper_nodal_pressure_dofs(), oomph::GeneralisedNewtonianAxisymmetricTTaylorHoodElement::unpin_proper_nodal_pressure_dofs(), oomph::GeneralisedNewtonianTTaylorHoodElement< DIM >::unpin_proper_nodal_pressure_dofs(), oomph::TTaylorHoodElement< DIM >::unpin_proper_nodal_pressure_dofs(), value(), and oomph::WomersleyMesh< WOMERSLEY_ELEMENT >::WomersleyMesh().

◆ is_hanging() [2/2]

bool oomph::Node::is_hanging ( const int i) const
inline

Test whether the i-th value is hanging.

1299  {
1300 #ifdef RANGE_CHECKING
1301  // Need to make sure that this is an int otherwise the test
1302  // fails when it shouldn't
1303  const int n_value = static_cast<int>(this->nvalue());
1304  if ((i < -1) || (i > n_value))
1305  {
1306  std::ostringstream error_message;
1307  error_message << "Range Error: Value " << i
1308  << " is not in the range (-1," << n_value << ")";
1309  throw OomphLibError(error_message.str(),
1312  }
1313 #endif
1314 
1315  // Test whether the node is geometrically hanging
1316  if (i == -1)
1317  {
1318  return is_hanging();
1319  }
1320  // Otherwise, is the i-th value hanging
1321  else
1322  {
1323  if (Hanging_pt == 0)
1324  {
1325  return false;
1326  }
1327  else
1328  {
1329  return (Hanging_pt[i + 1] != 0);
1330  }
1331  }
1332  }

References Hanging_pt, i, is_hanging(), oomph::Data::nvalue(), OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

◆ is_obsolete()

bool oomph::Node::is_obsolete ( )
inline

Test whether node is obsolete.

1449  {
1450  return Obsolete;
1451  }

References Obsolete.

◆ is_on_boundary() [1/2]

virtual bool oomph::Node::is_on_boundary ( ) const
inlinevirtual

Test whether the Node lies on a boundary. The "bulk" Node cannot lie on a boundary, so return false. This will be overloaded by BoundaryNodes

1374  {
1375  return false;
1376  }

Referenced by SurfactantProblem< ELEMENT, INTERFACE_ELEMENT >::actions_after_adapt(), SurfactantProblem< ELEMENT, INTERFACE_ELEMENT >::actions_before_implicit_timestep(), oomph::TreeBasedRefineableMeshBase::adapt_mesh(), STSpineMesh< ELEMENT, INTERFACE_ELEMENT >::add_mesh(), AxialSolidQuarterTubeMesh< ELEMENT, INTERFACE_ELEMENT >::AxialSolidQuarterTubeMesh(), AxialSpineQuarterTubeMesh< ELEMENT, INTERFACE_ELEMENT >::AxialSpineQuarterTubeMesh(), AxisymmetricVibratingShellProblem< ELEMENT >::AxisymmetricVibratingShellProblem(), oomph::BackupMeshForProjection< GEOMETRIC_ELEMENT >::BackupMeshForProjection(), oomph::BackwardStepQuadMesh< ELEMENT >::build_mesh(), oomph::ExtrudedCubeMeshFromQuadMesh< ELEMENT >::build_mesh(), oomph::BrickFromTetMesh< ELEMENT >::build_mesh(), CapProblem< ELEMENT >::CapProblem(), CombTipSpineMesh< ELEMENT, INTERFACE_ELEMENT >::change_boundaries(), DarcyProblem< ELEMENT >::complete_problem_setup(), AxisymmetricVibratingShellProblem< ELEMENT >::complete_problem_setup(), VibratingShellProblem< ELEMENT >::complete_problem_setup(), oomph::Mesh::copy_boundary_node_data_from_nodes(), SurfactantProblem< ELEMENT, INTERFACE_ELEMENT >::create_dependent_position_elements(), ContactProblem< ELEMENT >::create_displ_imposition_elements(), RefineableRotatingCylinderProblem< ELEMENT >::create_free_surface_elements(), FSICollapsibleChannelProblem< ELEMENT >::create_lagrange_multiplier_elements(), PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::create_lagrange_multiplier_elements(), FSIChannelWithLeafletProblem< ELEMENT >::create_lagrange_multiplier_elements(), UnstructuredFSIProblem< FLUID_ELEMENT, SOLID_ELEMENT >::create_lagrange_multiplier_elements(), PrescribedBoundaryDisplacementProblem< ELEMENT >::create_lagrange_multiplier_elements(), CollapsibleChannelProblem< ELEMENT >::create_lagrange_multiplier_elements(), TiltedCavityProblem< ELEMENT >::create_parall_outflow_lagrange_elements(), SurfactantProblem< ELEMENT, INTERFACE_ELEMENT >::create_slave_position_elements(), oomph::DiskTetMeshFacetedSurface::DiskTetMeshFacetedSurface(), FpTestProblem::FpTestProblem(), oomph::Edge::is_on_boundary(), oomph::TFace::is_on_boundary(), WallMesh< ELEMENT >::max_deformation(), oomph::MeshHelper::merge_spine_meshes(), MortaringHelpers::MergedSolidMesh::MergedSolidMesh(), WallMesh< ELEMENT >::min_deformation(), oomph::TreeBasedRefineableMeshBase::p_adapt_mesh(), oomph::MGSolver< DIM >::plot(), PressureWaveFSIProblem< FLUID_ELEMENT, SOLID_ELEMENT >::PressureWaveFSIProblem(), BrethertonElement< ELEMENT >::reassign_inflow(), oomph::RefineableQuadMeshWithMovingCylinder< ELEMENT >::RefineableQuadMeshWithMovingCylinder(), AxiPoroProblem< ELEMENT, TIMESTEPPER >::set_boundary_values(), oomph::TetMeshBase::snap_to_quadratic_surface(), SurfactantProblem< ELEMENT, INTERFACE_ELEMENT >::SurfactantProblem(), SurfactantProblem< ELEMENT, INTERFACE_ELEMENT >::unpin_surface(), UnstructuredFSIProblem< FLUID_ELEMENT, SOLID_ELEMENT >::UnstructuredFSIProblem(), VibratingShellProblem< ELEMENT >::VibratingShellProblem(), WallMesh< ELEMENT >::WallMesh(), and oomph::TwoDAnnularMesh< ELEMENT >::wrap_into_annular_shape().

◆ is_on_boundary() [2/2]

virtual bool oomph::Node::is_on_boundary ( const unsigned b) const
inlinevirtual

Test whether the node lies on mesh boundary b. The "bulk" Node cannot lie on a boundary, so return false. This will be overloaded by BoundaryNodes

1382  {
1383  return false;
1384  }

◆ make_periodic()

void oomph::Node::make_periodic ( Node *const &  node_pt)
virtual

Make the node periodic by copying the values from node_pt. Note that the coordinates will always remain independent, even though this may lead to (a little) unrequired information being stored. Broken virtual (only implemented in BoundaryNodes)

Make the node periodic by copying values from node_pt. Broken virtual (only implemented in BoundaryNodes)

2258  {
2259  throw OomphLibError("Only BoundaryNodes can be made periodic",
2262  }

References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

Referenced by NavierStokesProblem< ELEMENT >::apply_boundary_conditions(), oomph::RefineableQElement< 3 >::build(), oomph::RefineableQElement< 2 >::build(), UnsteadyHeatProblem< ELEMENT >::enforce_time_periodic_boundary_conditions(), oomph::PRefineableQElement< 2, INITIAL_NNODE_1D >::p_refine(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::p_refine(), and oomph::PeriodicOrbitTemporalMesh< ELEMENT >::PeriodicOrbitTemporalMesh().

◆ make_periodic_nodes()

void oomph::Node::make_periodic_nodes ( const Vector< Node * > &  periodic_nodes_pt)
virtual

Make the nodes passed in the vector periodic_nodes share the same data as this node.

Make the nodes passed in periodic_nodes_pt periodic by copying values across from this node. At present all the positions will be assumed to be independent. Broken virtual (only implemented in BoundaryNodes)

2271  {
2272  throw OomphLibError("Only BoundaryNodes can make periodic nodes",
2275  }

References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

◆ ncoordinates_on_boundary()

unsigned oomph::Node::ncoordinates_on_boundary ( const unsigned b)
virtual

Get the number of boundary coordinates on mesh boundary b. Broken virtual interface provides run-time error checking

Interface to get the number of boundary coordinates on mesh boundary b. Broken here in order to provide run-time error reporting. Must be overloaded by all boundary nodes.

2364  {
2365  throw OomphLibError("Non-boundary Node cannot have boundary coordinates",
2368  // dummy return
2369  return 0;
2370  }

References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

Referenced by oomph::BackupMeshForProjection< GEOMETRIC_ELEMENT >::BackupMeshForProjection(), oomph::TwoLayerSpineMesh< BASE_ELEMENT >::build_two_layer_mesh(), and ElasticTwoLayerMesh< ELEMENT >::ElasticTwoLayerMesh().

◆ ndim()

unsigned oomph::Node::ndim ( ) const
inline

Return (Eulerian) spatial dimension of the node.

1055  {
1056  return Ndim;
1057  }

References Ndim.

Referenced by oomph::NonLinearElasticitySmoothMesh< ELEMENT >::actions_before_newton_solve(), oomph::Problem::adapt(), oomph::TreeBasedRefineableMeshBase::adapt_mesh(), oomph::SurfactantTransportInterfaceElement::add_additional_residual_contributions_interface(), STSpineMesh< ELEMENT, INTERFACE_ELEMENT >::add_mesh(), oomph::AdvectionDiffusionFluxElement< ELEMENT >::AdvectionDiffusionFluxElement(), oomph::FSI_functions::apply_no_slip_on_moving_wall(), oomph::Newmark< NSTEPS >::assign_initial_data_values(), oomph::SelfStartingBDF2::assign_initial_positions_impulsive(), oomph::Steady< NSTEPS >::assign_initial_positions_impulsive(), oomph::Newmark< NSTEPS >::assign_initial_positions_impulsive(), oomph::BDF< NSTEPS >::assign_initial_positions_impulsive(), oomph::GeneralisedElement::assign_local_eqn_numbers(), oomph::Multi_domain_functions::aux_setup_multi_domain_interaction(), oomph::NonLinearElasticitySmoothMesh< ELEMENT >::backup(), oomph::SolidICProblem::backup_original_state(), oomph::BackupMeshForProjection< GEOMETRIC_ELEMENT >::BackupMeshForProjection(), oomph::RefineableQElement< 3 >::build(), oomph::RefineableQElement< 2 >::build(), oomph::MeshAsGeomObject::build_it(), oomph::BDF< NSTEPS >::calculate_predicted_positions(), oomph::TR::calculate_predicted_positions(), oomph::SelfStartingBDF2::calculate_predicted_positions_bdf2(), oomph::Mesh::check_for_repeated_nodes(), oomph::FiniteElement::check_jacobian(), copy(), oomph::Mesh::delete_all_external_storage(), DependentPositionPointElement::DependentPositionPointElement(), oomph::Mesh::doc_boundary_coordinates(), oomph::FSI_functions::doc_fsi(), PoissonProblem< ELEMENT >::doc_solution(), FallingBlockProblem< ELEMENT >::doc_solution(), RisingBubbleProblem< ELEMENT >::doc_solution(), oomph::DummyErrorEstimator::DummyErrorEstimator(), oomph::ElementWithMovingNodes::fill_in_jacobian_from_geometric_data(), oomph::ElementWithMovingNodes::get_dnodal_coordinates_dgeom_dofs(), oomph::FiniteElement::get_dresidual_dnodal_coordinates(), oomph::RefineableElement::get_dresidual_dnodal_coordinates(), oomph::ProjectablePMLTimeHarmonicLinearElasticityElement< TIME_HARMONIC_LINEAR_ELAST_ELEMENT >::get_field(), oomph::ProjectableTimeHarmonicFourierDecomposedLinearElasticityElement< TIME_HARMONIC_LINEAR_ELAST_ELEMENT >::get_field(), oomph::ProjectableTimeHarmonicLinearElasticityElement< TIME_HARMONIC_LINEAR_ELAST_ELEMENT >::get_field(), ElementAnalysis::getXiCenter(), oomph::FourierDecomposedHelmholtzBCElementBase< ELEMENT >::global_power_contribution(), oomph::PMLFourierDecomposedHelmholtzPowerMonitorElement< ELEMENT >::global_power_contribution(), hanging_pt(), oomph::HeatedPenetratorFluxElement< ELEMENT >::HeatedPenetratorFluxElement(), oomph::HelmholtzBCElementBase< ELEMENT >::HelmholtzBCElementBase(), oomph::HelmholtzFluxElement< ELEMENT >::HelmholtzFluxElement(), oomph::HelmholtzFluxFromNormalDisplacementBCElement< HELMHOLTZ_BULK_ELEMENT, ELASTICITY_BULK_ELEMENT >::HelmholtzFluxFromNormalDisplacementBCElement(), oomph::SolubleSurfactantTransportInterfaceElement::l2_norm_of_height(), oomph::LinearisedAxisymPoroelasticBJS_FSIElement< FLUID_BULK_ELEMENT, POROELASTICITY_BULK_ELEMENT >::LinearisedAxisymPoroelasticBJS_FSIElement(), oomph::LinearisedFSIAxisymmetricNStNoSlipBCElementElement< FLUID_BULK_ELEMENT, SOLID_BULK_ELEMENT >::LinearisedFSIAxisymmetricNStNoSlipBCElementElement(), oomph::LinearWaveFluxElement< ELEMENT >::LinearWaveFluxElement(), oomph::ProjectablePMLTimeHarmonicLinearElasticityElement< TIME_HARMONIC_LINEAR_ELAST_ELEMENT >::local_equation(), oomph::ProjectableTimeHarmonicFourierDecomposedLinearElasticityElement< TIME_HARMONIC_LINEAR_ELAST_ELEMENT >::local_equation(), oomph::ProjectableTimeHarmonicLinearElasticityElement< TIME_HARMONIC_LINEAR_ELAST_ELEMENT >::local_equation(), oomph::MyProblem::my_set_initial_condition(), oomph::NavierStokesFluxControlElement< ELEMENT >::NavierStokesFluxControlElement(), oomph::NavierStokesMixedOrderSpaceTimeTractionElement< ELEMENT >::NavierStokesMixedOrderSpaceTimeTractionElement(), oomph::NavierStokesSpaceTimeTractionElement< ELEMENT >::NavierStokesSpaceTimeTractionElement(), oomph::NavierStokesSurfaceDragTorqueElement< ELEMENT >::NavierStokesSurfaceDragTorqueElement(), oomph::NavierStokesSurfacePowerElement< ELEMENT >::NavierStokesSurfacePowerElement(), oomph::NavierStokesTractionElement< ELEMENT >::NavierStokesTractionElement(), NodeReordering::node_global_position_comparison(), oomph::NodeOrdering::node_global_position_comparison(), oomph::AlgebraicMesh::node_update(), oomph::Mesh::node_update(), oomph::MacroElementNodeUpdateNode::node_update(), CompareNodes::operator()(), CompareNodeCoordinatesX::operator()(), CompareNodeCoordinatesY::operator()(), oomph::NonLinearElasticitySmoothMesh< ELEMENT >::operator()(), oomph::LinearElasticitySmoothMesh< LINEAR_ELASTICITY_ELEMENT >::operator()(), oomph::PoissonSmoothMesh< POISSON_ELEMENT >::operator()(), oomph::HermiteBeamElement::output(), oomph::DummyFaceElement< ELEMENT >::output(), output(), oomph::TriangleMesh< ELEMENT >::output_boundary_coordinates(), oomph::ElementWithExternalElement::output_external_elements(), oomph::FiniteElement::output_paraview(), oomph::TreeBasedRefineableMeshBase::p_adapt_mesh(), oomph::PRefineableQElement< 2, INITIAL_NNODE_1D >::p_refine(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::p_refine(), oomph::Tree::p_refine_if_required(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::pin_all(), oomph::MGSolver< DIM >::plot(), oomph::PMLHelmholtzFluxElement< ELEMENT >::PMLHelmholtzFluxElement(), oomph::PMLHelmholtzFluxFromNormalDisplacementBCElement< HELMHOLTZ_BULK_ELEMENT, ELASTICITY_BULK_ELEMENT >::PMLHelmholtzFluxFromNormalDisplacementBCElement(), oomph::PMLHelmholtzPowerElement< ELEMENT >::PMLHelmholtzPowerElement(), oomph::PoissonFluxElement< ELEMENT >::PoissonFluxElement(), oomph::PolarNavierStokesTractionElement< ELEMENT >::PolarNavierStokesTractionElement(), oomph::PolarStreamfunctionTractionElement< ELEMENT >::PolarStreamfunctionTractionElement(), oomph::PolarStressIntegralElement< ELEMENT >::PolarStressIntegralElement(), position(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::project(), oomph::Data::read(), oomph::PRefineableQElement< 2, INITIAL_NNODE_1D >::rebuild_from_sons(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::rebuild_from_sons(), oomph::RefineableQSpectralElement< 3 >::rebuild_from_sons(), oomph::RefineableQSpectralElement< 2 >::rebuild_from_sons(), oomph::TreeBasedRefineableMeshBase::refine_as_in_reference_mesh(), oomph::NonLinearElasticitySmoothMesh< ELEMENT >::reset(), oomph::SolidICProblem::reset_original_state(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::restore_positions(), oomph::Mesh::scale_mesh(), oomph::AlgebraicNode::self_test(), oomph::Problem::set_pinned_values_to_zero(), set_position_time_stepper(), oomph::MGSolver< DIM >::set_self_test_vector(), oomph::SolidICProblem::setup_problem(), oomph::SelfStartingBDF2::shift_time_positions(), oomph::IMRBase::shift_time_positions(), oomph::Steady< NSTEPS >::shift_time_positions(), oomph::Newmark< NSTEPS >::shift_time_positions(), oomph::NewmarkBDF< NSTEPS >::shift_time_positions(), oomph::BDF< NSTEPS >::shift_time_positions(), SlavePositionPointElement::SlavePositionPointElement(), oomph::Tree::split_if_required(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::store_positions(), oomph::TetMeshVertex::TetMeshVertex(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::unpin_all(), oomph::UnsteadyHeatBaseFaceElement< ELEMENT >::UnsteadyHeatBaseFaceElement(), oomph::UnsteadyHeatFluxElement< ELEMENT >::UnsteadyHeatFluxElement(), oomph::UnsteadyHeatFluxPseudoMeltElement< ELEMENT >::UnsteadyHeatFluxPseudoMeltElement(), oomph::WomersleyMesh< WOMERSLEY_ELEMENT >::WomersleyMesh(), and oomph::YoungLaplaceContactAngleElement< ELEMENT >::YoungLaplaceContactAngleElement().

◆ ngeom_data()

virtual unsigned oomph::Node::ngeom_data ( ) const
inlinevirtual

Return the number of geometric data that affect the nodal position. The default value is zero (node is stationary)

Reimplemented in oomph::SpineNode, and oomph::PerturbedSpineNode.

1626  {
1627  return 0;
1628  }

Referenced by oomph::ElementWithMovingNodes::assemble_set_of_all_geometric_data().

◆ ngeom_object()

virtual unsigned oomph::Node::ngeom_object ( ) const
inlinevirtual

Return the number of geometric objects that affect the nodal position. The default value is zero (node is stationary)

Reimplemented in oomph::SpineNode, oomph::MacroElementNodeUpdateNode, oomph::AlgebraicNode, and oomph::PerturbedSpineNode.

1640  {
1641  return 0;
1642  }

Referenced by oomph::ElementWithMovingNodes::assemble_set_of_all_geometric_data().

◆ node_update()

virtual void oomph::Node::node_update ( const bool update_all_time_levels_for_new_node = false)
inlinevirtual

Interface for functions that update the nodal position using algebraic remeshing strategies. The interface is common to SpineNodes, AlgebraicNodes and MacroElementNodeUpdateNodes. The default is that the node does not "update itself" i.e. it is fixed in space. When implemented, this function should also execute the Node's auxiliary node update function (if any).

Reimplemented in oomph::SpineNode, oomph::SolidNode, oomph::MacroElementNodeUpdateNode, oomph::AlgebraicNode, and oomph::PerturbedSpineNode.

1588  {
1589  }

Referenced by main(), and oomph::FiniteElement::node_update().

◆ nposition_type()

unsigned oomph::Node::nposition_type ( ) const
inline

Number of coordinate types needed in the mapping between local and global coordinates.

1017  {
1018  return Nposition_type;
1019  }

References Nposition_type.

Referenced by oomph::SelfStartingBDF2::assign_initial_positions_impulsive(), oomph::Steady< NSTEPS >::assign_initial_positions_impulsive(), oomph::Newmark< NSTEPS >::assign_initial_positions_impulsive(), oomph::BDF< NSTEPS >::assign_initial_positions_impulsive(), oomph::BackupMeshForProjection< GEOMETRIC_ELEMENT >::BackupMeshForProjection(), oomph::RefineableQElement< 3 >::build(), oomph::RefineableQElement< 1 >::build(), oomph::RefineableQElement< 2 >::build(), copy(), oomph::PRefineableQElement< 1, INITIAL_NNODE_1D >::p_refine(), oomph::PRefineableQElement< 2, INITIAL_NNODE_1D >::p_refine(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::p_refine(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::pin_all(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::pin_dofs_of_coordinate(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::project(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::restore_positions(), oomph::Problem::set_pinned_values_to_zero(), set_position_time_stepper(), oomph::SelfStartingBDF2::shift_time_positions(), oomph::IMRBase::shift_time_positions(), oomph::Steady< NSTEPS >::shift_time_positions(), oomph::Newmark< NSTEPS >::shift_time_positions(), oomph::NewmarkBDF< NSTEPS >::shift_time_positions(), oomph::BDF< NSTEPS >::shift_time_positions(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::store_positions(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::unpin_all(), and oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::unpin_dofs_of_coordinate().

◆ operator=()

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

Broken assignment operator.

◆ output()

void oomph::Node::output ( std::ostream &  outfile)

Output nodal position.

Output nodal coordinates.

2761  {
2762  // Loop over the number of dimensions of the node
2763  const unsigned n_dim = this->ndim();
2764  for (unsigned i = 0; i < n_dim; i++)
2765  {
2766  outfile << x(i) << " ";
2767  }
2768  outfile << std::endl;
2769  }

References i, ndim(), and x().

◆ perform_auxiliary_node_update_fct()

void oomph::Node::perform_auxiliary_node_update_fct ( )
inline

Execute auxiliary update function (if any) – this can be used to update any nodal values following the update of the nodal position. This is needed e.g. to update the no-slip condition on moving boundaries.

1616  {
1617  if (Aux_node_update_fct_pt != 0)
1618  {
1619  Aux_node_update_fct_pt(this);
1620  }
1621  }

References Aux_node_update_fct_pt.

Referenced by oomph::SolidFiniteElement::fill_in_jacobian_from_solid_position_by_fd(), oomph::RefineableSolidElement::fill_in_jacobian_from_solid_position_by_fd(), oomph::RefineablePseudoSolidNodeUpdateElement< BASIC, SOLID >::fill_in_shape_derivatives_by_fd(), oomph::AxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::RefineableAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::GeneralisedNewtonianAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::RefineableGeneralisedNewtonianAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::GeneralisedNewtonianNavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::RefineableGeneralisedNewtonianNavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::FiniteElement::get_dresidual_dnodal_coordinates(), oomph::RefineableElement::get_dresidual_dnodal_coordinates(), oomph::NavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::RefineableNavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::SpaceTimeNavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::RefineableSpaceTimeNavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::AlgebraicMesh::node_update(), and oomph::SolidNode::node_update().

◆ pin_all()

virtual void oomph::Node::pin_all ( )
inlinevirtual

The pin_all() function must be overloaded by SolidNodes, so we put the virtual interface here to avoid virtual functions in Data

Reimplemented in oomph::SolidNode.

1198  {
1199  Data::pin_all();
1200  }
void pin_all()
Pin all the stored variables.
Definition: nodes.h:397

References oomph::Data::pin_all().

Referenced by oomph::SolidNode::pin_all().

◆ position() [1/5]

Vector<double> oomph::Node::position ( void  ) const
inline

Return vector of position of node at current time.

1526  {
1527  Vector<double> pos(ndim(), 0.0);
1528  position(pos);
1529  return pos;
1530  }

References ndim().

Referenced by dposition_dt(), and position().

◆ position() [2/5]

double oomph::Node::position ( const unsigned i) const

Return i-th nodal coordinate either directly or via hanging node representation.

2529  {
2530  double posn = 0.0;
2531 
2532  // Non-hanging node: just return value
2533  if (!is_hanging())
2534  {
2535  posn = x(i);
2536  }
2537  // Hanging node: Use hanging node representation
2538  else
2539  {
2540  // Initialise
2541  double interpolated_position = 0.0;
2542 
2543  // Add contribution from master nodes
2544  const unsigned n_master = hanging_pt()->nmaster();
2545  for (unsigned m = 0; m < n_master; m++)
2546  {
2547  interpolated_position += hanging_pt()->master_node_pt(m)->x(i) *
2549  }
2550  posn = interpolated_position;
2551  }
2552  return posn;
2553  }
double const & master_weight(const unsigned &i) const
Return weight for dofs on i-th master node.
Definition: nodes.h:808
Node *const & master_node_pt(const unsigned &i) const
Return a pointer to the i-th master node.
Definition: nodes.h:791
unsigned nmaster() const
Return the number of master nodes.
Definition: nodes.h:785
HangInfo *const & hanging_pt() const
Definition: nodes.h:1228
int * m
Definition: level2_cplx_impl.h:294

References hanging_pt(), i, is_hanging(), m, oomph::HangInfo::master_node_pt(), oomph::HangInfo::master_weight(), oomph::HangInfo::nmaster(), and x().

◆ position() [3/5]

double oomph::Node::position ( const unsigned t,
const unsigned i 
) const

Return i-th nodal coordinate at time level t (t=0: current; t>0: previous time level), either directly or via hanging node representation.

2561  {
2562  double posn = 0.0;
2563 
2564  // Non-hanging node: just return value
2565  if (!is_hanging())
2566  {
2567  posn = x(t, i);
2568  }
2569  // Hanging node: Use hanging node representation
2570  else
2571  {
2572  // Initialise
2573  double interpolated_position = 0.0;
2574 
2575  // Add contribution from master nodes
2576  const unsigned n_master = hanging_pt()->nmaster();
2577  for (unsigned m = 0; m < n_master; m++)
2578  {
2579  interpolated_position += hanging_pt()->master_node_pt(m)->x(t, i) *
2581  }
2582  posn = interpolated_position;
2583  }
2584 
2585  return posn;
2586  }

References hanging_pt(), i, is_hanging(), m, oomph::HangInfo::master_node_pt(), oomph::HangInfo::master_weight(), oomph::HangInfo::nmaster(), plotPSD::t, and x().

◆ position() [4/5]

void oomph::Node::position ( const unsigned t,
Vector< double > &  pos 
) const

Compute Vector of nodal position at time level t (t=0: current; t>0: previous timestep), either directly or via hanging node representation.

Compute Vector of nodal position at timestep t (t=0: current; t>0: previous timestep), either directly or via hanging node representation.

2515  {
2516  // Assign all positions, using hanging node representation where necessary
2517  const unsigned n_dim = ndim();
2518  for (unsigned i = 0; i < n_dim; i++)
2519  {
2520  pos[i] = position(t, i);
2521  }
2522  }

References i, ndim(), position(), and plotPSD::t.

◆ position() [5/5]

◆ position_gen() [1/2]

double oomph::Node::position_gen ( const unsigned k,
const unsigned i 
) const

Return generalised nodal coordinate either directly or via hanging node representation.

2593  {
2594  double posn = 0.0;
2595 
2596  // Non-hanging node: just return value
2597  if (!is_hanging())
2598  {
2599  posn = x_gen(k, i);
2600  }
2601  // Hanging node: Use hanging node representation
2602  else
2603  {
2604  // Initialise
2605  double interpolated_position = 0.0;
2606 
2607  // Add contribution from master nodes
2608  const unsigned n_master = hanging_pt()->nmaster();
2609  for (unsigned m = 0; m < n_master; m++)
2610  {
2611  interpolated_position += hanging_pt()->master_node_pt(m)->x_gen(k, i) *
2613  }
2614  posn = interpolated_position;
2615  }
2616  return posn;
2617  }

References hanging_pt(), i, is_hanging(), k, m, oomph::HangInfo::master_node_pt(), oomph::HangInfo::master_weight(), oomph::HangInfo::nmaster(), and x_gen().

Referenced by dposition_gen_dt(), and oomph::FiniteElement::nodal_position_gen().

◆ position_gen() [2/2]

double oomph::Node::position_gen ( const unsigned t,
const unsigned k,
const unsigned i 
) const

Return generalised nodal coordinate at time level t (t=0: current; t>0: previous time level), either directly or via hanging node representation.

2627  {
2628  double posn = 0.0;
2629 
2630  // Non-hanging node: just return value
2631  if (!is_hanging())
2632  {
2633  posn = x_gen(t, k, i);
2634  }
2635  // Hanging node: Use hanging node representation
2636  else
2637  {
2638  // Initialise
2639  double interpolated_position = 0.0;
2640 
2641  // Add contribution from master nodes
2642  const unsigned n_master = hanging_pt()->nmaster();
2643  for (unsigned m = 0; m < n_master; m++)
2644  {
2645  interpolated_position +=
2646  hanging_pt()->master_node_pt(m)->x_gen(t, k, i) *
2648  }
2649  posn = interpolated_position;
2650  }
2651 
2652  return posn;
2653  }

References hanging_pt(), i, is_hanging(), k, m, oomph::HangInfo::master_node_pt(), oomph::HangInfo::master_weight(), oomph::HangInfo::nmaster(), plotPSD::t, and x_gen().

◆ position_is_a_copy() [1/2]

◆ position_is_a_copy() [2/2]

virtual bool oomph::Node::position_is_a_copy ( const unsigned i) const
inlinevirtual

Return whether the position coordinate i has been copied (always false)

Reimplemented in oomph::SolidNode.

1120  {
1121  return false;
1122  }

◆ position_time_stepper_pt() [1/2]

TimeStepper*& oomph::Node::position_time_stepper_pt ( )
inline

Return a pointer to the position timestepper.

1023  {
1024  return Position_time_stepper_pt;
1025  }

References Position_time_stepper_pt.

Referenced by oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::algebraic_node_update(), oomph::AlgebraicFSIDrivenCavityMesh< ELEMENT >::algebraic_node_update(), copy(), oomph::LinearisedAxisymmetricNavierStokesEquations::dnodal_position_perturbation_dt_lin_axi_nst(), oomph::LinearisedAxisymmetricFluidInterfaceElement::dXhat_dt(), oomph::RefineableQDPVDElement< DIM, NNODE_1D >::fill_in_generic_contribution_to_residuals_pvd(), oomph::LinearisedAxisymmetricNavierStokesEquations::fill_in_generic_residual_contribution_lin_axi_nst(), oomph::SolidFiniteElement::fill_in_jacobian_for_newmark_accel(), oomph::AxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::RefineableAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::GeneralisedNewtonianAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::RefineableGeneralisedNewtonianAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::ProjectableAdvectionDiffusionReactionElement< ADR_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableAxisymLinearElasticityElement< AXISYM_LINEAR_ELAST_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableAxisymmetricTaylorHoodElement< TAYLOR_HOOD_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableAxisymmetricCrouzeixRaviartElement< CROUZEIX_RAVIART_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableAxisymmetricPoroelasticityElement< AXISYMMETRIC_POROELASTICITY_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableDarcyElement< DARCY_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableDisplacementBasedFoepplvonKarmanElement< FVK_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableFoepplvonKarmanElement< FVK_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableFourierDecomposedHelmholtzElement< FOURIER_DECOMPOSED_HELMHOLTZ_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::GeneralisedNewtonianProjectableAxisymmetricTaylorHoodElement< TAYLOR_HOOD_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::GeneralisedNewtonianProjectableAxisymmetricCrouzeixRaviartElement< CROUZEIX_RAVIART_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableGeneralisedNewtonianTaylorHoodElement< TAYLOR_HOOD_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableGeneralisedNewtonianCrouzeixRaviartElement< CROUZEIX_RAVIART_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::GenericLagrangeInterpolatedProjectableElement< ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableHelmholtzElement< HELMHOLTZ_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableLinearElasticityElement< LINEAR_ELAST_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectablePMLFourierDecomposedHelmholtzElement< FOURIER_DECOMPOSED_HELMHOLTZ_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectablePMLHelmholtzElement< HELMHOLTZ_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectablePMLTimeHarmonicLinearElasticityElement< TIME_HARMONIC_LINEAR_ELAST_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectablePoissonElement< POISSON_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectablePVDElement< PVD_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectablePVDElementWithContinuousPressure< PVD_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableUnsteadyHeatSpaceTimeElement< UNSTEADY_HEAT_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableUnsteadyHeatMixedOrderSpaceTimeElement< UNSTEADY_HEAT_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableTimeHarmonicFourierDecomposedLinearElasticityElement< TIME_HARMONIC_LINEAR_ELAST_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableTimeHarmonicLinearElasticityElement< TIME_HARMONIC_LINEAR_ELAST_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::ProjectableUnsteadyHeatElement< UNSTEADY_HEAT_ELEMENT >::nhistory_values_for_coordinate_projection(), oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update_central_region(), oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >::node_update_in_central_box(), oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >::node_update_in_lower_right_box(), oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >::node_update_in_upper_left_box(), oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update_lower_right_region(), oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update_upper_left_region(), oomph::MyTaylorHoodElement< DIM >::output(), oomph::ProjectableUnsteadyHeatSpaceTimeElement< UNSTEADY_HEAT_ELEMENT >::output(), oomph::ProjectableUnsteadyHeatMixedOrderSpaceTimeElement< UNSTEADY_HEAT_ELEMENT >::output(), oomph::ProjectableUnsteadyHeatElement< UNSTEADY_HEAT_ELEMENT >::output(), oomph::ContinuationStorageScheme::set_consistent_pinned_positions(), set_position_time_stepper(), oomph::SolidNode::set_position_time_stepper(), oomph::TetMeshBase::snap_nodes_onto_geometric_objects(), and oomph::UnstructuredTwoDMeshGeometryBase::snap_nodes_onto_geometric_objects().

◆ position_time_stepper_pt() [2/2]

TimeStepper* const& oomph::Node::position_time_stepper_pt ( ) const
inline

Return a pointer to the position timestepper (const version).

1029  {
1030  return Position_time_stepper_pt;
1031  }

References Position_time_stepper_pt.

◆ raw_value() [1/2]

double oomph::Node::raw_value ( const unsigned i) const
inline

Return the i-th value stored at the Node. This interface does NOT take the hanging status of the Node into account.

1456  {
1457  return Data::value(i);
1458  }
double value(const unsigned &i) const
Definition: nodes.h:293

References i, and oomph::Data::value().

Referenced by oomph::TreeBasedRefineableMeshBase::adapt_mesh(), oomph::TreeBasedRefineableMeshBase::p_adapt_mesh(), oomph::FiniteElement::raw_nodal_value(), and value().

◆ raw_value() [2/2]

double oomph::Node::raw_value ( const unsigned t,
const unsigned i 
) const
inline

Return the i-th value at time level t (t=0: present, t>0: previous). This interface does NOT take the hanging status of the Node into account.

1464  {
1465  return Data::value(t, i);
1466  }

References i, plotPSD::t, and oomph::Data::value().

◆ read()

void oomph::Node::read ( std::ifstream &  restart_file)

Read nodal position and associated data from file for restart.

Read nodal positions and associated data from file for restart.

1997  {
1998  std::string input_string;
1999 
2000  // Number of positional values
2001  const unsigned npos_storage = Ndim * Nposition_type;
2002 
2003  // Read line up to termination sign
2004  getline(restart_file, input_string, '#');
2005  // Ignore rest of line
2006  restart_file.ignore(80, '\n');
2007  // Check # of values:
2008  const unsigned long check_npos_storage = atoi(input_string.c_str());
2009  if (check_npos_storage != npos_storage)
2010  {
2011  std::ostringstream error_stream;
2012  error_stream << "The allocated positional storage " << npos_storage
2013  << " is not the same as that in the input file"
2014  << check_npos_storage << std::endl;
2015 
2016  throw OomphLibError(
2017  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
2018  }
2019 
2020  // Number of time values (incl present)
2021  const unsigned time_steps_range = Position_time_stepper_pt->ntstorage();
2022 
2023  // Read line up to termination sign
2024  getline(restart_file, input_string, '#');
2025  // Ignore rest of line
2026  restart_file.ignore(80, '\n');
2027  // Check # of values:
2028  const unsigned long check_time_steps_range = atoi(input_string.c_str());
2029  if (check_time_steps_range != time_steps_range)
2030  {
2031  std::ostringstream error_stream;
2032  error_stream
2033  << "Number of positional history values in dump file is less "
2034  << "than the storage allocated in Node object: "
2035  << check_time_steps_range << " " << time_steps_range << std::endl;
2036 
2037  throw OomphLibError(
2038  error_stream.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
2039  }
2040 
2041  // Read fixed nodal positions
2042  for (unsigned t = 0; t < time_steps_range; t++)
2043  {
2044  for (unsigned j = 0; j < npos_storage; j++)
2045  {
2046  // Read line
2047  getline(restart_file, input_string);
2048 
2049  // Transform to double
2050  X_position[j][t] = atof(input_string.c_str());
2051  }
2052  }
2053 
2054  // Read associated data
2055  Data::read(restart_file);
2056  }
void read(std::ifstream &restart_file)
Read data object from a file.
Definition: nodes.cc:672
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286

References j, Ndim, Nposition_type, oomph::TimeStepper::ntstorage(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, Position_time_stepper_pt, oomph::Data::read(), oomph::Global_string_for_annotation::string(), plotPSD::t, and X_position.

Referenced by oomph::Mesh::read(), and oomph::SolidNode::read().

◆ remove_from_boundary()

void oomph::Node::remove_from_boundary ( const unsigned b)
virtual

◆ resize()

void oomph::Node::resize ( const unsigned n_value)
virtual

Resize the number of equations.

Resize the node to allow it to store n_value unknowns.

Reimplemented from oomph::Data.

2168  {
2169  // Old number of values
2170  unsigned old_nvalue = nvalue();
2171 
2172  // Now deal with the hanging Data (if any)
2173  HangInfo** backup_hanging_pt = 0;
2174  if (Hanging_pt != 0)
2175  {
2176  // Backup
2177  backup_hanging_pt = new HangInfo*[old_nvalue + 1];
2178 
2179  // Copy across existing ones
2180  for (unsigned i = 0; i < old_nvalue + 1; i++)
2181  {
2182  backup_hanging_pt[i] = Hanging_pt[i];
2183  }
2184 
2185  // Cleanup old one
2186  delete[] Hanging_pt;
2187  Hanging_pt = 0;
2188  }
2189 
2190  // Call the resize function for the underlying Data object
2191  Data::resize(n_value);
2192 
2193 
2194  // Now deal with the hanging Data (if any)
2195  if (backup_hanging_pt != 0)
2196  {
2197  // The size of the new hanging point is the number of new values plus one.
2198  const unsigned n_hang = n_value + 1;
2199  Hanging_pt = new HangInfo*[n_hang];
2200  // Initialise all entries to zero
2201  for (unsigned i = 0; i < n_hang; i++)
2202  {
2203  Hanging_pt[i] = 0;
2204  }
2205 
2206  // Restore the saved data
2207  for (unsigned i = 0; i <= old_nvalue; i++)
2208  {
2209  Hanging_pt[i] = backup_hanging_pt[i];
2210  }
2211 
2212  // Loop over the new values and set equal to the geometric hanging data
2213  for (unsigned i = old_nvalue + 1; i < n_hang; i++)
2214  {
2215  Hanging_pt[i] = Hanging_pt[0];
2216  // and constrain if necessary
2217  if (Hanging_pt[i] != 0)
2218  {
2219  constrain(i - 1);
2220  }
2221  else
2222  {
2223  unconstrain(i - 1);
2224  }
2225  }
2226 
2227  // If necessary constrain
2228  // Positions
2229  // if(Hanging_pt[0] != 0) {constrain_positions();}
2230  // Values
2231  // for(unsigned i=0;i<n_value;i++)
2232  // {
2233  // if(Hanging_pt[i+1] != 0) {constrain(i);}
2234  // }
2235 
2236  // Loop over all values and geom hanging data
2237  /*for (int i=-1;i<int(old_nvalue);i++)
2238  {
2239  set_hanging_pt(backup_hanging_pt[i+1],i);
2240  }
2241 
2242  // By default use geometric hanging data for any new entries
2243  for (int i=int(old_nvalue);i<int(n_value);i++)
2244  {
2245  set_hanging_pt(backup_hanging_pt[0],i);
2246  }*/
2247 
2248  delete[] backup_hanging_pt;
2249  }
2250  }
virtual void resize(const unsigned &n_value)
Change (increase) the number of values that may be stored.
Definition: nodes.cc:1002
void unconstrain(const unsigned &i)
Definition: nodes.h:442

References oomph::Data::constrain(), Hanging_pt, i, oomph::Data::nvalue(), oomph::Data::resize(), and oomph::Data::unconstrain().

Referenced by oomph::TriangleMesh< ELEMENT >::build_from_scaffold(), and oomph::FaceElement::resize_nodes().

◆ set_auxiliary_node_update_fct_pt()

void oomph::Node::set_auxiliary_node_update_fct_pt ( AuxNodeUpdateFctPt  aux_node_update_fct_pt)
inline

Set pointer to auxiliary update function – this can be used to update any nodal values following the update of the nodal position. This is needed e.g. to update the no-slip condition on moving boundaries.

1598  {
1599  // Set pointer (by default it's set to NULL)
1600  Aux_node_update_fct_pt = aux_node_update_fct_pt;
1601  }

References Aux_node_update_fct_pt.

Referenced by AirwayReopeningProblem< ELEMENT >::AirwayReopeningProblem(), UnstructuredImmersedEllipseProblem< ELEMENT >::complete_problem_setup(), UnstructuredFluidProblem< ELEMENT >::complete_problem_setup(), FSIRingProblem::FSIRingProblem(), and OscRingNStProblem< ELEMENT >::OscRingNStProblem().

◆ set_coordinates_on_boundary() [1/2]

void oomph::Node::set_coordinates_on_boundary ( const unsigned b,
const unsigned k,
const Vector< double > &  boundary_zeta 
)
virtual

Set the vector of the k-th generalised boundary coordinates on mesh boundary b. Broken virtual interface provides run-time error checking

Interface for function to set the k-th generalised boundary coordinate of the node on boundary b. Broken here to provide run-time error reports. Must be overloaded by all boundary nodes.

2397  {
2398  throw OomphLibError("Non-boundary Node cannot have boundary coordinates",
2401  }

References OOMPH_CURRENT_FUNCTION, and OOMPH_EXCEPTION_LOCATION.

Referenced by AirwayReopeningProblem< ELEMENT >::AirwayReopeningProblem(), oomph::BackupMeshForProjection< GEOMETRIC_ELEMENT >::BackupMeshForProjection(), oomph::RefineableQElement< 3 >::build(), oomph::RefineableQElement< 2 >::build(), oomph::BrickFromTetMesh< ELEMENT >::build_mesh(), oomph::TwoLayerSpineMesh< BASE_ELEMENT >::build_two_layer_mesh(), oomph::ChannelWithLeafletMesh< ELEMENT >::ChannelWithLeafletMesh(), oomph::CollapsibleChannelMesh< ELEMENT >::CollapsibleChannelMesh(), oomph::ElasticRefineableRectangularQuadMesh< ELEMENT >::ElasticRefineableRectangularQuadMesh(), ElasticRefineableTwoLayerMesh< ELEMENT >::ElasticRefineableTwoLayerMesh(), ElasticTwoLayerMesh< ELEMENT >::ElasticTwoLayerMesh(), oomph::FSIDrivenCavityMesh< ELEMENT >::FSIDrivenCavityMesh(), oomph::PRefineableQElement< 2, INITIAL_NNODE_1D >::p_refine(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::p_refine(), oomph::QuarterPipeMesh< ELEMENT >::QuarterPipeMesh(), oomph::PRefineableQElement< 2, INITIAL_NNODE_1D >::rebuild_from_sons(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::rebuild_from_sons(), RefineableElasticCubicMesh< ELEMENT >::RefineableElasticCubicMesh(), oomph::RefineableSolidCubicMesh< ELEMENT >::RefineableSolidCubicMesh(), oomph::BrethertonSpineMesh< ELEMENT, INTERFACE_ELEMENT >::reposition_spines(), set_coordinates_on_boundary(), oomph::TetMeshBase::setup_boundary_coordinates(), oomph::XdaTetMesh< ELEMENT >::setup_boundary_coordinates(), oomph::UnstructuredTwoDMeshGeometryBase::setup_boundary_coordinates(), oomph::TetMeshBase::snap_to_quadratic_surface(), oomph::ThinLayerBrickOnTetMesh< ELEMENT >::ThinLayerBrickOnTetMesh(), and WallMesh< ELEMENT >::WallMesh().

◆ set_coordinates_on_boundary() [2/2]

virtual void oomph::Node::set_coordinates_on_boundary ( const unsigned b,
const Vector< double > &  boundary_zeta 
)
inlinevirtual

Set the vector of coordinates on mesh boundary b Broken virtual interface provides run-time error checking

1430  {
1431  set_coordinates_on_boundary(b, 0, boundary_zeta);
1432  }
virtual void set_coordinates_on_boundary(const unsigned &b, const unsigned &k, const Vector< double > &boundary_zeta)
Definition: nodes.cc:2394

References b, and set_coordinates_on_boundary().

◆ set_hanging_pt()

void oomph::Node::set_hanging_pt ( HangInfo *const &  hang_pt,
const int i 
)

Set the hanging data for the i-th value. (hang_pt=0 to make non-hanging)

Set the hanging data for the i-th value. If node is already hanging, simply overwrite the appropriate entry. If the node isn't hanging (because it might not be hanging geometrically), create the Vector of hanging pointers and make the other entries point to the node's geometric hanging data. Set hang_pt=0 to make entry explicitly non-hanging. Use Node::set_nonhanging() to unhang everything and clear up storage.

2069  {
2070  // The number of hanging values is the number of stored values plus
2071  // one (geometry)
2072  unsigned n_hang = nvalue() + 1;
2073 
2074  // Has the vector of pointers to the HangInfo objects already been created?
2075  // If not create it
2076  if (Hanging_pt == 0)
2077  {
2078  Hanging_pt = new HangInfo*[n_hang];
2079  // Initialise all entries to zero
2080  for (unsigned n = 0; n < n_hang; n++)
2081  {
2082  Hanging_pt[n] = 0;
2083  }
2084  }
2085 
2086  // Geometric hanging data
2087  if (i == -1)
2088  {
2089  // Setup boolean array to find which pointers match the geometric pointer
2090  std::vector<bool> Same_as_geometric(n_hang, true);
2091 
2092  // Mark up any values that DON'T use the geometric hanging scheme
2093  for (unsigned n = 1; n < n_hang; n++)
2094  {
2095  if (Hanging_pt[n] != Hanging_pt[0])
2096  {
2097  Same_as_geometric[n] = false;
2098  }
2099  }
2100 
2101  // Remove the old geometric HangInfo
2102  delete Hanging_pt[0];
2103  // Assign the new geometric hanging data
2104  Hanging_pt[0] = hang_pt;
2105 
2106  // Constrain the geometric data (virtual function that is
2107  // overladed in solid nodes)
2108  if (hang_pt != 0)
2109  {
2111  }
2112  else
2113  {
2115  }
2116 
2117  // Loop over the entries again and update all pointers that pointed to
2118  // the geometric data
2119  for (unsigned n = 1; n < n_hang; n++)
2120  {
2121  if (Same_as_geometric[n] == true)
2122  {
2123  Hanging_pt[n] = Hanging_pt[0];
2124 
2125  // In addition set the corresponding value to be constrained (hanging)
2126  if (Hanging_pt[n] != 0)
2127  {
2128  constrain(n - 1);
2129  }
2130  else
2131  {
2132  unconstrain(n - 1);
2133  }
2134  }
2135  }
2136  }
2137  // Value data
2138  else
2139  {
2140  // If the data is different from geometric, delete it
2141  if (Hanging_pt[i + 1] != Hanging_pt[0])
2142  {
2143  delete Hanging_pt[i + 1];
2144  Hanging_pt[i + 1] = 0;
2145  }
2146 
2147  // Overwrite hanging data for the required value
2148  // Do not need to delete previous value, because it is assigned outside
2149  // the Node class
2150  Hanging_pt[i + 1] = hang_pt;
2151 
2152  // In addition set the value to be constrained (hanging)
2153  if (hang_pt != 0)
2154  {
2155  constrain(i);
2156  }
2157  else
2158  {
2159  unconstrain(i);
2160  }
2161  }
2162  }
const unsigned n
Definition: CG3DPackingUnitTest.cpp:11
virtual void constrain_positions()
Definition: nodes.h:1345
virtual void unconstrain_positions()
Definition: nodes.h:1349

References oomph::Data::constrain(), constrain_positions(), Hanging_pt, i, n, oomph::Data::nvalue(), oomph::Data::unconstrain(), and unconstrain_positions().

Referenced by oomph::TreeBasedRefineableMeshBase::complete_hanging_nodes(), oomph::RefineableQElement< 3 >::oc_hang_helper(), and oomph::RefineableQElement< 2 >::quad_hang_helper().

◆ set_non_obsolete()

void oomph::Node::set_non_obsolete ( )
inline

Mark node as non-obsolete.

1443  {
1444  Obsolete = false;
1445  }

References Obsolete.

Referenced by oomph::TreeBasedRefineableMeshBase::adapt_mesh(), oomph::TreeBasedRefineableMeshBase::p_adapt_mesh(), and oomph::RefineableElement::unbuild().

◆ set_nonhanging()

void oomph::Node::set_nonhanging ( )

Label node as non-hanging node by removing all hanging node data.

2282  {
2283  if (Hanging_pt != 0)
2284  {
2285  // Kill any additional hanging data for values
2286  const unsigned nhang = nvalue() + 1;
2287  for (unsigned ival = 1; ival < nhang; ival++)
2288  {
2289  // Only kill it if it's different from the geometric hanging node data
2290  if (Hanging_pt[ival] != Hanging_pt[0])
2291  {
2292  delete Hanging_pt[ival];
2293  }
2294  // Always zero the entry
2295  Hanging_pt[ival] = 0;
2296 
2297  // Unconstrain any values that were constrained only because they
2298  // were hanging
2299  unconstrain(ival - 1);
2300  }
2301 
2302  // Unconstrain the positions (virtual function that is overloaded for
2303  // solid nodes)
2305 
2306  // Kill the geometric hanging node data
2307  delete Hanging_pt[0];
2308  Hanging_pt[0] = 0;
2309 
2310  // Kill the pointer to all hanging data
2311  delete[] Hanging_pt;
2312  Hanging_pt = 0;
2313  }
2314  }

References Hanging_pt, oomph::Data::nvalue(), oomph::Data::unconstrain(), and unconstrain_positions().

Referenced by oomph::TreeBasedRefineableMeshBase::adapt_mesh(), oomph::Mesh::delete_all_external_storage(), and oomph::TreeBasedRefineableMeshBase::p_adapt_mesh().

◆ set_obsolete()

◆ set_position_time_stepper()

void oomph::Node::set_position_time_stepper ( TimeStepper *const &  position_time_stepper_pt,
const bool preserve_existing_data 
)
virtual

Set a new position timestepper be resizing the appropriate storage

Set a new position TimeStepper be resizing the appropriate storage. The current (zero) values will be unaffected, but all other entries will be set to zero.

Reimplemented in oomph::SolidNode.

1755  {
1756  // If the timestepper is unchanged do nothing
1758  {
1759  return;
1760  }
1761 
1762  // Find the amount of data to be preserved
1763  unsigned n_preserved_tstorage = 1;
1764  if (preserve_existing_data)
1765  {
1766  n_preserved_tstorage = Position_time_stepper_pt->ntstorage();
1767  }
1768 
1769  // Set the new time stepper
1771 
1772  // Determine the total amount of storage required for position variables
1773  const unsigned n_storage = this->ndim() * this->nposition_type();
1774 
1775  // Amount of storage required for history values
1776  const unsigned n_tstorage = Position_time_stepper_pt->ntstorage();
1777 
1778  // Allocate all position data in one big array
1779  double* x_positions = new double[n_storage * n_tstorage];
1780 
1781  // If we have reduced the storage, reduce the size of preserved storage
1782  // to that of the new storage
1783  if (n_tstorage < n_preserved_tstorage)
1784  {
1785  n_preserved_tstorage = n_tstorage;
1786  }
1787 
1788  // Copy the old "preserved" positions into the new storage scheme
1789  for (unsigned j = 0; j < n_storage; ++j)
1790  {
1791  for (unsigned t = 0; t < n_preserved_tstorage; t++)
1792  {
1793  x_positions[j * n_tstorage + t] = this->X_position[j][t];
1794  }
1795  }
1796 
1797  // Now delete the old position storage, which was allocated in one block
1798  delete[] X_position[0];
1799 
1800  // Set the pointers to the contiguous memory
1801  for (unsigned j = 0; j < n_storage; j++)
1802  {
1803  // Set the pointer from the bug array
1804  X_position[j] = &x_positions[j * n_tstorage];
1805  // Initialise all new time storgae values to be zero
1806  for (unsigned t = n_preserved_tstorage; t < n_tstorage; t++)
1807  {
1808  X_position[j][t] = 0.0;
1809  }
1810  }
1811  }
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
Definition: nodes.h:1022
unsigned nposition_type() const
Definition: nodes.h:1016

References j, ndim(), nposition_type(), oomph::TimeStepper::ntstorage(), Position_time_stepper_pt, position_time_stepper_pt(), plotPSD::t, and X_position.

◆ unconstrain_positions()

virtual void oomph::Node::unconstrain_positions ( )
inlinevirtual

Unconstrain the positions when the node is made non-hanging Empty virtual function that is overloaded in SolidNodes

Reimplemented in oomph::SolidNode.

1349 {}

Referenced by set_hanging_pt(), and set_nonhanging().

◆ unpin_all()

virtual void oomph::Node::unpin_all ( )
inlinevirtual

The unpin_all() function must be overloaded by SolidNode, so we put the virtual interface here to avoid virtual functions in Data

Reimplemented in oomph::SolidNode.

1205  {
1206  Data::unpin_all();
1207  }
void unpin_all()
Unpin all the stored variables.
Definition: nodes.h:407

References oomph::Data::unpin_all().

Referenced by oomph::SolidNode::unpin_all().

◆ value() [1/5]

Vector<double> oomph::Node::value ( ) const
inline

Return vector of values calculated using value(vector).

1503  {
1504  Vector<double> vals(nvalue(), 0.0);
1505  value(vals);
1506  return vals;
1507  }
Vector< double > value() const
Return vector of values calculated using value(vector).
Definition: nodes.h:1502

References oomph::Data::nvalue().

Referenced by value().

◆ value() [2/5]

double oomph::Node::value ( const unsigned i) const

Return i-th value (dofs or pinned) at this node either directly or via hanging node representation. Note that this REDFINES the interface in Data Thus, the present function will be called provided that it is accessed through a pointer to a node i.e. Node* node_pt->value() will take hanging information into account. If a pointer to a Node has been explicitly down-cast to a pointer to Data then the "wrong" (Data) version of the function will be called.

Return i-th value (free or pinned) at this node either directly or via hanging node representation.

2409  {
2410  // If value is not hanging, just return the underlying value
2411  if (!is_hanging(i))
2412  {
2413  return raw_value(i);
2414  }
2415  // Hanging node: Use hanging node representation
2416  else
2417  {
2418  // Initialise
2419  double sum = 0.0;
2420  // Add contribution from master nodes
2421  const unsigned n_master = hanging_pt(i)->nmaster();
2422  for (unsigned m = 0; m < n_master; m++)
2423  {
2424  // A master node cannot be hanging by definition.
2425  // so we get the raw value to avoid an unnecessary it
2426  sum += hanging_pt(i)->master_node_pt(m)->raw_value(i) *
2428  }
2429  return sum;
2430  }
2431  }
double raw_value(const unsigned &i) const
Definition: nodes.h:1455

References hanging_pt(), i, is_hanging(), m, oomph::HangInfo::master_node_pt(), oomph::HangInfo::master_weight(), oomph::HangInfo::nmaster(), and raw_value().

Referenced by oomph::TreeBasedRefineableMeshBase::adapt_mesh(), oomph::PeriodicOrbitAssemblyHandler< NNODE_1D >::adapt_temporal_mesh(), oomph::BackupMeshForProjection< GEOMETRIC_ELEMENT >::BackupMeshForProjection(), HeatedCircularPenetratorElement::centre(), oomph::BoundaryNode< NODE_TYPE >::clear_copied_pointers(), ContactProblem< ELEMENT >::complete_problem_setup(), oomph::StefanBoltzmannRadiationBase::contribution_to_stefan_boltzmann_radiation(), oomph::AxisymmetricVolumeConstraintBoundingElement::contribution_to_volume_flux(), oomph::LinearisedQCrouzeixRaviartElement::copy_efunction_to_normalisation(), oomph::BackupMeshForProjection< GEOMETRIC_ELEMENT >::copy_onto_original_mesh(), oomph::Mesh::delete_all_external_storage(), RayleighProblem< ELEMENT, TIMESTEPPER >::doc_solution(), RayleighTractionProblem< ELEMENT, TIMESTEPPER >::doc_solution(), oomph::LinearisedAxisymmetricFluidInterfaceElement::dXhat_dt(), HeatedCircularPenetratorElement::fill_in_contribution_to_residuals(), oomph::ClampedSlidingHermiteBeamBoundaryConditionElement::fill_in_contribution_to_residuals(), oomph::ClampedHermiteShellBoundaryConditionElement::fill_in_contribution_to_residuals(), oomph::HeightControlElement::fill_in_contribution_to_residuals(), oomph::NonlinearSurfaceContactElement< ELEMENT >::fill_in_contribution_to_residuals_surface_contact(), oomph::LinearSurfaceContactElement< ELEMENT >::fill_in_contribution_to_residuals_surface_contact(), oomph::HeatedLinearSurfaceContactElement< ELEMENT >::fill_in_contribution_to_residuals_surface_contact(), oomph::SurfaceMeltElement< ELEMENT >::fill_in_contribution_to_residuals_surface_melt(), oomph::ImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::fill_in_generic_contribution_to_residuals_displ_lagr_multiplier(), oomph::FSIImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::fill_in_generic_contribution_to_residuals_fsi_displ_lagr_multiplier(), DependentPositionPointElement::fill_in_generic_contribution_to_residuals_match_position(), SlavePositionPointElement::fill_in_generic_contribution_to_residuals_match_position(), oomph::ImposeImpenetrabilityElement< ELEMENT >::fill_in_generic_contribution_to_residuals_parall_lagr_multiplier(), oomph::ImposeParallelOutflowElement< ELEMENT >::fill_in_generic_contribution_to_residuals_parall_lagr_multiplier(), oomph::LinearisedAxisymPoroelasticBJS_FSIElement< FLUID_BULK_ELEMENT, POROELASTICITY_BULK_ELEMENT >::fill_in_generic_residual_contribution_axisym_poroelastic_fsi(), oomph::BiharmonicFluidBoundaryElement::fill_in_generic_residual_contribution_biharmonic_boundary(), oomph::LinearisedFSIAxisymmetricNStNoSlipBCElementElement< FLUID_BULK_ELEMENT, SOLID_BULK_ELEMENT >::fill_in_generic_residual_contribution_fsi_no_slip_axisym(), oomph::UnsteadyHeatFluxPseudoMeltElement< ELEMENT >::fill_in_generic_residual_contribution_ust_heat_flux(), oomph::Problem::get_dofs(), oomph::MyProblem::get_error_norm(), oomph::SurfaceContactElementBase< ELEMENT >::get_interpolated_lagrange_p(), oomph::SurfaceMeltElement< ELEMENT >::get_interpolated_lagrange_p(), oomph::BiharmonicEquations< DIM >::interpolated_dudx(), oomph::SurfaceMeltElement< ELEMENT >::interpolated_melt_rate(), oomph::DGFaceElement::interpolated_u(), main(), oomph::FiniteElement::nodal_value(), oomph::LinearElasticitySmoothMesh< LINEAR_ELASTICITY_ELEMENT >::operator()(), oomph::PoissonSmoothMesh< POISSON_ELEMENT >::operator()(), oomph::UnsteadyHeatFluxPseudoMeltElement< ELEMENT >::output(), oomph::ClampedHermiteShellBoundaryConditionElement::output(), oomph::ImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::output(), oomph::FSIImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::output(), oomph::TreeBasedRefineableMeshBase::p_adapt_mesh(), oomph::UnsteadyHeatFluxPseudoMeltElement< ELEMENT >::plot_residual_landscape(), oomph::RefineableImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::refineable_fill_in_generic_contribution_to_residuals_displ_lagr_multiplier(), oomph::RefineableFSIImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::refineable_fill_in_generic_contribution_to_residuals_fsi_displ_lagr_multiplier(), oomph::MyProblem::set_up_impulsive_initial_condition(), oomph::ImposeDisplacementByLagrangeMultiplierElement< ELEMENT >::square_of_l2_norm_of_error(), ContactProblem< ELEMENT >::switch_to_displ_control(), RefineablePorousChannelProblem< ELEMENT >::symmetrise_eigenfunction_for_adaptive_pitchfork_tracking(), oomph::TimeStepper::time_derivative(), SphericalSpinUpProblem< ELEMENT >::timestep(), oomph::MyProblem::trace_values(), oomph::FluidInterfaceElement::u(), oomph::LinearisedAxisymmetricFluidInterfaceElement::u(), and oomph::BiharmonicElement< DIM >::u().

◆ value() [3/5]

double oomph::Node::value ( const unsigned t,
const unsigned i 
) const

Return i-th value at time level t (t=0: present, t>0: previous) either directly or via hanging node representation. Note that this REDEFINES the interface in Data Thus, the present function will be called provided that it is accessed through a pointer to a node i.e. Node* node_pt->value() will take hanging information into account. If a pointer to a Node has been explicitly down-cast to a pointer to Data then the "wrong" (Data) version of the function will be called.

Return i-th value (free or pinned) at this node at time level t either directly or via hanging node representation.

2438  {
2439  // If value is not hanging, just return the raw value
2440  if (!is_hanging(i))
2441  {
2442  return raw_value(t, i);
2443  }
2444  // Hanging node: Use hanging node representation
2445  else
2446  {
2447  // Initialise
2448  double sum = 0.0;
2449 
2450  // Add contribution from master nodes
2451  const unsigned n_master = hanging_pt(i)->nmaster();
2452  for (unsigned m = 0; m < n_master; m++)
2453  {
2454  // Get the raw nodal values at each master to avoid un-necessary ifs
2455  sum += hanging_pt(i)->master_node_pt(m)->raw_value(t, i) *
2457  }
2458  return sum;
2459  }
2460  }

References hanging_pt(), i, is_hanging(), m, oomph::HangInfo::master_node_pt(), oomph::HangInfo::master_weight(), oomph::HangInfo::nmaster(), raw_value(), and plotPSD::t.

◆ value() [4/5]

void oomph::Node::value ( const unsigned t,
Vector< double > &  values 
) const

Compute Vector of values (dofs or pinned) in this data at time level t (t=0: present; t>0: previous). This interface explicitly takes the hanging status into account. Thus, the present function will be called provided that it is accessed through a pointer to a node i.e. Node* node_pt->value() will take hanging information into account. If a pointer to a Node has been explicitly down-cast to a pointer to Data then the "wrong" (Data) version of the function will be called.

Compute Vector of values (dofs or pinned) at this node at time level t (t=0: present; t>0: previous) either directly or via hanging node representation.

2483  {
2484  // Loop over all the values
2485  const unsigned n_value = nvalue();
2486  for (unsigned i = 0; i < n_value; i++)
2487  {
2488  // Set the value at the time-level t, using the hanging node
2489  // representation if necessary
2490  values[i] = value(t, i);
2491  }
2492  }

References i, oomph::Data::nvalue(), plotPSD::t, and value().

◆ value() [5/5]

void oomph::Node::value ( Vector< double > &  values) const

Compute Vector of values for the Data value taking the hanging node status into account. Note that this REDEFINES the interface in Data Thus, the present function will be called provided that it is accessed through a pointer to a node i.e. Node* node_pt->value() will take hanging information into account. If a pointer to a Node has been explicitly down-cast to a pointer to Data then the "wrong" (Data) version of the function will be called.

Compute Vector of values (dofs or pinned) at this Data object either directly or via hanging node representation.

2467  {
2468  // Loop over all the values
2469  const unsigned n_value = nvalue();
2470  for (unsigned i = 0; i < n_value; i++)
2471  {
2472  // Set the value, using the hanging node representation if necessary
2473  values[i] = value(i);
2474  }
2475  }

References i, oomph::Data::nvalue(), and value().

◆ x() [1/4]

double& oomph::Node::x ( const unsigned i)
inline

Return the i-th nodal coordinate.

1061  {
1062 #ifdef RANGE_CHECKING
1063  x_gen_range_check(0, 0, i);
1064 #endif
1065  return X_position[Nposition_type * i][0];
1066  }
void x_gen_range_check(const unsigned &t, const unsigned &k, const unsigned &i) const
Definition: nodes.cc:1528

References i, Nposition_type, x_gen_range_check(), and X_position.

Referenced by UnstructuredTorusProblem< ELEMENT >::actions_after_adapt(), PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::actions_after_adapt(), ElasticInclinedPlaneProblem< ELEMENT, TIMESTEPPER >::actions_after_implicit_timestep(), ContactProblem< ELEMENT >::actions_before_adapt(), StefanBoltzmannProblem< ELEMENT >::actions_before_implicit_timestep(), UnsteadyHeatProblem< ELEMENT >::actions_before_implicit_timestep(), LinearWaveProblem< ELEMENT, TIMESTEPPER >::actions_before_implicit_timestep(), RefineableUnsteadyHeatProblem< ELEMENT >::actions_before_implicit_timestep(), InclinedPlaneProblem< ELEMENT, INTERFACE_ELEMENT >::actions_before_implicit_timestep(), SphericalSpinUpProblem< ELEMENT >::actions_before_implicit_timestep(), RefineableAdvectionDiffusionProblem< ELEMENT >::actions_before_newton_solve(), TwoMeshFluxAdvectionDiffusionProblem< ELEMENT >::actions_before_newton_solve(), SUPGAdvectionDiffusionProblem< ELEMENT >::actions_before_newton_solve(), OneDPoissonProblem< ELEMENT >::actions_before_newton_solve(), PoissonProblem< ELEMENT >::actions_before_newton_solve(), MultiPoissonProblem< ELEMENT >::actions_before_newton_solve(), RefineableTwoDPoissonProblem< ELEMENT >::actions_before_newton_solve(), RefineableTwoMeshFluxPoissonProblem< ELEMENT >::actions_before_newton_solve(), RefineableConvectionProblem< NST_ELEMENT, AD_ELEMENT >::actions_before_newton_solve(), FluxPoissonMGProblem< ELEMENT, MESH >::actions_before_newton_solve(), UnitCubePoissonMGProblem< ELEMENT, MESH >::actions_before_newton_solve(), TiltedCavityProblem< ELEMENT >::actions_before_newton_solve(), FpTestProblem::actions_before_newton_solve(), FallingBlockProblem< ELEMENT >::actions_before_newton_solve(), RefineablePoissonProblem< ELEMENT >::actions_before_newton_solve(), EighthSpherePoissonProblem< ELEMENT >::actions_before_newton_solve(), RefineableOneDPoissonProblem< ELEMENT >::actions_before_newton_solve(), PRefineableOneDPoissonProblem< ELEMENT >::actions_before_newton_solve(), FluxPoissonProblem< ELEMENT >::actions_before_newton_solve(), TwoMeshFluxPoissonProblem< ELEMENT >::actions_before_newton_solve(), PrescribedBoundaryDisplacementProblem< ELEMENT >::actions_before_newton_solve(), ThreeDPoissonProblem< ELEMENT >::actions_before_newton_solve(), TestPoissonProblem< ELEMENT >::actions_before_newton_solve(), TestRefineablePoissonProblem< ELEMENT >::actions_before_newton_solve(), oomph::NonLinearElasticitySmoothMesh< ELEMENT >::actions_before_newton_solve(), oomph::StreamfunctionProblem::actions_before_solve(), Beam::actionsBeforeOomphTimeStep(), SolidBag::actionsBeforeOomphTimeStep(), oomph::Problem::adapt(), oomph::TreeBasedRefineableMeshBase::adapt_mesh(), STSpineMesh< ELEMENT, INTERFACE_ELEMENT >::add_mesh(), AirwayReopeningProblem< ELEMENT >::AirwayReopeningProblem(), oomph::MyAlgebraicCollapsibleChannelMesh< ELEMENT >::algebraic_node_update(), oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::algebraic_node_update(), oomph::AlgebraicFSIDrivenCavityMesh< ELEMENT >::algebraic_node_update(), AnnularDiskProblem< ELASTICITY_ELEMENT >::AnnularDiskProblem(), AnnularQuadMesh< ELEMENT >::AnnularQuadMesh(), oomph::AnnularSpineMesh< ELEMENT >::AnnularSpineMesh(), BendingCantileverProblem< ELEMENT >::apply_boundary_conditions(), ExtrudedMovingCylinderProblem< TWO_D_ELEMENT, THREE_D_ELEMENT >::apply_boundary_conditions(), UnstructuredFvKProblem< ELEMENT >::apply_boundary_conditions(), UnstructuredPoissonProblem< ELEMENT >::apply_boundary_conditions(), PoissonProblem< ELEMENT >::apply_boundary_conditions(), PMLStructuredCubicHelmholtz< ELEMENT >::apply_boundary_conditions(), PMLHelmholtzMGProblem< ELEMENT >::apply_boundary_conditions(), NavierStokesProblem< ELEMENT >::apply_boundary_conditions(), SimpleShearProblem< ELEMENT >::apply_boundary_conditions(), UnsteadyHeatProblem< ELEMENT >::apply_boundary_conditions(), TwoDDGProblem< ELEMENT >::apply_boundary_conditions(), TwoDDGProblem< ELEMENT >::apply_initial_conditions(), oomph::TetMeshBase::assess_mesh_quality(), oomph::Newmark< NSTEPS >::assign_initial_data_values(), oomph::GeneralisedElement::assign_local_eqn_numbers(), oomph::StreamfunctionProblem::assign_velocities(), AxialSpineQuarterTubeMesh< ELEMENT, INTERFACE_ELEMENT >::AxialSpineQuarterTubeMesh(), AxisymmetricVibratingShellProblem< ELEMENT >::AxisymmetricVibratingShellProblem(), oomph::NonLinearElasticitySmoothMesh< ELEMENT >::backup(), oomph::BackupMeshForProjection< GEOMETRIC_ELEMENT >::BackupMeshForProjection(), SolidBag::bendBag(), BendingCantileverProblem< ELEMENT >::BendingCantileverProblem(), oomph::RefineableQElement< 3 >::build(), oomph::RefineableSolidQElement< 3 >::build(), oomph::RefineableQElement< 1 >::build(), oomph::RefineableQElement< 2 >::build(), oomph::RefineableSolidQElement< 2 >::build(), oomph::GmshTetMesh< ELEMENT >::build_from_scaffold(), oomph::GeompackQuadMesh< ELEMENT >::build_from_scaffold(), oomph::SimpleCubicTetMesh< ELEMENT >::build_from_scaffold(), oomph::TetgenMesh< ELEMENT >::build_from_scaffold(), oomph::TriangleMesh< ELEMENT >::build_from_scaffold(), oomph::QuadFromTriangleMesh< ELEMENT >::build_from_scaffold(), TurekProblem< FLUID_ELEMENT, SOLID_ELEMENT >::build_mesh(), oomph::ExtrudedCubeMeshFromQuadMesh< ELEMENT >::build_mesh(), oomph::FishMesh< ELEMENT >::build_mesh(), oomph::BrickFromTetMesh< ELEMENT >::build_mesh(), CombCanSpineMesh< ELEMENT, INTERFACE_ELEMENT >::build_single_layer_mesh(), CombTipSpineMesh< ELEMENT, INTERFACE_ELEMENT >::build_single_layer_mesh(), oomph::TwoLayerSpineMesh< BASE_ELEMENT >::build_two_layer_mesh(), oomph::BDF< NSTEPS >::calculate_predicted_positions(), oomph::TR::calculate_predicted_positions(), oomph::SelfStartingBDF2::calculate_predicted_positions_bdf2(), HeatedCircularPenetratorElement::centre(), oomph::Mesh::check_for_repeated_nodes(), oomph::PRefineableQElement< 2, INITIAL_NNODE_1D >::check_integrity(), oomph::RefineableQElement< 1 >::check_integrity(), oomph::RefineableQElement< 2 >::check_integrity(), oomph::FiniteElement::check_jacobian(), CoatedDiskProblem< ELASTICITY_ELEMENT, HELMHOLTZ_ELEMENT >::CoatedDiskProblem(), CoatedSphereProblem< ELASTICITY_ELEMENT, HELMHOLTZ_ELEMENT >::CoatedSphereProblem(), AxisymmetricVibratingShellProblem< ELEMENT >::complete_problem_setup(), VibratingShellProblem< ELEMENT >::complete_problem_setup(), ContactProblem< ELEMENT >::complete_problem_setup(), TwoLayerInterfaceProblem< ELEMENT >::complete_problem_setup(), BubbleInChannelProblem< ELEMENT >::complete_problem_setup(), DropInChannelProblem< ELEMENT >::complete_problem_setup(), ElasticAnnulusProblem< ELASTICITY_ELEMENT >::complete_problem_setup(), oomph::RefineableTriangleMesh< ELEMENT >::compute_area_target(), oomph::RefineableTetgenMesh< ELEMENT >::compute_volume_target(), oomph::RefineableTetMeshBase::compute_volume_target(), oomph::TwoDimensionalPMLHelper::create_bottom_left_pml_mesh(), oomph::TwoDimensionalPMLHelper::create_bottom_right_pml_mesh(), BendingCantileverProblem< ELEMENT >::create_constraint_elements(), StefanBoltzmannProblem< ELEMENT >::create_melt_elements(), oomph::GmshTetScaffoldMesh::create_mesh_from_msh_file(), oomph::TwoDimensionalPMLHelper::create_top_left_pml_mesh(), oomph::TwoDimensionalPMLHelper::create_top_right_pml_mesh(), CylinderAndInterfaceMesh< ELEMENT >::CylinderAndInterfaceMesh(), MeltSpinningProblem< ELEMENT >::deform_free_surface(), AxisymFreeSurfaceNozzleAdvDiffRobinProblem< ELEMENT >::deform_free_surface(), InterfaceProblem< ELEMENT, TIMESTEPPER >::deform_free_surface(), MeshDeformation::deform_mesh(), oomph::Mesh::delete_all_external_storage(), demo_smoothing_with_nonlinear_elasticity(), oomph::FSI_functions::doc_fsi(), StefanBoltzmannProblem< ELEMENT >::doc_solution(), TwoLayerInterfaceProblem< ELEMENT >::doc_solution(), RefineableDrivenCavityProblem< ELEMENT >::doc_solution(), PoissonProblem< ELEMENT >::doc_solution(), FallingBlockProblem< ELEMENT >::doc_solution(), RisingBubbleProblem< ELEMENT >::doc_solution(), PRefineableDrivenCavityProblem< ELEMENT >::doc_solution(), RayleighProblem< ELEMENT, TIMESTEPPER >::doc_solution(), RayleighTractionProblem< ELEMENT, TIMESTEPPER >::doc_solution(), FSIChannelWithLeafletProblem< ELEMENT >::doc_solution(), oomph::DummyErrorEstimator::DummyErrorEstimator(), dx_dt(), oomph::EighthSphereMesh< ELEMENT >::EighthSphereMesh(), ElasticQuadFromTriangleMesh< ELEMENT >::ElasticQuadFromTriangleMesh(), ElasticRefineableTwoLayerMesh< ELEMENT >::ElasticRefineableTwoLayerMesh(), ElasticTetMesh< ELEMENT >::ElasticTetMesh(), ElasticTriangleMesh< ELEMENT >::ElasticTriangleMesh(), ElasticTwoLayerMesh< ELEMENT >::ElasticTwoLayerMesh(), ElementAnalysis::ElementAnalysis(), UnsteadyHeatProblem< ELEMENT >::enforce_time_periodic_boundary_conditions(), EntryFlowProblem< ELEMENT >::EntryFlowProblem(), HeatedCircularPenetratorElement::fill_in_contribution_to_residuals(), oomph::NonlinearSurfaceContactElement< ELEMENT >::fill_in_contribution_to_residuals_surface_contact(), oomph::LinearSurfaceContactElement< ELEMENT >::fill_in_contribution_to_residuals_surface_contact(), oomph::HeatedLinearSurfaceContactElement< ELEMENT >::fill_in_contribution_to_residuals_surface_contact(), DependentPositionPointElement::fill_in_generic_contribution_to_residuals_match_position(), SlavePositionPointElement::fill_in_generic_contribution_to_residuals_match_position(), oomph::FourierDecomposedHelmholtzDtNBoundaryElement< ELEMENT >::fill_in_generic_residual_contribution_fourier_decomposed_helmholtz_DtN_bc(), oomph::NavierStokesElementWithSingularity< BASIC_NAVIER_STOKES_ELEMENT >::fill_in_generic_residual_contribution_wrapped_nst(), GlobalParameters::find_node_on_centerline(), FlatPlateMesh< ELEMENT >::FlatPlateMesh(), FluidTriangleMesh< ELEMENT >::FluidTriangleMesh(), for(), FourierDecomposedTimeHarmonicLinearElasticityProblem< ELEMENT >::FourierDecomposedTimeHarmonicLinearElasticityProblem(), FpTestProblem::FpTestProblem(), FreeSurfaceRotationProblem< ELEMENT >::FreeSurfaceRotationProblem(), FSIChannelWithLeafletProblem< ELEMENT >::FSIChannelWithLeafletProblem(), oomph::FSIDrivenCavityMesh< ELEMENT >::FSIDrivenCavityMesh(), oomph::FullCircleMesh< ELEMENT >::FullCircleMesh(), RefineableModalPoissonEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::AxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::RefineableAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::GeneralisedNewtonianAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::RefineableGeneralisedNewtonianAxisymmetricNavierStokesEquations::get_dresidual_dnodal_coordinates(), oomph::GeneralisedNewtonianNavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::RefineableGeneralisedNewtonianNavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::FiniteElement::get_dresidual_dnodal_coordinates(), oomph::RefineableElement::get_dresidual_dnodal_coordinates(), oomph::NavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::RefineableNavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::SpaceTimeNavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::RefineableSpaceTimeNavierStokesEquations< DIM >::get_dresidual_dnodal_coordinates(), oomph::Z2ErrorEstimator::get_element_errors(), oomph::DummyErrorEstimator::get_element_errors(), ThreeDimBethertonProblem< ELEMENT >::get_lambda(), SCoupling< M, O >::getSCoupledElements(), hanging_pt(), ElasticTriangleMesh< ELEMENT >::identify_boundaries(), MyCanyonMesh< ELEMENT, INTERFACE_ELEMENT >::init_spine_height(), MyTipMesh< ELEMENT, INTERFACE_ELEMENT >::init_spine_height(), SurfactantProblem< ELEMENT, INTERFACE_ELEMENT >::interface_min_max(), Global_Parameters::is_on_fsi_boundary(), oomph::SolubleSurfactantTransportInterfaceElement::l2_norm_of_height(), TwoDDGProblem< ELEMENT >::limit(), main(), WallMesh< ELEMENT >::max_deformation(), oomph::HelmholtzMGPreconditioner< DIM >::maximum_edge_width(), WallMesh< ELEMENT >::min_deformation(), ThreeDimBethertonProblem< ELEMENT >::multiply_aspect_ratio(), oomph::MyProblem::my_set_initial_condition(), MySolidTriangleMesh< ELEMENT >::MySolidTriangleMesh(), NodeReordering::node_global_position_comparison(), oomph::NodeOrdering::node_global_position_comparison(), oomph::AlgebraicMesh::node_update(), oomph::Mesh::node_update(), oomph::MacroElementNodeUpdateNode::node_update(), oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update_central_region(), oomph::AlgebraicChannelWithLeafletMesh< ELEMENT >::node_update_I(), oomph::AlgebraicCylinderWithFlagMesh< ELEMENT >::node_update_I(), oomph::AlgebraicChannelWithLeafletMesh< ELEMENT >::node_update_II(), oomph::AlgebraicCylinderWithFlagMesh< ELEMENT >::node_update_II(), oomph::AlgebraicChannelWithLeafletMesh< ELEMENT >::node_update_III(), oomph::AlgebraicCylinderWithFlagMesh< ELEMENT >::node_update_III(), oomph::AlgebraicFishMesh< ELEMENT >::node_update_in_body(), oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >::node_update_in_central_box(), oomph::AlgebraicFishMesh< ELEMENT >::node_update_in_fin(), oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >::node_update_in_lower_right_box(), oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >::node_update_in_upper_left_box(), oomph::AlgebraicChannelWithLeafletMesh< ELEMENT >::node_update_IV(), oomph::AlgebraicCylinderWithFlagMesh< ELEMENT >::node_update_IV(), oomph::AlgebraicCylinderWithFlagMesh< ELEMENT >::node_update_IX(), oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update_lower_right_region(), oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::node_update_upper_left_region(), oomph::AlgebraicCylinderWithFlagMesh< ELEMENT >::node_update_V(), oomph::AlgebraicCylinderWithFlagMesh< ELEMENT >::node_update_VI(), oomph::AlgebraicCylinderWithFlagMesh< ELEMENT >::node_update_VII(), oomph::AlgebraicCylinderWithFlagMesh< ELEMENT >::node_update_VIII(), oomph::RefineableQElement< 3 >::oc_hang_helper(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::oc_hang_helper(), OneDimMesh< ELEMENT >::OneDimMesh(), FiniteElementComp::operator()(), ElementCmp::operator()(), CompareNodes::operator()(), CompareNodeCoordinatesX::operator()(), CompareNodeCoordinatesY::operator()(), oomph::NonLinearElasticitySmoothMesh< ELEMENT >::operator()(), oomph::LinearElasticitySmoothMesh< LINEAR_ELASTICITY_ELEMENT >::operator()(), oomph::PoissonSmoothMesh< POISSON_ELEMENT >::operator()(), oomph::DummyFaceElement< ELEMENT >::output(), output(), oomph::TriangleMesh< FLUID_ELEMENT >::output_boundary_coordinates(), oomph::TriangleMesh< ELEMENT >::output_boundary_coordinates(), oomph::FSIAxisymFoepplvonKarmanElement< NNODE_1D, FLUID_ELEMENT >::output_integration_points(), oomph::MyProblem::output_ltes(), PolarNSProblem< ELEMENT >::output_streamfunction(), oomph::TreeBasedRefineableMeshBase::p_adapt_mesh(), oomph::PRefineableQElement< 1, INITIAL_NNODE_1D >::p_refine(), oomph::PRefineableQElement< 2, INITIAL_NNODE_1D >::p_refine(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::p_refine(), oomph::Tree::p_refine_if_required(), ElasticBeamProblem::parameter_study(), PeriodicLoadProblem< ELEMENT >::PeriodicLoadProblem(), oomph::FpPressureAdvectionDiffusionProblem< ELEMENT >::pin_all_non_pressure_dofs(), oomph::MGSolver< DIM >::plot(), oomph::PMLQuadMeshBase< ELEMENT >::pml_locate_zeta(), MortaringHelpers::PointElementWithExternalElement::PointElementWithExternalElement(), position(), oomph::FSIAxisymFoepplvonKarmanElement< NNODE_1D, FLUID_ELEMENT >::position(), print_connectivity_matrix(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::project(), PseudoElasticCollapsibleChannelProblem< FLUID_ELEMENT, SOLID_ELEMENT >::PseudoElasticCollapsibleChannelProblem(), oomph::RefineableQElement< 2 >::quad_hang_helper(), oomph::QuarterPipeMesh< ELEMENT >::QuarterPipeMesh(), oomph::QuarterTubeMesh< ELEMENT >::QuarterTubeMesh(), oomph::FiniteElement::raw_nodal_position(), oomph::Data::read(), BrethertonElement< ELEMENT >::reassign_inflow(), oomph::PRefineableQElement< 2, INITIAL_NNODE_1D >::rebuild_from_sons(), oomph::PRefineableQElement< 3, INITIAL_NNODE_1D >::rebuild_from_sons(), oomph::TreeBasedRefineableMeshBase::refine_as_in_reference_mesh(), CollapsibleChannelProblem< ELEMENT >::refine_elements_based_on_x_coord(), RefineableElasticCubicMesh< ELEMENT >::RefineableElasticCubicMesh(), RefineableFishPoissonProblem< ELEMENT >::RefineableFishPoissonProblem(), RefineablePeriodicLoadProblem< ELEMENT >::RefineablePeriodicLoadProblem(), oomph::RefineableSolidCubicMesh< ELEMENT >::RefineableSolidCubicMesh(), RefineableYoungLaplaceProblem< ELEMENT >::RefineableYoungLaplaceProblem(), oomph::NonLinearElasticitySmoothMesh< ELEMENT >::reset(), CombCanSpineMesh< ELEMENT, INTERFACE_ELEMENT >::rotate_90(), CombTipSpineMesh< ELEMENT, INTERFACE_ELEMENT >::rotate_90_zeq1_xeq0(), CombTipSpineMesh< ELEMENT, INTERFACE_ELEMENT >::rotate_90_zeq1_yeq0(), run_navier_stokes_outflow(), oomph::TAxisymmetricPoroelasticityElement< ORDER >::scale_basis(), oomph::TRaviartThomasDarcyElement< ORDER >::scale_basis(), oomph::TPoroelasticityElement< ORDER >::scale_basis(), oomph::Mesh::scale_mesh(), oomph::AlgebraicNode::self_test(), AxisymmetricLinearElasticityProblem< ELEMENT, TIMESTEPPER >::set_boundary_conditions(), UnstructuredFluidProblem< ELEMENT >::set_boundary_conditions(), RefineableSphericalCouetteProblem< ELEMENT >::set_boundary_conditions(), RefineableSphericalSpinUpProblem< ELEMENT >::set_boundary_conditions(), SphericalSpinUpProblem< ELEMENT >::set_boundary_conditions(), ConvectionProblem< NST_ELEMENT, AD_ELEMENT >::set_boundary_conditions(), DDConvectionProblem< NST_ELEMENT, AD_ELEMENT >::set_boundary_conditions(), RefineableDDConvectionProblem< NST_ELEMENT, AD_ELEMENT >::set_boundary_conditions(), RefineableSphereConvectionProblem< ELEMENT >::set_boundary_conditions(), UnstructuredImmersedEllipseProblem< ELEMENT >::set_boundary_velocity(), RefineableAdvectionDiffusionPipeProblem< ELEMENT >::set_initial_condition(), LinearWaveProblem< ELEMENT, TIMESTEPPER >::set_initial_condition(), RefineableOneDAdvectionDiffusionReactionProblem< ELEMENT >::set_initial_condition(), RefineableActivatorInhibitorProblem< ELEMENT >::set_initial_condition(), AxisymmetricLinearElasticityProblem< ELEMENT, TIMESTEPPER >::set_initial_conditions(), AdvectionProblem::set_initial_conditions(), RefineableAdvectionDiffusionPipeProblem< ELEMENT >::set_inlet_concentration(), SolidFreeSurfaceRotationProblem< ELEMENT >::set_positions_from_lagrangian_coordinates(), oomph::MGSolver< DIM >::set_self_test_vector(), oomph::MyAlgebraicCollapsibleChannelMesh< ELEMENT >::setup_algebraic_node_update(), oomph::AlgebraicChannelWithLeafletMesh< ELEMENT >::setup_algebraic_node_update(), oomph::AlgebraicCollapsibleChannelMesh< ELEMENT >::setup_algebraic_node_update(), oomph::AlgebraicCylinderWithFlagMesh< ELEMENT >::setup_algebraic_node_update(), oomph::AlgebraicFSIDrivenCavityMesh< ELEMENT >::setup_algebraic_node_update(), oomph::AlgebraicRefineableQuarterCircleSectorMesh< ELEMENT >::setup_algebraic_node_update(), oomph::AlgebraicRefineableQuarterTubeMesh< ELEMENT >::setup_algebraic_node_update(), oomph::TetMeshBase::setup_boundary_coordinates(), oomph::XdaTetMesh< ELEMENT >::setup_boundary_coordinates(), oomph::UnstructuredTwoDMeshGeometryBase::setup_boundary_coordinates(), oomph::FourierDecomposedHelmholtzDtNMesh< ELEMENT >::setup_gamma(), oomph::HelmholtzDtNMesh< ELEMENT >::setup_gamma(), SolarRadiationProblem< ELEMENT >::setup_shielding_nodes(), SheetGlueProblem< ELEMENT >::SheetGlueProblem(), ShellMesh< ELEMENT >::ShellMesh(), oomph::SimpleCubicScaffoldTetMesh::SimpleCubicScaffoldTetMesh(), oomph::SlopingQuadMesh< ELEMENT >::SlopingQuadMesh(), oomph::RefineableTetgenMesh< ELEMENT >::snap_nodes_onto_boundary(), oomph::TetMeshBase::snap_nodes_onto_geometric_objects(), oomph::UnstructuredTwoDMeshGeometryBase::snap_nodes_onto_geometric_objects(), FallingBlockProblem< ELEMENT >::snap_onto_sphere(), RisingBubbleProblem< ELEMENT >::snap_onto_sphere(), oomph::TetMeshBase::snap_to_quadratic_surface(), ABCProblem< ELEMENT, TIMESTEPPERT >::solve(), RefineableRotatingCylinderProblem< ELEMENT >::solve(), solve_with_selected_refinement_pattern(), oomph::TwoDimensionalPMLHelper::sorter_bottom_boundary(), oomph::TwoDimensionalPMLHelper::sorter_left_boundary(), oomph::TwoDimensionalPMLHelper::sorter_right_boundary(), oomph::TwoDimensionalPMLHelper::sorter_top_boundary(), SphericalSteadyRotationProblem< ELEMENT >::SphericalSteadyRotationProblem(), oomph::AnnularSpineMesh< ELEMENT >::spine_node_update(), oomph::MyHorizontalSingleLayerSpineMesh< ELEMENT >::spine_node_update(), SpineInclinedPlaneMesh< ELEMENT >::spine_node_update(), SimpleSpineMesh< ELEMENT >::spine_node_update(), MyCanyonMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update(), CombCanSpineMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update(), CombTipSpineMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update(), STSpineMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update(), MyTipMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update(), AxialSpineQuarterTubeMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update(), oomph::ChannelSpineMesh< ELEMENT >::spine_node_update(), oomph::HorizontalSingleLayerSpineMesh< ELEMENT >::spine_node_update(), oomph::SingleLayerCubicSpineMesh< ELEMENT >::spine_node_update(), oomph::SingleLayerSpineMesh< ELEMENT >::spine_node_update(), oomph::BrethertonSpineMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update_channel(), oomph::BrethertonSpineMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update_film_lower(), oomph::BrethertonSpineMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update_film_upper(), oomph::BrethertonSpineMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update_horizontal_transition_lower(), oomph::BrethertonSpineMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update_horizontal_transition_upper(), oomph::TwoLayerPerturbedSpineMesh< ELEMENT >::spine_node_update_lower(), oomph::TwoLayerSpineMesh< ELEMENT >::spine_node_update_lower(), oomph::TwoLayerPerturbedSpineMesh< ELEMENT >::spine_node_update_upper(), oomph::TwoLayerSpineMesh< ELEMENT >::spine_node_update_upper(), oomph::BrethertonSpineMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update_vertical_transition_lower(), oomph::BrethertonSpineMesh< ELEMENT, INTERFACE_ELEMENT >::spine_node_update_vertical_transition_upper(), oomph::TetMeshBase::split_elements_in_corners(), oomph::Tree::split_if_required(), StefanBoltzmannProblem< ELEMENT >::StefanBoltzmannProblem(), oomph::GeneralisedNewtonianAxisymmetricNavierStokesEquations::strain_rate(), SurfactantProblem< ELEMENT, INTERFACE_ELEMENT >::SurfactantProblem(), ContactProblem< ELEMENT >::switch_to_displ_control(), oomph::BDF< NSTEPS >::temporal_error_in_position(), oomph::TR::temporal_error_in_position(), oomph::SelfStartingBDF2::temporal_error_in_position_bdf2(), oomph::TetMeshVertex::TetMeshVertex(), oomph::ThinLayerBrickOnTetMesh< ELEMENT >::ThinLayerBrickOnTetMesh(), ThreeDimBethertonProblem< ELEMENT >::ThreeDimBethertonProblem(), SphericalSpinUpProblem< ELEMENT >::timestep(), oomph::TubeMesh< ELEMENT >::TubeMesh(), TurekProblem< FLUID_ELEMENT, SOLID_ELEMENT >::TurekProblem(), TwoDDGMesh< ELEMENT >::TwoDDGMesh(), TwoDDGProblem< ELEMENT >::TwoDDGProblem(), ElasticInterfaceProblem< ELEMENT, TIMESTEPPER >::unsteady_run(), UnsteadyHeatProblem< ELEMENT >::UnsteadyHeatProblem(), UnstructuredFSIProblem< FLUID_ELEMENT, SOLID_ELEMENT >::UnstructuredFSIProblem(), oomph::SolarRadiationBase::update_limiting_angles(), MortaringValidationProblem< ELEMENT, NON_MORTAR_ELEMENT >::verify_mortared_nodes_coincide(), VibratingShellProblem< ELEMENT >::VibratingShellProblem(), WallMesh< ELEMENT >::WallMesh(), oomph::WomersleyMesh< WOMERSLEY_ELEMENT >::WomersleyMesh(), oomph::TwoDAnnularMesh< ELEMENT >::wrap_into_annular_shape(), and YoungLaplaceProblem< ELEMENT >::YoungLaplaceProblem().

◆ x() [2/4]

const double& oomph::Node::x ( const unsigned i) const
inline

Return the i-th nodal coordinate (const version).

1070  {
1071 #ifdef RANGE_CHECKING
1072  x_gen_range_check(0, 0, i);
1073 #endif
1074  return X_position[Nposition_type * i][0];
1075  }

References i, Nposition_type, x_gen_range_check(), and X_position.

◆ x() [3/4]

double& oomph::Node::x ( const unsigned t,
const unsigned i 
)
inline

Return the position x(i) at previous timestep t (t=0: present; t>0 previous timestep).

1080  {
1081 #ifdef RANGE_CHECKING
1082  x_gen_range_check(t, 0, i);
1083 #endif
1084  return X_position[Nposition_type * i][t];
1085  }

References i, Nposition_type, plotPSD::t, x_gen_range_check(), and X_position.

◆ x() [4/4]

const double& oomph::Node::x ( const unsigned t,
const unsigned i 
) const
inline

Return the position x(i) at previous timestep t (t=0: present; t>0 previous timestep) (const version)

1090  {
1091 #ifdef RANGE_CHECKING
1092  x_gen_range_check(t, 0, i);
1093 #endif
1094  return X_position[Nposition_type * i][t];
1095  }

References i, Nposition_type, plotPSD::t, x_gen_range_check(), and X_position.

◆ x_gen() [1/4]

double& oomph::Node::x_gen ( const unsigned k,
const unsigned i 
)
inline

Reference to the generalised position x(k,i). ‘Type’: k; Coordinate direction: i.

1127  {
1128 #ifdef RANGE_CHECKING
1129  x_gen_range_check(0, k, i);
1130 #endif
1131  return X_position[Nposition_type * i + k][0];
1132  }

References i, k, Nposition_type, x_gen_range_check(), and X_position.

Referenced by oomph::Newmark< 2 >::assign_initial_data_values_stage1(), oomph::SelfStartingBDF2::assign_initial_positions_impulsive(), oomph::Steady< NSTEPS >::assign_initial_positions_impulsive(), oomph::Newmark< NSTEPS >::assign_initial_positions_impulsive(), oomph::BDF< NSTEPS >::assign_initial_positions_impulsive(), oomph::RefineableSolidElement::assign_solid_hanging_local_eqn_numbers(), oomph::SolidFiniteElement::assign_solid_local_eqn_numbers(), dx_gen_dt(), oomph::ClampedHermiteShellBoundaryConditionElement::fill_in_contribution_to_residuals(), oomph::BiharmonicFluidBoundaryElement::fill_in_generic_residual_contribution_biharmonic_boundary(), oomph::SolidFiniteElement::fill_in_jacobian_from_solid_position_by_fd(), oomph::RefineableSolidElement::fill_in_jacobian_from_solid_position_by_fd(), oomph::RefineablePseudoSolidNodeUpdateElement< BASIC, SOLID >::fill_in_shape_derivatives_by_fd(), position_gen(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::project(), oomph::FiniteElement::raw_nodal_position_gen(), oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::restore_positions(), oomph::SolidMesh::set_lagrangian_nodal_coordinates(), oomph::Problem::set_pinned_values_to_zero(), oomph::HermiteQuadMesh< ELEMENT >::set_position_of_node(), oomph::SelfStartingBDF2::shift_time_positions(), oomph::IMRBase::shift_time_positions(), oomph::Steady< NSTEPS >::shift_time_positions(), oomph::NewmarkBDF< NSTEPS >::shift_time_positions(), oomph::BDF< NSTEPS >::shift_time_positions(), oomph::Newmark< 2 >::shift_time_values(), and oomph::ProjectionProblem< PROJECTABLE_ELEMENT >::store_positions().

◆ x_gen() [2/4]

const double& oomph::Node::x_gen ( const unsigned k,
const unsigned i 
) const
inline

Reference to the generalised position x(k,i). ‘Type’: k; Coordinate direction: i (const version).

1137  {
1138 #ifdef RANGE_CHECKING
1139  x_gen_range_check(0, k, i);
1140 #endif
1141  return X_position[Nposition_type * i + k][0];
1142  }

References i, k, Nposition_type, x_gen_range_check(), and X_position.

◆ x_gen() [3/4]

double& oomph::Node::x_gen ( const unsigned t,
const unsigned k,
const unsigned i 
)
inline

Reference to the generalised position x(k,i) at the previous timestep [t=0: present]. ‘Type’: k; Coordinate direction: i.

1147  {
1148 #ifdef RANGE_CHECKING
1149  x_gen_range_check(t, k, i);
1150 #endif
1151  return X_position[Nposition_type * i + k][t];
1152  }

References i, k, Nposition_type, plotPSD::t, x_gen_range_check(), and X_position.

◆ x_gen() [4/4]

const double& oomph::Node::x_gen ( const unsigned t,
const unsigned k,
const unsigned i 
) const
inline

Reference to the generalised position x(k,i) at the previous timestep [t=0: present]. ‘Type’: k; Coordinate direction: i. (const version)

1160  {
1161 #ifdef RANGE_CHECKING
1162  x_gen_range_check(t, k, i);
1163 #endif
1164  return X_position[Nposition_type * i + k][t];
1165  }

References i, k, Nposition_type, plotPSD::t, x_gen_range_check(), and X_position.

◆ x_gen_range_check()

void oomph::Node::x_gen_range_check ( const unsigned t,
const unsigned k,
const unsigned i 
) const
protected

Private function to check that the arguemnts to the position functions are in range

/////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////// Private function to check that the arguments are within the range of the stored coordinates, position types and time history values.

1531  {
1532  // Number of stored history values
1533  const unsigned position_ntstorage = Position_time_stepper_pt->ntstorage();
1534  // If any of the coordinates or time values are out of range
1535  if ((i >= Ndim) || (k >= Nposition_type) || (t >= position_ntstorage))
1536  {
1537  std::ostringstream error_message;
1538  // If it's the dimension
1539  if (i >= Ndim)
1540  {
1541  error_message << "Range Error: X coordinate " << i
1542  << " is not in the range (0," << Ndim - 1 << ")";
1543  }
1544  // If it's the position type
1545  if (k >= Nposition_type)
1546  {
1547  error_message << "Range Error: Position type " << k
1548  << " is not in the range (0," << Nposition_type - 1
1549  << ")";
1550  }
1551  // If it's the time
1552  if (t >= position_ntstorage)
1553  {
1554  error_message << "Range Error: Position Time Value " << t
1555  << " is not in the range (0," << position_ntstorage - 1
1556  << ")";
1557  }
1558  // Throw the error
1559  throw OomphLibError(
1560  error_message.str(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION);
1561  }
1562  }

References i, k, Ndim, Nposition_type, oomph::TimeStepper::ntstorage(), OOMPH_CURRENT_FUNCTION, OOMPH_EXCEPTION_LOCATION, Position_time_stepper_pt, and plotPSD::t.

Referenced by x(), and x_gen().

◆ x_position_pt()

double* oomph::Node::x_position_pt ( const unsigned i)
inlineprotected

Direct access to the pointer to the i-th stored coordinate data.

959  {
960  return X_position[i];
961  }

References i, and X_position.

◆ x_pt()

double* oomph::Node::x_pt ( const unsigned t,
const unsigned i 
)
inline

Direct access to the i-th coordinate at time level t (t=0: present; t>0: previous)

1182  {
1183  return &X_position[Nposition_type * i][t];
1184  }

References i, Nposition_type, plotPSD::t, and X_position.

Friends And Related Function Documentation

◆ BoundaryNodeBase

friend class BoundaryNodeBase
friend

to construct periodic Nodes

◆ operator<<

std::ostream& operator<< ( std::ostream &  out,
const Node d 
)
friend

Output operator: output location and all values at all times, along with any extra information stored for the timestepper.

Node output operator: output equation numbers and values at all times, along with any extra information stored for the timestepper.

374  {
375  const unsigned nt = nd.ntstorage();
376  const unsigned dim = nd.ndim();
377 
378  // Output position, only doing current value for now but add position
379  // history if you need it - David.
380  out << "Position: [";
381  for (unsigned j = 0; j < dim; j++)
382  {
383  out << "dimension " << dim << ": [";
384  for (unsigned t = 0; t < nt - 1; t++)
385  {
386  out << nd.x(t, j) << ", ";
387  }
388  out << nd.x(nt - 1, j) << "]" << std::endl;
389  }
390  out << "]" << std::endl;
391 
392  // Use the function for data to output the data (we can't use overloading
393  // here because operator<< is not a class function, so instead we
394  // typecast the node to a data).
395  out << dynamic_cast<const Data&>(nd);
396  return out;
397  }
std::ofstream out("Result.txt")

Member Data Documentation

◆ Aux_node_update_fct_pt

AuxNodeUpdateFctPt oomph::Node::Aux_node_update_fct_pt
protected

Pointer to auxiliary update function – this can be used to update any nodal values following the update of the nodal position. This is needed e.g. to update the no-slip condition on moving boundaries.

Referenced by has_auxiliary_node_update_fct_pt(), oomph::PerturbedSpineNode::node_update(), oomph::AlgebraicNode::node_update(), oomph::MacroElementNodeUpdateNode::node_update(), oomph::SpineNode::node_update(), perform_auxiliary_node_update_fct(), and set_auxiliary_node_update_fct_pt().

◆ Hanging_pt

HangInfo** oomph::Node::Hanging_pt
protected

C-style array of pointers to hanging node info. It's set to NULL if the node isn't hanging. The first entry (0) is the geometric hanging node data. The remaining entries correspond to the hanging data for the other values stored at the node. Usually, these entries will be the same as the geometric hanging node data represented by Hanging_pt[0], but this is not necessarily the case; e.g. the pressure in Taylor Hood has different hanging node data from the velocities.

Referenced by hanging_pt(), is_hanging(), resize(), set_hanging_pt(), set_nonhanging(), and ~Node().

◆ Ndim

unsigned oomph::Node::Ndim
protected

Eulerian dimension of the node.

Referenced by copy(), dump(), ndim(), read(), oomph::SolidNode::SolidNode(), and x_gen_range_check().

◆ No_independent_position

unsigned oomph::Node::No_independent_position = 10
static

Static "Magic number" used to indicate that there is no independent position in a periodic node.

Static "Magic number" passed as independent_position when there is no independent position in the periodic node. For example, in a periodic mesh.

◆ Nposition_type

unsigned oomph::Node::Nposition_type
protected

Number of coordinate types used in the mapping between local and global coordinates (e.g. 1 for Lagrange-type elements; 2 for 1D Hermite elements; 4 for 2D Hermite elements, etc).

Referenced by copy(), dump(), nposition_type(), oomph::SolidNode::pin_position(), oomph::SolidNode::position_eqn_number(), oomph::SolidNode::position_is_a_copy(), oomph::SolidNode::position_is_pinned(), read(), oomph::SolidNode::SolidNode(), oomph::SolidNode::unpin_position(), x(), x_gen(), x_gen_range_check(), and x_pt().

◆ Obsolete

bool oomph::Node::Obsolete
protected

Flag to indicate that the Node has become obsolete — usually during mesh refinement process

Referenced by is_obsolete(), set_non_obsolete(), and set_obsolete().

◆ Position_time_stepper_pt

◆ X_position

double** oomph::Node::X_position
protected

Array of pointers to the data holding the Eulerian positions. The storage format must be the same as the internal data storage so that we can implement the functions x() in generality here without the need for virtual functions. The first index will be a flat array of position types and coordinates and the second will be the number of time history values at each position type.

Referenced by copy(), dump(), Node(), read(), oomph::SolidNode::set_external_variable_position_pt(), set_position_time_stepper(), oomph::SolidNode::set_position_time_stepper(), oomph::SolidNode::SolidNode(), x(), x_gen(), x_position_pt(), x_pt(), ~Node(), and oomph::SolidNode::~SolidNode().


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