30 #ifndef OOMPH_NODES_HEADER
31 #define OOMPH_NODES_HEADER
35 #include <oomph-lib-config.h>
61 class BoundaryNodeBase;
62 template<
class NODE_TYPE>
96 template<
class NODE_TYPE>
140 int Non_halo_proc_ID;
146 void range_check(
const unsigned&
t,
const unsigned&
i)
const;
206 Data(
const unsigned& initial_n_value);
216 const unsigned& initial_n_value,
217 const bool& allocate_storage =
true);
235 const bool& preserve_existing_data);
273 #ifdef RANGE_CHECKING
281 void set_value(
const unsigned&
t,
const unsigned&
i,
const double& value_)
283 #ifdef RANGE_CHECKING
295 #ifdef RANGE_CHECKING
305 double value(
const unsigned&
t,
const unsigned&
i)
const
307 #ifdef RANGE_CHECKING
326 #ifdef RANGE_CHECKING
339 #ifdef RANGE_CHECKING
352 void dump(std::ostream& dump_file)
const;
355 void read(std::ifstream& restart_file);
360 #ifdef RANGE_CHECKING
369 #ifdef RANGE_CHECKING
378 #ifdef RANGE_CHECKING
385 inline void pin(
const unsigned&
i)
399 const unsigned n_value =
Nvalue;
400 for (
unsigned i = 0;
i < n_value;
i++)
409 const unsigned n_value =
Nvalue;
410 for (
unsigned i = 0;
i < n_value;
i++)
453 const unsigned n_value =
Nvalue;
454 for (
unsigned i = 0;
i < n_value;
i++)
463 const unsigned n_value =
Nvalue;
464 for (
unsigned i = 0;
i < n_value;
i++)
509 virtual void resize(
const unsigned& n_value);
514 std::map<unsigned, double*>& map_of_value_pt);
520 void set_halo(
const unsigned& non_halo_proc_ID)
522 Non_halo_proc_ID = non_halo_proc_ID;
528 Non_halo_proc_ID = -1;
534 return (Non_halo_proc_ID != -1);
539 int non_halo_proc_ID()
541 return Non_halo_proc_ID;
546 virtual void add_values_to_vector(Vector<double>& vector_of_values);
551 virtual void read_values_from_vector(
const Vector<double>& vector_of_values,
557 virtual void add_eqn_numbers_to_vector(Vector<long>& vector_of_eqn_numbers);
562 virtual void read_eqn_numbers_from_vector(
563 const Vector<long>& vector_of_eqn_numbers,
unsigned& index);
642 void resize(
const unsigned& n_value);
716 void resize(
const unsigned& n_value);
748 LeakCheckNames::HangInfo_build += 1;
756 LeakCheckNames::HangInfo_build += 1;
766 LeakCheckNames::HangInfo_build -= 1;
796 throw OomphLibError(
"Hanging node data hasn't been setup yet \n",
801 #ifdef RANGE_CHECKING
813 throw OomphLibError(
"Hanging node data hasn't been setup yet \n",
818 #ifdef RANGE_CHECKING
827 const double& weight);
921 const unsigned&
i)
const;
983 Node(
const unsigned& n_dim,
984 const unsigned& n_position_type,
985 const unsigned& initial_n_value,
986 const bool& allocate_x_position =
true);
996 const unsigned& n_dim,
997 const unsigned& n_position_type,
998 const unsigned& initial_n_value,
999 const bool& allocate_x_position =
true);
1037 const bool& preserve_existing_data);
1043 double*
const& parameter_pt)
1060 double&
x(
const unsigned&
i)
1062 #ifdef RANGE_CHECKING
1069 const double&
x(
const unsigned&
i)
const
1071 #ifdef RANGE_CHECKING
1079 double&
x(
const unsigned&
t,
const unsigned&
i)
1081 #ifdef RANGE_CHECKING
1089 const double&
x(
const unsigned&
t,
const unsigned&
i)
const
1091 #ifdef RANGE_CHECKING
1098 double dx_dt(
const unsigned&
i)
const;
1102 double dx_dt(
const unsigned&
j,
const unsigned&
i)
const;
1126 double&
x_gen(
const unsigned&
k,
const unsigned&
i)
1128 #ifdef RANGE_CHECKING
1136 const double&
x_gen(
const unsigned&
k,
const unsigned&
i)
const
1138 #ifdef RANGE_CHECKING
1146 double&
x_gen(
const unsigned&
t,
const unsigned&
k,
const unsigned&
i)
1148 #ifdef RANGE_CHECKING
1159 const unsigned&
i)
const
1161 #ifdef RANGE_CHECKING
1169 double dx_gen_dt(
const unsigned&
k,
const unsigned&
i)
const;
1177 const unsigned&
i)
const;
1181 double*
x_pt(
const unsigned&
t,
const unsigned&
i)
1190 virtual void dump(std::ostream& dump_file)
const;
1193 void read(std::ifstream& restart_file);
1217 for (
int i = -1;
i < nval;
i++)
1234 "Vector of pointers to hanging data is not setup yet\n",
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 "
1254 <<
"Coordinates: \n";
1256 unsigned n_dim =
ndim();
1257 for (
unsigned i = 0;
i < n_dim;
i++)
1259 error_message << this->
x(i) <<
" ";
1266 #ifdef RANGE_CHECKING
1270 const int n_value =
static_cast<int>(this->
nvalue());
1271 if ((i < -1) || (
i > n_value))
1273 std::ostringstream error_message;
1274 error_message <<
"Range Error: Value " <<
i
1275 <<
" is not in the range (-1," << n_value <<
")";
1300 #ifdef RANGE_CHECKING
1303 const int n_value =
static_cast<int>(this->
nvalue());
1304 if ((i < -1) || (
i > n_value))
1306 std::ostringstream error_message;
1307 error_message <<
"Range Error: Value " <<
i
1308 <<
" is not in the range (-1," << n_value <<
")";
1341 void resize(
const unsigned& n_value);
1477 double value(
const unsigned&
i)
const;
1488 double value(
const unsigned&
t,
const unsigned&
i)
const;
1539 double position(
const unsigned&
i)
const;
1544 double position(
const unsigned&
t,
const unsigned&
i)
const;
1555 const unsigned&
i)
const;
1576 const unsigned&
i)
const;
1587 const bool& update_all_time_levels_for_new_node =
false)
1653 void output(std::ostream& outfile);
1656 #ifdef OOMPH_HAS_MPI
1666 void read_values_from_vector(
const Vector<double>& vector_of_values,
1718 const unsigned& n_lagrangian_type,
1719 const unsigned& n_dim,
1720 const unsigned& n_position_type,
1721 const unsigned& initial_n_value);
1731 const unsigned& n_lagrangian,
1732 const unsigned& n_lagrangian_type,
1733 const unsigned& n_dim,
1735 const unsigned& initial_n_value);
1752 void dump(std::ostream& dump_file)
const;
1756 void read(std::ifstream& restart_file);
1777 const bool& preserve_existing_data);
1885 #ifdef RANGE_CHECKING
1892 const double&
xi(
const unsigned&
i)
const
1894 #ifdef RANGE_CHECKING
1904 #ifdef RANGE_CHECKING
1912 const double&
xi_gen(
const unsigned&
k,
const unsigned&
i)
const
1914 #ifdef RANGE_CHECKING
1947 #ifdef OOMPH_HAS_MPI
1957 void read_values_from_vector(
const Vector<double>& vector_of_values,
1964 void add_eqn_numbers_to_vector(
Vector<long>& vector_of_eqn_numbers);
1971 void read_eqn_numbers_from_vector(
const Vector<long>& vector_of_eqn_numbers,
1981 void node_update(
const bool& update_all_time_levels_for_new_node =
false)
2016 std::map<unsigned, unsigned>*
2027 Node*
const& original_node_pt);
2042 const unsigned& n_additional_value,
const unsigned& face_id = 0) = 0;
2062 const unsigned& face_id = 0)
const
2067 std::ostringstream error_message;
2069 <<
"Index_of_first_value_assigned_by_face_element_pt==0;\n"
2070 <<
"Pointer must be set via call to: \n\n"
2071 <<
" BoundaryNode::assign_additional_values_with_face_id(...), \n\n"
2072 <<
"typically from FaceElement::add_additional_values(...).";
2099 const bool& throw_if_no_value_assigned_by_face_element,
2100 const bool& throw_quietly,
2101 const unsigned& face_id = 0)
const
2104 bool local_throw_if_no_value_assigned_by_face_element =
2105 throw_if_no_value_assigned_by_face_element;
2107 local_throw_if_no_value_assigned_by_face_element =
true;
2110 if (local_throw_if_no_value_assigned_by_face_element)
2114 std::ostringstream error_message;
2116 <<
"Index_of_first_value_assigned_by_face_element_pt==0;\n"
2117 <<
"Pointer must be set via call to: \n\n"
2118 <<
" BoundaryNode::assign_additional_values_with_face_id(...), "
2120 <<
"typically from FaceElement::add_additional_values(...).";
2149 const unsigned& face_id = 0)
const = 0;
2240 template<
class NODE_TYPE>
2269 if (cast_copied_node_pt)
2277 std::ostringstream error_stream;
2278 error_stream <<
"Copied_node_pt is not of type BoundaryNode*"
2297 new std::map<unsigned, unsigned>;
2304 if (cast_copied_node_pt)
2310 std::map<unsigned, unsigned>::const_iterator
end =
2311 (*(cast_copied_node_pt
2314 for (std::map<unsigned, unsigned>::const_iterator it =
2315 (*(cast_copied_node_pt
2322 [it->first] = it->second;
2349 const unsigned n_value = this->nvalue();
2350 const unsigned n_tstorage = this->ntstorage();
2353 this->Eqn_number =
new long[n_value];
2356 this->Value =
new double*[n_value];
2359 double* values =
new double[n_value * n_tstorage];
2362 for (
unsigned i = 0;
i < n_value; ++
i)
2365 this->Value[
i] = &values[
i * n_tstorage];
2367 for (
unsigned t = 0;
t < n_tstorage; ++
t)
2392 const unsigned& n_position_type,
2393 const unsigned& initial_n_value)
2408 const unsigned& n_dim,
2409 const unsigned& n_position_type,
2410 const unsigned& initial_n_value)
2411 :
NODE_TYPE(time_stepper_pt, n_dim, n_position_type, initial_n_value),
2425 const unsigned& n_lagrangian_type,
2426 const unsigned& n_dim,
2427 const unsigned& n_position_type,
2428 const unsigned& initial_n_value)
2446 const unsigned& n_lagrangian,
2447 const unsigned& n_lagrangian_type,
2448 const unsigned& n_dim,
2449 const unsigned& n_position_type,
2450 const unsigned& initial_n_value)
2469 for (
unsigned i = 0;
i < this->Ncopies;
i++)
2475 if (cast_node_pt != 0)
2485 if (
dynamic_cast<HijackedData*
>(this->Copy_of_data_pt[
i]) == 0)
2488 "Copy of a BoundaryNode is not a BoundaryNode or HijackedData",
2489 "BoundaryNode::~BoundaryNode",
2504 this->Eqn_number = 0;
2615 std::ostringstream error_message;
2617 <<
"Index_of_first_value_assigned_by_face_element_pt==0;\n"
2618 <<
"Pointer must be set via call to: \n\n"
2619 <<
" BoundaryNode::assign_additional_values_with_face_id(), \n\n"
2620 <<
"typically from FaceElement::add_additional_values(...).";
2629 unsigned nval = this->nvalue();
2642 else if ((*Index_of_first_value_assigned_by_face_element_pt).size() == 1)
2645 (*Index_of_first_value_assigned_by_face_element_pt)[face_id];
2650 unsigned next_first_index = nval;
2651 unsigned my_first_index =
2652 (*Index_of_first_value_assigned_by_face_element_pt)[face_id];
2653 for (std::map<unsigned, unsigned>::iterator it =
2654 (*Index_of_first_value_assigned_by_face_element_pt).begin();
2655 it != (*Index_of_first_value_assigned_by_face_element_pt).end();
2658 unsigned first_index = (*it).second;
2659 if ((first_index > my_first_index) &&
2660 (first_index < next_first_index))
2662 next_first_index = first_index;
2665 return next_first_index - my_first_index;
2678 const unsigned& n_additional_value,
const unsigned& face_id = 0)
2682 if (n_additional_value == 0)
2684 std::ostringstream warn_message;
2686 <<
"No additional data values are being added to the boundary node "
2688 <<
"by face id " << face_id <<
".\n"
2689 <<
"This means that the function \n"
2690 <<
"BoundaryNode::index_of_first_value_assigned_by_face_element(id) "
2692 <<
"will return a value that is equal to the number of values stored "
2694 <<
"Calling Node::value(...) with this index will lead to an "
2695 "out-of-range error.\n"
2696 <<
"The anticpated usage of a loop from the index over the number of "
2698 <<
"will not cause any problems, but if you try to do anything else, "
2699 "you may be surprised.\n"
2700 <<
"You have been warned!\n";
2710 new std::map<unsigned, unsigned>;
2714 const unsigned n_value = this->nvalue();
2719 this->Index_of_first_value_assigned_by_face_element_pt->end())
2722 (*Index_of_first_value_assigned_by_face_element_pt)[face_id] = n_value;
2728 const unsigned n_value_for_id =
2733 if (n_value_for_id == n_additional_value)
2744 n_value_for_id) != n_value)
2747 std::ostringstream warn_message;
2748 warn_message <<
"Trying to (resize) number of unknowns associated "
2751 <<
"but previous storage for this data is not at the "
2752 "end of the nodal values.\n"
2753 <<
"The anticipated usage here is within constructors "
2754 "that add additional equations\n"
2755 <<
"to existing FaceElements in which case we will "
2756 "always be at the end.\n"
2757 <<
"If you are trying to do something else, then try "
2758 "using a different id.\n"
2759 <<
" FaceElement::add_additional_values(...)."
2760 <<
" For consistency with earlier versions, this will "
2773 this->
resize(n_value + n_additional_value);
2834 NODE_TYPE::assign_eqn_numbers(global_ndof, dof_pt);
2862 if (n_value_new != n_value)
2864 std::ostringstream error_stream;
2866 <<
"Call to resize copied node before original has been resized!"
2888 std::ostringstream warn_message;
2889 warn_message <<
"You are trying to make a Solid Node Periodic.\n"
2890 <<
"This action will reset pointers to stored values and "
2891 <<
"equation numbers,\n"
2892 <<
"meaning that all values will be shared by this Node and "
2894 <<
"Unfortunately, this does not ensure that the variable "
2895 <<
"nodal coordinates coincide.\n"
2896 <<
"For matching nodal coordinates the options are:\n"
2897 <<
"(i) Introduce Lagrange multipliers,\n"
2898 <<
"(ii) Pin one side and treat the data as dependent,\n"
2899 <<
"(iii) Hijack the nodal coordinates on one side "
2900 <<
"and specify an alternative equation.\n\n"
2901 <<
"If you plan to use refineability, then the easiest\n"
2902 <<
"option is to use Lagrange multipliers.\n"
int i
Definition: BiCGSTAB_step_by_step.cpp:9
int data[]
Definition: Map_placement_new.cpp:1
Scalar * b
Definition: benchVecAdd.cpp:17
BoundaryNodeBase()
Default constructor, set the pointers to the storage to NULL.
Definition: nodes.h:2152
unsigned ncoordinates_on_boundary(const unsigned &b)
Get the number of boundary coordinates on mesh boundary b.
Definition: nodes.cc:3119
std::set< unsigned > * Boundaries_pt
Definition: nodes.h:2008
unsigned index_of_first_value_assigned_by_face_element(const bool &throw_if_no_value_assigned_by_face_element, const bool &throw_quietly, const unsigned &face_id=0) const
Definition: nodes.h:2098
void get_boundaries_pt(std::set< unsigned > *&boundaries_pt)
Definition: nodes.h:2177
virtual void assign_additional_values_with_face_id(const unsigned &n_additional_value, const unsigned &face_id=0)=0
void set_coordinates_on_boundary(const unsigned &b, const Vector< double > &boundary_zeta)
Set the vector of boundary coordinates on mesh boundary b.
Definition: nodes.h:2210
void make_node_periodic(Node *const &node_pt, Node *const &original_node_pt)
Definition: nodes.cc:2951
BoundaryNodeBase(const BoundaryNodeBase &boundary_node_base)=delete
Broken copy constructor.
void make_nodes_periodic(Node *const &node_pt, Vector< Node * > const &periodic_copies_pt)
Definition: nodes.cc:2896
void add_to_boundary(const unsigned &b)
Add the node to the mesh boundary b.
Definition: nodes.cc:3028
Node * Copied_node_pt
Definition: nodes.h:2021
void get_coordinates_on_boundary(const unsigned &b, Vector< double > &boundary_zeta)
Return the vector of boundary coordinates on mesh boundary b.
Definition: nodes.h:2201
bool boundary_coordinates_have_been_set_up()
Have boundary coordinates been set up?
Definition: nodes.h:2170
unsigned index_of_first_value_assigned_by_face_element(const unsigned &face_id=0) const
Definition: nodes.h:2061
std::map< unsigned, DenseMatrix< double > * > * Boundary_coordinates_pt
Definition: nodes.h:2004
void operator=(const BoundaryNodeBase &)=delete
Broken assignment operator.
std::map< unsigned, unsigned > * Index_of_first_value_assigned_by_face_element_pt
Definition: nodes.h:2017
bool is_on_boundary() const
Test whether the node lies on a boundary.
Definition: nodes.h:2189
void remove_from_boundary(const unsigned &b)
Remove the node from the mesh boundary b.
Definition: nodes.cc:3062
virtual ~BoundaryNodeBase()
Destructor, clean up any allocated storage for the boundaries.
Definition: nodes.cc:2993
std::map< unsigned, unsigned > *& index_of_first_value_assigned_by_face_element_pt()
Definition: nodes.h:2046
virtual unsigned nvalue_assigned_by_face_element(const unsigned &face_id=0) const =0
void assign_additional_values_with_face_id(const unsigned &n_additional_value, const unsigned &face_id=0)
Definition: nodes.h:2677
BoundaryNode(TimeStepper *const &time_stepper_pt, const unsigned &n_dim, const unsigned &n_position_type, const unsigned &initial_n_value)
Definition: nodes.h:2407
unsigned ncoordinates_on_boundary(const unsigned &b)
Get the number of boundary coordinates on mesh boundary b.
Definition: nodes.h:2558
~BoundaryNode()
Destructor resets pointers if.
Definition: nodes.h:2462
void operator=(const BoundaryNode< NODE_TYPE > &)=delete
Broken assignment operator.
void set_coordinates_on_boundary(const unsigned &b, const Vector< double > &boundary_zeta)
Definition: nodes.h:2574
BoundaryNode(const BoundaryNode< NODE_TYPE > &node)=delete
Broken copy constructor.
bool is_a_copy() const
Definition: nodes.h:2792
Node * copied_node_pt() const
Definition: nodes.h:2822
BoundaryNode(const unsigned &n_dim, const unsigned &n_position_type, const unsigned &initial_n_value)
Definition: nodes.h:2391
void make_periodic_nodes(const Vector< Node * > &periodic_nodes_pt)
Definition: nodes.h:2785
BoundaryNode(const unsigned &n_lagrangian, const unsigned &n_lagrangian_type, const unsigned &n_dim, const unsigned &n_position_type, const unsigned &initial_n_value)
Definition: nodes.h:2424
bool is_on_boundary() const
Definition: nodes.h:2532
bool is_a_copy(const unsigned &i) const
Definition: nodes.h:2807
void clear_copied_pointers()
Definition: nodes.h:2332
void assign_eqn_numbers(unsigned long &global_ndof, Vector< double * > &dof_pt)
Overload the equation assignment operation.
Definition: nodes.h:2828
void resize(const unsigned &n_value)
Resize the number of equations.
Definition: nodes.h:2854
void remove_from_boundary(const unsigned &b)
Remover the node from mesh boundary b, final overload.
Definition: nodes.h:2551
BoundaryNode(TimeStepper *const &time_stepper_pt, const unsigned &n_lagrangian, const unsigned &n_lagrangian_type, const unsigned &n_dim, const unsigned &n_position_type, const unsigned &initial_n_value)
Definition: nodes.h:2445
void make_periodic(Node *const &node_pt)
Make the node periodic.
Definition: nodes.h:2778
void add_to_boundary(const unsigned &b)
Add the node to mesh boundary b, final overload.
Definition: nodes.h:2545
BoundaryNode()
Default Constructor.
Definition: nodes.h:2382
void clear_additional_copied_pointers()
Definition: nodes.h:2288
void reset_copied_pointers()
Set pointers to the copied data used when we have periodic nodes.
Definition: nodes.h:2245
bool boundary_coordinates_have_been_set_up()
Have boundary coordinates been set up?
Definition: nodes.h:2517
unsigned nvalue_assigned_by_face_element(const unsigned &face_id=0) const
Definition: nodes.h:2610
void get_coordinates_on_boundary(const unsigned &b, Vector< double > &boundary_zeta)
Definition: nodes.h:2566
void set_coordinates_on_boundary(const unsigned &b, const unsigned &k, const Vector< double > &boundary_zeta)
Definition: nodes.h:2592
void get_boundaries_pt(std::set< unsigned > *&boundaries_pt)
Definition: nodes.h:2525
void get_coordinates_on_boundary(const unsigned &b, const unsigned &k, Vector< double > &boundary_zeta)
Definition: nodes.h:2583
bool is_on_boundary(const unsigned &b) const
Definition: nodes.h:2539
void assign_eqn_numbers(unsigned long &global_ndof, Vector< double * > &dof_pt)
Definition: nodes.h:708
~CopiedData()
Definition: nodes.h:675
Data * Copied_data_pt
Pointer to the Data object from which the values are copied.
Definition: nodes.h:655
void clear_copied_pointers()
Clear the pointers to the copied data.
Definition: nodes.cc:1398
void reset_copied_pointers()
Reset the pointers to the copied data.
Definition: nodes.cc:1381
bool is_a_copy(const unsigned &i) const
Definition: nodes.h:701
void resize(const unsigned &n_value)
We do not allow Copied Data to be resized.
Definition: nodes.cc:1438
bool is_a_copy() const
Definition: nodes.h:693
CopiedData(const Data &data)=delete
(Shallow) copy constructor
void operator=(const CopiedData &)=delete
Broken assignment operator.
long eqn_number(const unsigned &i) const
Return the equation number of the i-th stored variable.
Definition: nodes.h:376
static TimeStepper * Default_static_time_stepper_pt
Default (static) timestepper used in steady problems.
Definition: nodes.h:162
void add_copy(Data *const &data_pt)
Definition: nodes.cc:76
long & eqn_number(const unsigned &i)
Return the equation number of the i-th stored variable.
Definition: nodes.h:367
void pin_all()
Pin all the stored variables.
Definition: nodes.h:397
long * Eqn_number
Definition: nodes.h:116
bool does_pointer_correspond_to_value(double *const ¶meter_pt)
Check whether the pointer parameter_pt addresses internal data values.
Definition: nodes.cc:568
void constrain(const unsigned &i)
Definition: nodes.h:432
virtual void describe_dofs(std::ostream &out, const std::string ¤t_string) const
Definition: nodes.cc:939
virtual void add_value_pt_to_map(std::map< unsigned, double * > &map_of_value_pt)
Definition: nodes.cc:1089
long * eqn_number_pt(const unsigned &i)
Return the pointer to the equation number of the i-th stored variable.
Definition: nodes.h:358
unsigned Nvalue
Number of values stored in the data object.
Definition: nodes.h:135
void set_value(const unsigned &t, const unsigned &i, const double &value_)
Definition: nodes.h:281
static long Is_pinned
Static "Magic number" to indicate pinned values.
Definition: nodes.h:183
double value(const unsigned &t, const unsigned &i) const
Definition: nodes.h:305
void range_check(const unsigned &t, const unsigned &i) const
Definition: nodes.cc:47
void remove_copy(Data *const &data_pt)
Definition: nodes.cc:102
virtual void clear_copied_pointers()
Definition: nodes.cc:176
void pin(const unsigned &i)
Pin the i-th stored variable.
Definition: nodes.h:385
friend class HijackedData
Definition: nodes.h:93
bool is_segregated_solve_pinned(const unsigned &i)
Definition: nodes.h:424
Data ** Copy_of_data_pt
Definition: nodes.h:127
void unpin(const unsigned &i)
Unpin the i-th stored variable.
Definition: nodes.h:391
double * value_pt(const unsigned &i) const
Definition: nodes.h:324
void copy(Data *orig_data_pt)
Copy Data values from specified Data object.
Definition: nodes.cc:601
void unpin_all()
Unpin all the stored variables.
Definition: nodes.h:407
TimeStepper *& time_stepper_pt()
Return the pointer to the timestepper.
Definition: nodes.h:238
void unconstrain_all()
Unconstrain all the stored variables when the data is made nonhanging.
Definition: nodes.h:461
TimeStepper * Time_stepper_pt
Definition: nodes.h:122
friend class CopiedData
Definition: nodes.h:94
static long Is_constrained
Definition: nodes.h:198
void set_value(const unsigned &i, const double &value_)
Definition: nodes.h:271
virtual bool is_a_copy() const
Definition: nodes.h:253
unsigned nvalue() const
Return number of values stored in data object (incl pinned ones).
Definition: nodes.h:483
unsigned Ncopies
Definition: nodes.h:131
void dump(std::ostream &dump_file) const
Dump the data object to a file.
Definition: nodes.cc:645
virtual ~Data()
Destructor, deallocates memory assigned for data.
Definition: nodes.cc:483
double value(const unsigned &i) const
Definition: nodes.h:293
unsigned ntstorage() const
Definition: nodes.cc:879
virtual void assign_eqn_numbers(unsigned long &global_ndof, Vector< double * > &dof_pt)
Definition: nodes.cc:896
double ** Value
Definition: nodes.h:112
Data(const Data &data)=delete
Broken copy constructor.
void constrain_all()
Constrain all the stored variables when the data is made hanging.
Definition: nodes.h:451
friend std::ostream & operator<<(std::ostream &out, const Data &d)
Definition: nodes.cc:349
bool is_constrained(const unsigned &i)
Definition: nodes.h:472
static long Is_unclassified
Definition: nodes.h:192
void delete_value_storage()
Definition: nodes.cc:187
virtual void resize(const unsigned &n_value)
Change (increase) the number of values that may be stored.
Definition: nodes.cc:1002
Data()
Default constructor.
Definition: nodes.cc:237
void unconstrain(const unsigned &i)
Definition: nodes.h:442
void set_time_stepper(TimeStepper *const &time_stepper_pt, const bool &preserve_existing_data)
Definition: nodes.cc:406
TimeStepper *const & time_stepper_pt() const
Return the pointer to the timestepper (const version).
Definition: nodes.h:244
void read(std::ifstream &restart_file)
Read data object from a file.
Definition: nodes.cc:672
static long Is_segregated_solve_pinned
Definition: nodes.h:188
virtual bool is_a_copy(const unsigned &i) const
Definition: nodes.h:261
unsigned self_test()
Definition: nodes.cc:965
double * value_pt(const unsigned &t, const unsigned &i) const
Definition: nodes.h:337
bool is_pinned(const unsigned &i) const
Test whether the i-th variable is pinned (1: true; 0: false).
Definition: nodes.h:417
void operator=(const Data &)=delete
Broken assignment operator.
virtual void reset_copied_pointers()
Definition: nodes.cc:162
Definition: geom_objects.h:101
Node ** Master_nodes_pt
C-style array of pointers to nodes that this hanging node depends on.
Definition: nodes.h:839
~HangInfo()
Delete the storage.
Definition: nodes.h:763
HangInfo()
Default constructor, initialise vectors to have size zero.
Definition: nodes.h:745
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
void operator=(const HangInfo &)=delete
Broken assignment operator.
HangInfo(const unsigned &n_master)
Alternative constructor when the number of master nodes is known.
Definition: nodes.h:753
void range_check(const unsigned &i) const
Definition: nodes.cc:1456
unsigned Nmaster
Number of master nodes required by this hanging node.
Definition: nodes.h:845
unsigned nmaster() const
Return the number of master nodes.
Definition: nodes.h:785
double * Master_weights
C-style array of weights for the dofs on the master nodes.
Definition: nodes.h:842
void add_master_node_pt(Node *const &master_node_pt, const double &weight)
Definition: nodes.cc:1489
HangInfo(const HangInfo &)=delete
Broken copy constructor.
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.
Definition: nodes.cc:1474
Data * Copied_data_pt
Pointer to the Data object from which the value is copied.
Definition: nodes.h:578
~HijackedData()
Definition: nodes.h:601
void assign_eqn_numbers(unsigned long &global_ndof, Vector< double * > &dof_pt)
Definition: nodes.h:634
unsigned Copied_index
Index of the value that is copied from within the Data object.
Definition: nodes.h:581
bool is_a_copy(const unsigned &i) const
Definition: nodes.h:627
bool is_a_copy() const
Definition: nodes.h:619
void resize(const unsigned &n_value)
We do not allow Hijacked Data to be resized.
Definition: nodes.cc:1363
void reset_copied_pointers()
Reset the pointers to the copied data.
Definition: nodes.cc:1304
void operator=(const HijackedData &)=delete
Broken assignment operator.
HijackedData(const Data &data)=delete
(Shallow) copy constructor
void clear_copied_pointers()
Clear the pointers to the copied data.
Definition: nodes.cc:1318
static OomphCommunicator * communicator_pt()
access to the global oomph-lib communicator
Definition: oomph_utilities.cc:1046
double dx_gen_dt(const unsigned &k, const unsigned &i) const
Definition: nodes.cc:1865
double & x(const unsigned &i)
Return the i-th nodal coordinate.
Definition: nodes.h:1060
double & x_gen(const unsigned &k, const unsigned &i)
Definition: nodes.h:1126
virtual void set_coordinates_on_boundary(const unsigned &b, const Vector< double > &boundary_zeta)
Definition: nodes.h:1428
HangInfo *const & hanging_pt() const
Definition: nodes.h:1228
HangInfo *const & hanging_pt(const int &i) const
Return pointer to hanging node data for value i (const version)
Definition: nodes.h:1243
virtual bool position_is_a_copy(const unsigned &i) const
Return whether the position coordinate i has been copied (always false)
Definition: nodes.h:1119
void copy(Node *orig_node_pt)
Copy all nodal data from specified Node object.
Definition: nodes.cc:1916
double & x_gen(const unsigned &t, const unsigned &k, const unsigned &i)
Definition: nodes.h:1146
virtual void set_position_time_stepper(TimeStepper *const &position_time_stepper_pt, const bool &preserve_existing_data)
Definition: nodes.cc:1752
void operator=(const Node &)=delete
Broken assignment operator.
virtual unsigned ncoordinates_on_boundary(const unsigned &b)
Definition: nodes.cc:2363
void set_nonhanging()
Label node as non-hanging node by removing all hanging node data.
Definition: nodes.cc:2281
bool is_obsolete()
Test whether node is obsolete.
Definition: nodes.h:1448
virtual unsigned ngeom_object() const
Definition: nodes.h:1639
virtual bool is_on_boundary() const
Definition: nodes.h:1373
virtual GeomObject ** all_geom_object_pt()
Definition: nodes.h:1647
void set_obsolete()
Mark node as obsolete.
Definition: nodes.h:1436
virtual void get_boundaries_pt(std::set< unsigned > *&boundaries_pt)
Definition: nodes.h:1365
virtual void pin_all()
Definition: nodes.h:1197
void read(std::ifstream &restart_file)
Read nodal position and associated data from file for restart.
Definition: nodes.cc:1996
static unsigned No_independent_position
Definition: nodes.h:972
bool is_hanging(const int &i) const
Test whether the i-th value is hanging.
Definition: nodes.h:1298
TimeStepper *const & position_time_stepper_pt() const
Return a pointer to the position timestepper (const version).
Definition: nodes.h:1028
void x_gen_range_check(const unsigned &t, const unsigned &k, const unsigned &i) const
Definition: nodes.cc:1528
virtual void assign_eqn_numbers(unsigned long &global_ndof, Vector< double * > &dof_pt)
Definition: nodes.cc:534
void set_auxiliary_node_update_fct_pt(AuxNodeUpdateFctPt aux_node_update_fct_pt)
Definition: nodes.h:1596
virtual void remove_from_boundary(const unsigned &b)
Definition: nodes.cc:2350
void perform_auxiliary_node_update_fct()
Definition: nodes.h:1615
virtual void get_coordinates_on_boundary(const unsigned &b, Vector< double > &boundary_zeta)
Definition: nodes.h:1420
void set_non_obsolete()
Mark node as non-obsolete.
Definition: nodes.h:1442
virtual Data ** all_geom_data_pt()
Definition: nodes.h:1632
unsigned ndim() const
Return (Eulerian) spatial dimension of the node.
Definition: nodes.h:1054
virtual void make_periodic_nodes(const Vector< Node * > &periodic_nodes_pt)
Definition: nodes.cc:2270
double & x(const unsigned &t, const unsigned &i)
Definition: nodes.h:1079
virtual bool position_is_a_copy() const
Return whether any position coordinate has been copied (always false)
Definition: nodes.h:1113
const double & x_gen(const unsigned &k, const unsigned &i) const
Definition: nodes.h:1136
double * x_position_pt(const unsigned &i)
Direct access to the pointer to the i-th stored coordinate data.
Definition: nodes.h:958
virtual void constrain_positions()
Definition: nodes.h:1345
void output(std::ostream &outfile)
Output nodal position.
Definition: nodes.cc:2760
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
virtual void unpin_all()
Definition: nodes.h:1204
double ** X_position
Definition: nodes.h:929
virtual void add_to_boundary(const unsigned &b)
Definition: nodes.cc:2336
virtual void set_coordinates_on_boundary(const unsigned &b, const unsigned &k, const Vector< double > &boundary_zeta)
Definition: nodes.cc:2394
HangInfo ** Hanging_pt
Definition: nodes.h:942
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)
Definition: nodes.cc:2068
Vector< double > value() const
Return vector of values calculated using value(vector).
Definition: nodes.h:1502
double * x_pt(const unsigned &t, const unsigned &i)
Definition: nodes.h:1181
TimeStepper *& position_time_stepper_pt()
Return a pointer to the position timestepper.
Definition: nodes.h:1022
const double & x(const unsigned &i) const
Return the i-th nodal coordinate (const version).
Definition: nodes.h:1069
const double & x(const unsigned &t, const unsigned &i) const
Definition: nodes.h:1089
unsigned Nposition_type
Definition: nodes.h:951
virtual bool boundary_coordinates_have_been_set_up()
Definition: nodes.cc:2323
double position_gen(const unsigned &k, const unsigned &i) const
Definition: nodes.cc:2592
unsigned Ndim
Eulerian dimension of the node.
Definition: nodes.h:945
unsigned hang_code()
Definition: nodes.h:1213
virtual bool does_pointer_correspond_to_position_data(double *const ¶meter_pt)
Definition: nodes.h:1042
virtual void get_coordinates_on_boundary(const unsigned &b, const unsigned &k, Vector< double > &boundary_zeta)
Definition: nodes.cc:2379
double raw_value(const unsigned &i) const
Definition: nodes.h:1455
virtual void unconstrain_positions()
Definition: nodes.h:1349
Node(const Node &node)=delete
Broken copy constructor.
Vector< double > position() const
Return vector of position of node at current time.
Definition: nodes.h:1525
virtual Node * copied_node_pt() const
Definition: nodes.h:1107
virtual void dump(std::ostream &dump_file) const
Dump nodal position and associated data to file for restart.
Definition: nodes.cc:1969
friend std::ostream & operator<<(std::ostream &out, const Node &d)
Definition: nodes.cc:373
virtual bool is_on_boundary(const unsigned &b) const
Definition: nodes.h:1381
virtual unsigned ngeom_data() const
Definition: nodes.h:1625
const double & x_gen(const unsigned &t, const unsigned &k, const unsigned &i) const
Definition: nodes.h:1157
double dposition_dt(const unsigned &i) const
Definition: nodes.cc:2659
bool has_auxiliary_node_update_fct_pt()
Definition: nodes.h:1606
double dx_dt(const unsigned &i) const
Return the i-th component of nodal velocity: dx/dt.
Definition: nodes.cc:1817
bool Obsolete
Definition: nodes.h:955
void resize(const unsigned &n_value)
Resize the number of equations.
Definition: nodes.cc:2167
virtual void make_periodic(Node *const &node_pt)
Definition: nodes.cc:2257
double raw_value(const unsigned &t, const unsigned &i) const
Definition: nodes.h:1463
virtual void node_update(const bool &update_all_time_levels_for_new_node=false)
Definition: nodes.h:1586
unsigned nposition_type() const
Definition: nodes.h:1016
bool is_hanging() const
Test whether the node is geometrically hanging.
Definition: nodes.h:1285
Node()
Default constructor.
Definition: nodes.cc:1574
double dposition_gen_dt(const unsigned &k, const unsigned &i) const
Definition: nodes.cc:2708
virtual ~Node()
Destructor: Clean up the memory allocated for nodal position.
Definition: nodes.cc:1695
void(* AuxNodeUpdateFctPt)(Node *)
Function pointer to auxiliary node update function.
Definition: nodes.h:909
double value(const unsigned &i) const
Definition: nodes.cc:2408
int my_rank() const
my rank
Definition: communicator.h:176
Definition: oomph_definitions.h:222
Definition: oomph_definitions.h:149
Definition: oomph_definitions.h:267
void constrain_positions()
Definition: nodes.h:1857
void xi_gen_range_check(const unsigned &k, const unsigned &i) const
Definition: nodes.cc:3312
void unpin_all()
Unpin all the stored variables (Overloaded)
Definition: nodes.h:1849
const double & xi(const unsigned &i) const
Reference to i-th Lagrangian position (const version)
Definition: nodes.h:1892
void set_position_time_stepper(TimeStepper *const &position_time_stepper_pt, const bool &preserve_existing_data)
Definition: nodes.cc:3548
unsigned Nlagrangian
Number of Lagrangian coordinates of the node.
Definition: nodes.h:1694
void unconstrain_positions()
Definition: nodes.h:1864
bool does_pointer_correspond_to_position_data(double *const ¶meter_pt)
Check whether the pointer parameter_pt refers to positional data.
Definition: nodes.cc:3573
const double & xi_gen(const unsigned &k, const unsigned &i) const
Definition: nodes.h:1912
unsigned nlagrangian_type() const
Definition: nodes.h:1877
void unpin_position(const unsigned &k, const unsigned &i)
Definition: nodes.h:1836
double & xi_gen(const unsigned &k, const unsigned &i)
Definition: nodes.h:1902
SolidNode(const SolidNode &solid_node)=delete
Broken copy constructor.
const Data & variable_position() const
Return the variable_position data (const version)
Definition: nodes.h:1759
Data * Variable_position_pt
Pointer to data that will hold variable positions in elastic nodes.
Definition: nodes.h:1701
void add_value_pt_to_map(std::map< unsigned, double * > &map_of_value_pt)
Definition: nodes.cc:3693
unsigned Nlagrangian_type
Definition: nodes.h:1698
double lagrangian_position(const unsigned &i) const
Definition: nodes.cc:3586
double lagrangian_position_gen(const unsigned &k, const unsigned &i) const
Definition: nodes.cc:3619
SolidNode()
Default Constructor.
Definition: nodes.h:1708
const long & position_eqn_number(const unsigned &k, const unsigned &i) const
Definition: nodes.h:1797
virtual ~SolidNode()
Destructor that cleans up the additional memory allocated in SolidNodes.
Definition: nodes.cc:3416
void describe_dofs(std::ostream &out, const std::string ¤t_string) const
Definition: nodes.cc:3671
bool position_is_a_copy(const unsigned &i) const
Return whether the position coordinate i has been copied.
Definition: nodes.h:1790
void pin_position(const unsigned &i)
Pin the nodal position.
Definition: nodes.h:1816
bool position_is_a_copy() const
Return whether any position component has been copied.
Definition: nodes.h:1784
void dump(std::ostream &dump_file) const
Dump nodal positions and associated data to file for restart.
Definition: nodes.cc:3470
void pin_all()
Pin all the stored variables (Overloaded)
Definition: nodes.h:1842
void unpin_position(const unsigned &i)
Unpin the nodal position.
Definition: nodes.h:1829
void set_external_variable_position_pt(Data *const &data_pt)
Set the variable position data from an external data object.
Definition: nodes.cc:3532
void read(std::ifstream &restart_file)
Read nodal positions and associated data to file for restart.
Definition: nodes.cc:3490
double * Xi_position
Storage for the Lagrangian positions.
Definition: nodes.h:1704
double & xi(const unsigned &i)
Reference to i-th Lagrangian position.
Definition: nodes.h:1883
void pin_position(const unsigned &k, const unsigned &i)
Definition: nodes.h:1823
void assign_eqn_numbers(unsigned long &global_number, Vector< double * > &dof_pt)
Overload the assign equation numbers routine.
Definition: nodes.cc:3652
void copy(SolidNode *orig_node_pt)
Definition: nodes.cc:3433
void node_update(const bool &update_all_time_levels_for_new_node=false)
Definition: nodes.h:1981
Data *const & variable_position_pt() const
Pointer to variable_position data (const version)
Definition: nodes.h:1765
bool position_is_pinned(const unsigned &k, const unsigned &i)
Definition: nodes.h:1810
unsigned nlagrangian() const
Return number of lagrangian coordinates.
Definition: nodes.h:1870
bool position_is_pinned(const unsigned &i)
Test whether the i-th coordinate is pinned, 0: false; 1: true.
Definition: nodes.h:1803
void operator=(const SolidNode &)=delete
Broken assignment operator.
Definition: timesteppers.h:231
static constexpr lastp1_t end
Definition: IndexedViewHelper.h:79
char char char int int * k
Definition: level2_impl.h:374
EIGEN_STRONG_INLINE EIGEN_DEVICE_FUNC bfloat16 pow(const bfloat16 &a, const bfloat16 &b)
Definition: BFloat16.h:625
std::string string(const unsigned &i)
Definition: oomph_definitions.cc:286
DRAIG: Change all instances of (SPATIAL_DIM) to (DIM-1).
Definition: AnisotropicHookean.h:10
t
Definition: plotPSD.py:36
#define OOMPH_EXCEPTION_LOCATION
Definition: oomph_definitions.h:61
#define OOMPH_CURRENT_FUNCTION
Definition: oomph_definitions.h:86
std::ofstream out("Result.txt")
std::ptrdiff_t j
Definition: tut_arithmetic_redux_minmax.cpp:2