suanPan
Loading...
Searching...
No Matches
Node.h
Go to the documentation of this file.
1/*******************************************************************************
2 * Copyright (C) 2017-2025 Theodore Chang
3 *
4 * This program is free software: you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation, either version 3 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program. If not, see <http://www.gnu.org/licenses/>.
16 ******************************************************************************/
38#ifndef NODE_H
39#define NODE_H
40
41#include <Domain/Tag.h>
42
43class DomainBase;
44enum class OutputType;
45enum class DOF : std::uint8_t;
46
47struct NodeData {
48 unsigned num_dof = 0; // number of DoFs
49
50 vec coordinate; // coordinates of the node
51
52 uvec original_dof; // original indices
53 uvec reordered_dof; // renumbered indices
54
55 vec current_resistance; // current resistance
56 vec current_damping_force; // current damping force
57 vec current_nonviscous_force; // current damping force
58 vec current_inertial_force; // current inertial force
59 vec current_displacement; // current displacement
60 vec current_velocity; // current velocity
61 vec current_acceleration; // current acceleration
62
63 vec incre_resistance; // incremental resistance
64 vec incre_damping_force; // incremental damping force
65 vec incre_nonviscous_force; // incremental damping force
66 vec incre_inertial_force; // incremental inertial force
67 vec incre_displacement; // incremental displacement
68 vec incre_velocity; // incremental velocity
69 vec incre_acceleration; // incremental acceleration
70
71 vec trial_resistance; // trial resistance
72 vec trial_damping_force; // trial damping force
73 vec trial_nonviscous_force; // trial damping force
74 vec trial_inertial_force; // trial inertial force
75 vec trial_displacement; // trial displacement
76 vec trial_velocity; // trial velocity
77 vec trial_acceleration; // trial acceleration
78};
79
80class Node final : protected NodeData, public UniqueTag {
81 bool initialized = false;
82
83 std::mutex node_mutex;
84
85 std::vector<DOF> dof_identifier;
86
87public:
88 explicit Node(unsigned = 0);
89 Node(unsigned, vec&&);
90 Node(unsigned, unsigned);
91 Node(unsigned, unsigned, vec&&);
92
93 void initialize(const shared_ptr<DomainBase>&);
94
95 void set_initialized(bool);
96 [[nodiscard]] bool get_initialized() const;
97
98 void set_dof_number(unsigned);
99 [[nodiscard]] unsigned get_dof_number() const;
100
101 void set_dof_identifier(const std::vector<DOF>&);
102 [[nodiscard]] const std::vector<DOF>& get_dof_identifier() const;
103
104 void set_original_dof(unsigned&);
105 void set_original_dof(const uvec&);
106 [[nodiscard]] const uvec& get_original_dof() const;
107
108 void set_reordered_dof(const uvec&);
109 [[nodiscard]] const uvec& get_reordered_dof() const;
110
111 void set_coordinate(const vec&);
112 [[nodiscard]] const vec& get_coordinate() const;
113
114 void set_current_resistance(const vec&);
115 void set_current_damping_force(const vec&);
116 void set_current_nonviscous_force(const vec&);
117 void set_current_inertial_force(const vec&);
118 void set_current_displacement(const vec&);
119 void set_current_velocity(const vec&);
120 void set_current_acceleration(const vec&);
121
122 void set_incre_resistance(const vec&);
123 void set_incre_damping_force(const vec&);
124 void set_incre_nonviscous_force(const vec&);
125 void set_incre_inertial_force(const vec&);
126 void set_incre_displacement(const vec&);
127 void set_incre_velocity(const vec&);
128 void set_incre_acceleration(const vec&);
129
130 void set_trial_resistance(const vec&);
131 void set_trial_damping_force(const vec&);
132 void set_trial_nonviscous_force(const vec&);
133 void set_trial_inertial_force(const vec&);
134 void set_trial_displacement(const vec&);
135 void set_trial_velocity(const vec&);
136 void set_trial_acceleration(const vec&);
137
138 [[nodiscard]] const vec& get_current_resistance() const;
139 [[nodiscard]] const vec& get_current_damping_force() const;
140 [[nodiscard]] const vec& get_current_nonviscous_force() const;
141 [[nodiscard]] const vec& get_current_inertial_force() const;
142 [[nodiscard]] const vec& get_current_displacement() const;
143 [[nodiscard]] const vec& get_current_velocity() const;
144 [[nodiscard]] const vec& get_current_acceleration() const;
145
146 [[nodiscard]] const vec& get_incre_resistance() const;
147 [[nodiscard]] const vec& get_incre_damping_force() const;
148 [[nodiscard]] const vec& get_incre_nonviscous_force() const;
149 [[nodiscard]] const vec& get_incre_inertial_force() const;
150 [[nodiscard]] const vec& get_incre_displacement() const;
151 [[nodiscard]] const vec& get_incre_velocity() const;
152 [[nodiscard]] const vec& get_incre_acceleration() const;
153
154 [[nodiscard]] const vec& get_trial_resistance() const;
155 [[nodiscard]] const vec& get_trial_damping_force() const;
156 [[nodiscard]] const vec& get_trial_nonviscous_force() const;
157 [[nodiscard]] const vec& get_trial_inertial_force() const;
158 [[nodiscard]] const vec& get_trial_displacement() const;
159 [[nodiscard]] const vec& get_trial_velocity() const;
160 [[nodiscard]] const vec& get_trial_acceleration() const;
161
162 void update_current_resistance(const vec&);
163 void update_current_damping_force(const vec&);
164 void update_current_nonviscous_force(const vec&);
165 void update_current_inertial_force(const vec&);
166 void update_current_displacement(const vec&);
167 void update_current_velocity(const vec&);
168 void update_current_acceleration(const vec&);
169
170 void update_incre_resistance(const vec&);
171 void update_incre_damping_force(const vec&);
172 void update_incre_nonviscous_force(const vec&);
173 void update_incre_inertial_force(const vec&);
174 void update_incre_displacement(const vec&);
175 void update_incre_velocity(const vec&);
176 void update_incre_acceleration(const vec&);
177
178 void update_trial_resistance(const vec&);
179 void update_trial_damping_force(const vec&);
180 void update_trial_nonviscous_force(const vec&);
181 void update_trial_inertial_force(const vec&);
182 void update_trial_displacement(const vec&);
183 void update_trial_velocity(const vec&);
184 void update_trial_acceleration(const vec&);
185
186 void update_current_status(const vec&);
187 void update_current_status(const vec&, const vec&);
188 void update_current_status(const vec&, const vec&, const vec&);
189
190 void update_incre_status(const vec&);
191 void update_incre_status(const vec&, const vec&);
192 void update_incre_status(const vec&, const vec&, const vec&);
193
194 void update_trial_status(const vec&);
195 void update_trial_status(const vec&, const vec&);
196 void update_trial_status(const vec&, const vec&, const vec&);
197
198 void commit_status();
199 void reset_status();
200 void clear_status();
201
202 [[nodiscard]] std::vector<vec> record(OutputType) const;
203
204 void print() override;
205};
206
207#endif
208
OutputType
Definition OutputType.h:23
The DomainBase class is a template.
Definition DomainBase.h:102
The Node class holds the number of DoFs, coordinate, displacement, velocity and acceleration.
Definition Node.h:80
const vec & get_incre_damping_force() const
Definition Node.cpp:206
void update_incre_damping_force(const vec &)
Definition Node.cpp:274
const vec & get_coordinate() const
Definition Node.cpp:146
void update_trial_damping_force(const vec &)
Definition Node.cpp:323
void set_coordinate(const vec &)
Definition Node.cpp:144
const std::vector< DOF > & get_dof_identifier() const
Definition Node.cpp:119
const uvec & get_original_dof() const
Definition Node.cpp:138
void set_trial_acceleration(const vec &)
Definition Node.cpp:188
const vec & get_trial_acceleration() const
Definition Node.cpp:230
const vec & get_trial_resistance() const
Definition Node.cpp:218
void set_current_nonviscous_force(const vec &)
Definition Node.cpp:152
void set_incre_velocity(const vec &)
Definition Node.cpp:172
const vec & get_incre_resistance() const
Definition Node.cpp:204
void update_incre_displacement(const vec &)
Definition Node.cpp:295
const vec & get_trial_damping_force() const
Definition Node.cpp:220
void set_trial_inertial_force(const vec &)
Definition Node.cpp:182
const vec & get_current_nonviscous_force() const
Definition Node.cpp:194
const vec & get_trial_nonviscous_force() const
Definition Node.cpp:222
void update_current_nonviscous_force(const vec &)
Definition Node.cpp:242
void print() override
Definition Node.cpp:579
void update_incre_inertial_force(const vec &)
Definition Node.cpp:288
const vec & get_incre_inertial_force() const
Definition Node.cpp:210
void update_trial_status(const vec &)
Definition Node.cpp:405
void set_current_acceleration(const vec &)
Definition Node.cpp:160
unsigned get_dof_number() const
Definition Node.cpp:104
void update_current_status(const vec &)
Definition Node.cpp:365
void update_trial_velocity(const vec &)
Definition Node.cpp:351
void set_initialized(bool)
Definition Node.cpp:93
void update_incre_velocity(const vec &)
Definition Node.cpp:302
const vec & get_incre_nonviscous_force() const
Definition Node.cpp:208
void update_current_resistance(const vec &)
Definition Node.cpp:232
void update_current_acceleration(const vec &)
Definition Node.cpp:262
void set_trial_damping_force(const vec &)
Definition Node.cpp:178
void update_current_inertial_force(const vec &)
Definition Node.cpp:247
void set_reordered_dof(const uvec &)
Definition Node.cpp:140
void set_current_displacement(const vec &)
Definition Node.cpp:156
void update_trial_inertial_force(const vec &)
Definition Node.cpp:337
void update_trial_resistance(const vec &)
Definition Node.cpp:316
const uvec & get_reordered_dof() const
Definition Node.cpp:142
const vec & get_incre_velocity() const
Definition Node.cpp:214
void reset_status()
Definition Node.cpp:459
const vec & get_current_resistance() const
Definition Node.cpp:190
void set_dof_identifier(const std::vector< DOF > &)
Definition Node.cpp:106
void set_trial_resistance(const vec &)
Definition Node.cpp:176
const vec & get_incre_displacement() const
Definition Node.cpp:212
const vec & get_trial_inertial_force() const
Definition Node.cpp:224
const vec & get_current_displacement() const
Definition Node.cpp:198
void set_incre_resistance(const vec &)
Definition Node.cpp:162
void set_dof_number(unsigned)
Definition Node.cpp:97
const vec & get_trial_displacement() const
Definition Node.cpp:226
void update_incre_nonviscous_force(const vec &)
Definition Node.cpp:281
void clear_status()
Definition Node.cpp:490
void set_incre_damping_force(const vec &)
Definition Node.cpp:164
void set_current_damping_force(const vec &)
Definition Node.cpp:150
void set_incre_nonviscous_force(const vec &)
Definition Node.cpp:166
void update_trial_nonviscous_force(const vec &)
Definition Node.cpp:330
void update_trial_acceleration(const vec &)
Definition Node.cpp:358
void set_trial_nonviscous_force(const vec &)
Definition Node.cpp:180
void set_trial_velocity(const vec &)
Definition Node.cpp:186
void set_current_velocity(const vec &)
Definition Node.cpp:158
void set_incre_acceleration(const vec &)
Definition Node.cpp:174
void commit_status()
Definition Node.cpp:428
std::vector< vec > record(OutputType) const
Definition Node.cpp:530
const vec & get_current_velocity() const
Definition Node.cpp:200
void update_current_velocity(const vec &)
Definition Node.cpp:257
const vec & get_current_acceleration() const
Definition Node.cpp:202
const vec & get_current_damping_force() const
Definition Node.cpp:192
void set_current_resistance(const vec &)
Definition Node.cpp:148
void set_current_inertial_force(const vec &)
Definition Node.cpp:154
const vec & get_trial_velocity() const
Definition Node.cpp:228
const vec & get_current_inertial_force() const
Definition Node.cpp:196
void update_incre_acceleration(const vec &)
Definition Node.cpp:309
void set_trial_displacement(const vec &)
Definition Node.cpp:184
void update_trial_displacement(const vec &)
Definition Node.cpp:344
void set_incre_displacement(const vec &)
Definition Node.cpp:170
void set_original_dof(unsigned &)
Definition Node.cpp:121
bool get_initialized() const
Definition Node.cpp:95
void update_current_displacement(const vec &)
Definition Node.cpp:252
const vec & get_incre_acceleration() const
Definition Node.cpp:216
void initialize(const shared_ptr< DomainBase > &)
This method should be called after Element objects are set. Element objects will set the minimum numb...
Definition Node.cpp:64
void update_current_damping_force(const vec &)
Definition Node.cpp:237
void set_incre_inertial_force(const vec &)
Definition Node.cpp:168
void update_incre_resistance(const vec &)
Definition Node.cpp:267
void update_incre_status(const vec &)
Definition Node.cpp:382
Definition Tag.h:77
DOF
Definition DOF.h:29
Definition Node.h:47
unsigned num_dof
Definition Node.h:48
vec incre_displacement
Definition Node.h:67
vec trial_damping_force
Definition Node.h:72
vec incre_resistance
Definition Node.h:63
vec trial_nonviscous_force
Definition Node.h:73
vec current_resistance
Definition Node.h:55
vec incre_inertial_force
Definition Node.h:66
vec current_damping_force
Definition Node.h:56
vec current_displacement
Definition Node.h:59
vec trial_acceleration
Definition Node.h:77
vec current_velocity
Definition Node.h:60
vec current_acceleration
Definition Node.h:61
vec trial_inertial_force
Definition Node.h:74
vec trial_displacement
Definition Node.h:75
vec trial_velocity
Definition Node.h:76
vec current_inertial_force
Definition Node.h:58
uvec original_dof
Definition Node.h:52
vec incre_nonviscous_force
Definition Node.h:65
vec incre_velocity
Definition Node.h:68
vec coordinate
Definition Node.h:50
vec incre_damping_force
Definition Node.h:64
uvec reordered_dof
Definition Node.h:53
vec current_nonviscous_force
Definition Node.h:57
vec incre_acceleration
Definition Node.h:69
vec trial_resistance
Definition Node.h:71