52 std::ostringstream error_message;
56 error_message <<
"Range Error: Value " <<
i
57 <<
" is not in the range (0," <<
Nvalue - 1 <<
")";
62 error_message <<
"Range Error: Time Value " <<
t
63 <<
" is not in the range (0," <<
ntstorage() - 1 <<
")";
123 <<
" is not stored as a copy of the data object " <<
this
240 Time_stepper_pt(
Data::Default_static_time_stepper_pt),
259 Time_stepper_pt(
Data::Default_static_time_stepper_pt),
299 Data::Data(TimeStepper*
const& time_stepper_pt_,
300 const unsigned& initial_n_value,
301 const bool& allocate_storage)
304 Time_stepper_pt(time_stepper_pt_),
307 Nvalue(initial_n_value)
315 if ((allocate_storage) && (initial_n_value > 0))
325 Value =
new double*[initial_n_value];
328 double* values =
new double[initial_n_value * n_tstorage];
331 for (
unsigned i = 0;
i < initial_n_value;
i++)
335 Value[
i] = &values[
i * n_tstorage];
337 for (
unsigned t = 0;
t < n_tstorage;
t++)
349 std::ostream&
operator<<(std::ostream& out,
const Data& d)
351 const unsigned nvalue = d.nvalue();
352 const unsigned nt = d.ntstorage();
354 out <<
"Data: [" << std::endl;
356 for (
unsigned j = 0; j < nvalue; j++)
358 out <<
"global eq " << d.
eqn_number(j) <<
": [";
359 for (
unsigned t = 0;
t < nt - 1;
t++)
361 out << d.value(
t, j) <<
", ";
363 out << d.value(nt - 1, j) <<
"]" << std::endl;
365 out <<
"]" << std::endl;
375 const unsigned nt =
nd.ntstorage();
376 const unsigned dim =
nd.
ndim();
380 out <<
"Position: [";
381 for (
unsigned j = 0;
j < dim;
j++)
383 out <<
"dimension " << dim <<
": [";
384 for (
unsigned t = 0;
t <
nt - 1;
t++)
388 out <<
nd.x(
nt - 1,
j) <<
"]" << std::endl;
390 out <<
"]" << std::endl;
548 <<
"Node::assign_eqn_numbers(...) noticed that " <<
i
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";
613 <<
" is not the same of those in the original data "
624 <<
" is not the same of those in the original data "
693 <<
"Number of values stored in dump file is not equal to the amount "
694 <<
"of storage allocated in Data object " <<
check_nvalues <<
" "
706 for (
unsigned i = 0;
i <
n_dim;
i++)
743 warning_stream <<
"Number of time history values in dump file is less "
744 <<
"than the storage allocated in Data object: "
748 <<
"We're using steady data as initial data for unsteady \n"
749 <<
"run. I'll fill in the remaining history values with zeroes. \n"
750 <<
"If you don't like this \n"
751 <<
"you'll have to overwrite this yourself with whatever is \n "
752 <<
"appropriate for your timestepping scheme. \n";
775 <<
" -th history restart value [t = " <<
t
778 <<
" hasn't been sufficiently resized\n";
790 <<
" -th restart history value [t = " <<
t
791 <<
" ] to " << 0.0 <<
" because Data "
792 <<
" hasn't been sufficiently resized\n";
803 <<
"Warning: number of time history values in dump file is greater "
804 <<
"than the storage allocated in Data object: " <<
check_ntvalues
806 warning_stream <<
"We're using the current values from an unsteady \n"
807 <<
"restart file to initialise a static run. \n";
829 <<
" -th restart history value [t = " <<
t
832 <<
" hasn't been sufficiently resized\n";
857 <<
" -th restart history value [t = " <<
t
860 <<
" hasn't been sufficiently resized\n";
978 oomph_info <<
"\n ERROR: Failed Data::self_test() for i=" <<
i
980 oomph_info <<
" (Value is not classified as pinned or free)"
1020 error_stream <<
"Warning : Data cannot be resized to a smaller value!"
1094 for (
unsigned i = 0;
i < n_value;
i++)
1098 if (global_eqn >= 0)
1189 const unsigned n_tstorage = this->
ntstorage();
1341 error_stream <<
"The data you are trying to hijack is already a copy"
1343 error_stream <<
"Please copy the original data" << std::endl;
1344 error_stream <<
"In a later version, I might do this for you,"
1345 <<
" but not today" << std::endl;
1417 error_stream <<
"The data you are trying to copy is already a copy"
1419 error_stream <<
"Please copy the original data" << std::endl;
1420 error_stream <<
"In a later version, I might do this for you,"
1421 <<
" but not today" << std::endl;
1462 std::ostringstream error_message;
1463 error_message <<
"Range Error: the index " <<
i
1464 <<
" is not in the range (0," <<
Nmaster - 1 <<
")";
1476 const double& weight)
1478#ifdef RANGE_CHECKING
1490 const double& weight)
1530 const unsigned&
i)
const
1537 std::ostringstream error_message;
1541 error_message <<
"Range Error: X coordinate " <<
i
1542 <<
" is not in the range (0," <<
Ndim - 1 <<
")";
1547 error_message <<
"Range Error: Position type " <<
k
1554 error_message <<
"Range Error: Position Time Value " <<
t
1576 Position_time_stepper_pt(
Data::Default_static_time_stepper_pt),
1581 Aux_node_update_fct_pt(0)
1601 Position_time_stepper_pt(
Data::Default_static_time_stepper_pt),
1606 Aux_node_update_fct_pt(0)
1645 const unsigned&
n_dim,
1656 Aux_node_update_fct_pt(0)
1892 const unsigned&
i)
const
1928 <<
" is not the same as the original Node "
1945 <<
" is not the same of those in the original node "
1978 <<
" # total number of doubles for time history (incl present)"
2013 <<
" is not the same as that in the input file"
2033 <<
"Number of positional history values in dump file is less "
2034 <<
"than the storage allocated in Node object: "
2259 throw OomphLibError(
"Only BoundaryNodes can be made periodic",
2272 throw OomphLibError(
"Only BoundaryNodes can make periodic nodes",
2325 std::stringstream
ss;
2326 ss <<
"Node (bas class) can't have boundary coordinates\n";
2338 std::stringstream
ss;
2339 ss <<
"Cannot add non BoundaryNode<NODE> to boundary " << b <<
"\n";
2352 throw OomphLibError(
"Cannot remove non BoundaryNode<NODE> to boundary",
2365 throw OomphLibError(
"Non-boundary Node cannot have boundary coordinates",
2383 throw OomphLibError(
"Non-boundary Node cannot have boundary coordinates",
2398 throw OomphLibError(
"Non-boundary Node cannot have boundary coordinates",
2503 for (
unsigned i = 0;
i <
n_dim;
i++)
2518 for (
unsigned i = 0;
i <
n_dim;
i++)
2626 const unsigned&
i)
const
2736 const unsigned&
i)
const
2764 for (
unsigned i = 0;
i < n_dim;
i++)
2914 <<
"The nodes you are trying to make periodic are already periodic\n"
2915 <<
"Or you are trying to make a copy of another already periodic "
2917 error_stream <<
"Please copy the original data if you can\n";
2928 if (
nod_pt != copied_node_pt)
2931 nod_pt->delete_value_storage();
2952 Node*
const& copied_node_pt)
2959 error_stream <<
"The node you are trying to make into a periodic copy is "
2960 "already a copy\n.";
3068 error_stream <<
"Node is not on boundary " << b << std::endl;
3083 delete (*Boundary_coordinates_pt)[b];
3135 error_stream <<
"Node is not on boundary " << b << std::endl;
3146 <<
"Boundary coordinates have not been set\n"
3147 <<
"[Note: In refineable problems, the boundary coordinates\n"
3148 <<
" will only be interpolated to newly created nodes\n"
3149 <<
" if Mesh::Boundary_coordinate_exists_stored_as_unsigned[...] "
3151 <<
" has been set to 1 (as proxy for true)!]\n";
3183 error_stream <<
"Node is not on boundary " << b << std::endl;
3196 <<
"Boundary coordinates have not been set\n"
3197 <<
"[Note: In refineable problems, the boundary coordinates\n"
3198 <<
" will only be interpolated to newly created nodes\n"
3200 "Mesh::Boundary_coordinate_exists_stored_as_unsigned[...]\n"
3201 <<
" has been set to 1 (as proxy for true)!]\n";
3209 const unsigned nboundary_coord = (*Boundary_coordinates_pt)[b]->nrow();
3214 error_stream <<
"Wrong number of coordinates in the vector boundary_zeta"
3255 error_stream <<
"Node is not on boundary " << b << std::endl;
3275 (*Boundary_coordinates_pt)[b] =
3283 unsigned ncol = (*Boundary_coordinates_pt)[b]->ncol();
3319 std::ostringstream error_message;
3323 error_message <<
"Range Error: Xi coordinate " <<
i
3324 <<
" is not in the range (0," <<
Nlagrangian - 1 <<
")";
3329 error_message <<
"Range Error: Lagrangian type " <<
k
3352 const unsigned&
n_dim,
3389 const unsigned&
n_dim,
3451 <<
" is not the same as the original Solid Node "
3478 <<
" # number of Lagrangian position variables" << std::endl;
3509 <<
" is not the same as that in the input file"
3622 const unsigned&
i)
const
3775 <<
"sent and local n_lagrangian_storage: "
A class that contains the information required by Nodes that are located on Mesh boundaries....
unsigned ncoordinates_on_boundary(const unsigned &b)
Get the number of boundary coordinates on mesh boundary b.
std::set< unsigned > * Boundaries_pt
Pointer to set of mesh boundaries occupied by the Node; NULL if the Node is not on any boundaries.
void set_coordinates_on_boundary(const unsigned &b, const Vector< double > &boundary_zeta)
Set the vector of boundary coordinates on mesh boundary b.
void make_node_periodic(Node *const &node_pt, Node *const &original_node_pt)
Helper function that is used to turn BoundaryNodes into peridic boundary nodes by setting the data va...
void make_nodes_periodic(Node *const &node_pt, Vector< Node * > const &periodic_copies_pt)
Helper function that is used to turn BoundaryNodes into periodic boundary nodes by setting the data v...
void add_to_boundary(const unsigned &b)
Add the node to the mesh boundary b.
Node * Copied_node_pt
If the BoundaryNode is periodic, this pointer is set to the BoundaryNode whose data it shares.
void get_coordinates_on_boundary(const unsigned &b, Vector< double > &boundary_zeta)
Return the vector of boundary coordinates on mesh boundary b.
std::map< unsigned, DenseMatrix< double > * > * Boundary_coordinates_pt
Pointer to a map of pointers to intrinsic boundary coordinates of the Node, indexed by the boundary n...
std::map< unsigned, unsigned > * Index_of_first_value_assigned_by_face_element_pt
Pointer to a map, indexed by the face element identifier it returns the position of the first face el...
bool is_on_boundary() const
Test whether the node lies on a boundary.
void remove_from_boundary(const unsigned &b)
Remove the node from the mesh boundary b.
virtual ~BoundaryNodeBase()
Destructor, clean up any allocated storage for the boundaries.
Custom Data class that is used when making a shallow copy of a data object. The class contains a copy...
Data * Copied_data_pt
Pointer to the Data object from which the values are copied.
void clear_copied_pointers()
Clear the pointers to the copied data.
void reset_copied_pointers()
Reset the pointers to the copied data.
void resize(const unsigned &n_value)
We cannot resize CopiedData, so the resize function throws a warning.
A class that represents a collection of data; each Data object may contain many different individual ...
static TimeStepper * Default_static_time_stepper_pt
Default (static) timestepper used in steady problems.
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
void add_copy(Data *const &data_pt)
Add the pointer data_pt to the array Copy_of_data_pt. This should be used whenever copies are made of...
long * Eqn_number
C-style array of pointers to the (global) equation numbers of the values.
virtual void add_eqn_numbers_to_vector(Vector< long > &vector_of_eqn_numbers)
Add all equation numbers to the vector in the internal storage order.
bool does_pointer_correspond_to_value(double *const ¶meter_pt)
Check whether the pointer parameter_pt addresses internal data values.
void constrain(const unsigned &i)
Constrain the i-th stored variable when making hanging data If the data is already pinned leave it al...
virtual void describe_dofs(std::ostream &out, const std::string ¤t_string) const
Function to describe the dofs of the Node. The ostream specifies the output stream to which the descr...
virtual void add_value_pt_to_map(std::map< unsigned, double * > &map_of_value_pt)
Add pointers to all unpinned and unconstrained data to a map indexed by (global) equation number.
long * eqn_number_pt(const unsigned &i)
Return the pointer to the equation number of the i-th stored variable.
unsigned Nvalue
Number of values stored in the data object.
static long Is_pinned
Static "Magic number" used in place of the equation number to indicate that the value is pinned.
void range_check(const unsigned &t, const unsigned &i) const
Check that the arguments are within the range of the stored data values and timesteps.
void remove_copy(Data *const &data_pt)
Remove the pointer data_pt from the array Copy_of_data_pt. This should be used whenever copies of the...
virtual void clear_copied_pointers()
Helper function that should be overloaded derived classes that contain copies of data....
friend class HijackedData
bool is_segregated_solve_pinned(const unsigned &i)
Test whether the i-th variable is temporaily pinned for a segregated solve.
Data ** Copy_of_data_pt
C-style array of any Data objects that contain copies of the current Data object's data values.
void copy(Data *orig_data_pt)
Copy Data values from specified Data object.
bool is_halo() const
Is this Data a halo?
TimeStepper * Time_stepper_pt
Pointer to a Timestepper. The inclusion of a Timestepper pointer in the Data class,...
virtual void read_values_from_vector(const Vector< double > &vector_of_values, unsigned &index)
Read all data and time history values from the vector starting from index. On return the index will b...
virtual void add_values_to_vector(Vector< double > &vector_of_values)
Add all data and time history values to the vector in the internal storage order.
static long Is_constrained
Static "Magic number" used in place of the equation number to indicate that the value is constrained ...
void set_value(const unsigned &i, const double &value_)
Set the i-th stored data value to specified value. The only reason that we require an explicit set fu...
virtual bool is_a_copy() const
Return a boolean to indicate whether the Data objact contains any copied values. A base Data object c...
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
unsigned Ncopies
Number of Data that contain copies of this Data object's values.
void dump(std::ostream &dump_file) const
Dump the data object to a file.
virtual ~Data()
Destructor, deallocates memory assigned for data.
double value(const unsigned &i) const
Return i-th stored value. This function is not virtual so that it can be inlined. This means that if ...
unsigned ntstorage() const
Return total number of doubles stored per value to record time history of each value (one for steady ...
virtual void assign_eqn_numbers(unsigned long &global_ndof, Vector< double * > &dof_pt)
Assign global equation numbers; increment global number of unknowns, global_ndof; and add any new dof...
double ** Value
C-style array of pointers to data values and possible history values. The data must be ordered in suc...
long & eqn_number(const unsigned &i)
Return the equation number of the i-th stored variable.
bool is_constrained(const unsigned &i)
Test whether the i-th variable is constrained (1: true; 0: false).
static long Is_unclassified
Static "Magic number" used in place of the equation number to denote a value that hasn't been classif...
void delete_value_storage()
Delete all storage allocated by the Data object for values and equation numbers.
virtual void resize(const unsigned &n_value)
Change (increase) the number of values that may be stored.
Data()
Default: Just set pointer to (steady) timestepper. No storage for values is allocated.
void unconstrain(const unsigned &i)
Unconstrain the i-th stored variable when make the data nonhanging. Only unconstrain if it was actual...
void set_time_stepper(TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
Set a new timestepper by resizing the appropriate storage. If already assigned the equation numbering...
void read(std::ifstream &restart_file)
Read data object from a file.
static long Is_segregated_solve_pinned
Static "Magic number" used in place of the equation number to indicate that the value is pinned,...
unsigned self_test()
Self-test: Have all values been classified as pinned/unpinned? Return 0 if OK.
virtual void read_eqn_numbers_from_vector(const Vector< long > &vector_of_eqn_numbers, unsigned &index)
Read all equation numbers from the vector starting from index. On return the index will be set to the...
bool is_pinned(const unsigned &i) const
Test whether the i-th variable is pinned (1: true; 0: false).
double * value_pt(const unsigned &i) const
Return the pointer to the i-the stored value. Typically this is required when direct access to the st...
virtual void reset_copied_pointers()
Helper function that should be overloaded in derived classes that can contain copies of Data....
double size() const
Calculate the size of the element (length, area, volume,...) in Eulerian computational coordinates....
bool is_halo() const
Is this element a halo?
unsigned long * Eqn_number
Storage for the global equation numbers represented by the degrees of freedom in the element.
unsigned long eqn_number(const unsigned &ieqn_local) const
Return the global equation number corresponding to the ieqn_local-th local equation number.
unsigned ndim() const
Access function to # of Eulerian coordinates.
unsigned nlagrangian() const
Access function to # of Lagrangian coordinates.
Class that contains data for hanging nodes.
Node ** Master_nodes_pt
C-style array of pointers to nodes that this hanging node depends on.
Node *const & master_node_pt(const unsigned &i) const
Return a pointer to the i-th master node.
void range_check(const unsigned &i) const
Check that the argument is within the range of stored data values.
unsigned Nmaster
Number of master nodes required by this hanging node.
unsigned nmaster() const
Return the number of master nodes.
double const & master_weight(const unsigned &i) const
Return weight for dofs on i-th master node.
double * Master_weights
C-style array of weights for the dofs on the master nodes.
void add_master_node_pt(Node *const &master_node_pt, const double &weight)
Add (pointer to) master node and corresponding weight to the internally stored (pointers to) master n...
void set_master_node_pt(const unsigned &i, Node *const &master_node_pt, const double &weight)
Set the pointer to the i-th master node and its weight.
Data * Copied_data_pt
Pointer to the Data object from which the value is copied.
unsigned Copied_index
Index of the value that is copied from within the Data object.
void resize(const unsigned &n_value)
We cannot resize HijackedData, so the resize function throws a warning.
void reset_copied_pointers()
Reset the pointers to the copied data.
void clear_copied_pointers()
Clear the pointers to the copied data.
Nodes are derived from Data, but, in addition, have a definite (Eulerian) position in a space of a gi...
double 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....
void copy(Node *orig_node_pt)
Copy all nodal data from specified Node object.
void add_values_to_vector(Vector< double > &vector_of_values)
Add all data and time history values to the vector. Overloaded to add the position information as wel...
Vector< double > position() const
Return vector of position of node at current time.
virtual void set_position_time_stepper(TimeStepper *const &position_time_stepper_pt, const bool &preserve_existing_data)
Set a new position timestepper be resizing the appropriate storage.
virtual unsigned ncoordinates_on_boundary(const unsigned &b)
Get the number of boundary coordinates on mesh boundary b. Broken virtual interface provides run-time...
void set_nonhanging()
Label node as non-hanging node by removing all hanging node data.
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
void read(std::ifstream &restart_file)
Read nodal position and associated data from file for restart.
static unsigned No_independent_position
Static "Magic number" used to indicate that there is no independent position in a periodic node.
void x_gen_range_check(const unsigned &t, const unsigned &k, const unsigned &i) const
Private function to check that the arguemnts to the position functions are in range.
virtual Node * copied_node_pt() const
Return pointer to copied node (null if the current node is not a copy – always the case here; it's ov...
virtual void assign_eqn_numbers(unsigned long &global_ndof, Vector< double * > &dof_pt)
Assign global equation numbers; increment global number of unknowns, global_ndof; and add any new dof...
virtual void remove_from_boundary(const unsigned &b)
Broken interface for removing the node from the mesh boundary b Here to provide error reporting.
Vector< double > value() const
Return vector of values calculated using value(vector).
unsigned ndim() const
Return (Eulerian) spatial dimension of the node.
virtual void make_periodic_nodes(const Vector< Node * > &periodic_nodes_pt)
Make the nodes passed in the vector periodic_nodes share the same data as this node.
virtual void constrain_positions()
Constrain the positions when the node is made hanging Empty virtual function that is overloaded in So...
void output(std::ostream &outfile)
Output nodal position.
TimeStepper * Position_time_stepper_pt
Pointer to the timestepper associated with the position data.
double ** X_position
Array of pointers to the data holding the Eulerian positions. The storage format must be the same as ...
virtual void add_to_boundary(const unsigned &b)
Broken interface for adding the node to the mesh boundary b Essentially here for error reporting.
virtual void set_coordinates_on_boundary(const unsigned &b, const unsigned &k, const Vector< double > &boundary_zeta)
Set the vector of the k-th generalised boundary coordinates on mesh boundary b. Broken virtual interf...
HangInfo ** Hanging_pt
C-style array of pointers to hanging node info. It's set to NULL if the node isn't hanging....
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)
unsigned Nposition_type
Number of coordinate types used in the mapping between local and global coordinates (e....
virtual bool boundary_coordinates_have_been_set_up()
Have boundary coordinates been set up? Broken virtual interface provides run-time error checking.
double position_gen(const unsigned &k, const unsigned &i) const
Return generalised nodal coordinate either directly or via hanging node representation.
unsigned Ndim
Eulerian dimension of the node.
double & x(const unsigned &i)
Return the i-th nodal coordinate.
virtual void get_coordinates_on_boundary(const unsigned &b, const unsigned &k, Vector< double > &boundary_zeta)
Return the vector of the k-th generalised boundary coordinates on mesh boundary b....
double raw_value(const unsigned &i) const
Return the i-th value stored at the Node. This interface does NOT take the hanging status of the Node...
virtual void unconstrain_positions()
Unconstrain the positions when the node is made non-hanging Empty virtual function that is overloaded...
void read_values_from_vector(const Vector< double > &vector_of_values, unsigned &index)
Read all data and time history values from the vector starting from index. On return the index will b...
virtual void dump(std::ostream &dump_file) const
Dump nodal position and associated data to file for restart.
double dposition_dt(const unsigned &i) const
Return the i-th component of nodal velocity: dx/dt, either directly or via hanging node representatio...
double dx_dt(const unsigned &i) const
Return the i-th component of nodal velocity: dx/dt.
void resize(const unsigned &n_value)
Resize the number of equations.
virtual void make_periodic(Node *const &node_pt)
Make the node periodic by copying the values from node_pt. Note that the coordinates will always rema...
unsigned nposition_type() const
Number of coordinate types needed in the mapping between local and global coordinates.
bool is_hanging() const
Test whether the node is geometrically hanging.
Node()
Default constructor.
double & x_gen(const unsigned &k, const unsigned &i)
Reference to the generalised position x(k,i). ‘Type’: k; Coordinate direction: i.
double 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....
virtual ~Node()
Destructor: Clean up the memory allocated for nodal position.
double value(const unsigned &i) const
Return i-th value (dofs or pinned) at this node either directly or via hanging node representation....
HangInfo *const & hanging_pt() const
Return pointer to hanging node data (this refers to the geometric hanging node status) (const version...
An OomphLibError object which should be thrown when an run-time error is encountered....
An OomphLibWarning object which should be created as a temporary object to issue a warning....
A Class for nodes that deform elastically (i.e. position is an unknown in the problem)....
void xi_gen_range_check(const unsigned &k, const unsigned &i) const
Private function to check that the arguments to the position functions are in range.
void set_position_time_stepper(TimeStepper *const &position_time_stepper_pt, const bool &preserve_existing_data)
Set a new position timestepper be resizing the appropriate storage Overloaded from the basic implemen...
unsigned Nlagrangian
Number of Lagrangian coordinates of the node.
void add_values_to_vector(Vector< double > &vector_of_values)
Add all data, position and time history values to the vector Overload to add the Lagrangian coordinat...
bool does_pointer_correspond_to_position_data(double *const ¶meter_pt)
Overload the check whether the pointer parameter_pt addresses position data values.
void read_eqn_numbers_from_vector(const Vector< long > &vector_of_eqn_numbers, unsigned &index)
Read all equation numbers from the vector starting from index. On return the index will be set to the...
unsigned nlagrangian_type() const
Number of types of Lagrangian coordinates used to interpolate the Lagrangian coordinates within the e...
Data * Variable_position_pt
Pointer to data that will hold variable positions in elastic nodes.
void add_value_pt_to_map(std::map< unsigned, double * > &map_of_value_pt)
Overload the function add_values_to_map so that it also adds the variable position data.
unsigned Nlagrangian_type
Number of types of Lagrangian coordinates used to interpolate the Lagrangian coordinates within the e...
double lagrangian_position(const unsigned &i) const
Return lagrangian coordinate either directly or via hanging node representation.
double lagrangian_position_gen(const unsigned &k, const unsigned &i) const
Return generalised lagrangian coordinate either directly or via hanging node representation.
SolidNode()
Default Constructor.
void read_values_from_vector(const Vector< double > &vector_of_values, unsigned &index)
Read all data and time history values from the vector starting from index. On return the index will b...
virtual ~SolidNode()
Destructor that cleans up the additional memory allocated in SolidNodes.
void describe_dofs(std::ostream &out, const std::string ¤t_string) const
Function to describe the dofs of the Node. The ostream specifies the output stream to which the descr...
double & xi(const unsigned &i)
Reference to i-th Lagrangian position.
void dump(std::ostream &dump_file) const
Dump nodal positions (variable and fixed) and associated data to file for restart.
void set_external_variable_position_pt(Data *const &data_pt)
Set the variable position data from an external data object.
void read(std::ifstream &restart_file)
Read nodal positions (variable and fixed) and associated data from file for restart.
double * Xi_position
Storage for the Lagrangian positions.
void add_eqn_numbers_to_vector(Vector< long > &vector_of_eqn_numbers)
Add all equation numbers to the vector in the internal storage order. Overload to add equation number...
double & xi_gen(const unsigned &k, const unsigned &i)
Reference to the generalised Lagrangian position. ‘Type’: k; 'Coordinate direction: i.
void assign_eqn_numbers(unsigned long &global_number, Vector< double * > &dof_pt)
Overload the assign equation numbers routine.
void copy(SolidNode *orig_node_pt)
Copy nodal positions and associated data from specified node object.
unsigned nlagrangian() const
Return number of lagrangian coordinates.
TAdvectionDiffusionReactionElement<NREAGENT,DIM,NNODE_1D> elements are isoparametric triangular DIM-d...
Base class for time-stepping schemes. Timestepper provides an approximation of the temporal derivativ...
unsigned ntstorage() const
Return the number of doubles required to represent history (one for steady)
virtual double weight(const unsigned &i, const unsigned &j) const
Access function for j-th weight for the i-th derivative.
bool is_steady() const
Flag to indicate if a timestepper has been made steady (possibly temporarily to switch off time-depen...
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
std::ostream & operator<<(std::ostream &out, const DoubleVector &v)
output operator
OomphInfo oomph_info
Single (global) instantiation of the OomphInfo object – this is used throughout the library as a "rep...