suanPan
🧮 An Open Source, Parallel and Heterogeneous Finite Element Analysis Framework
Loading...
Searching...
No Matches
Domain.h
Go to the documentation of this file.
1/*******************************************************************************
2 * Copyright (C) 2017-2026 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 ******************************************************************************/
28#ifndef DOMAIN_H
29#define DOMAIN_H
30
31#include <Domain/DomainBase.h>
32#include <Domain/Storage.hpp>
33#include <array>
34
35using ExternalModuleQueue = std::vector<shared_ptr<ExternalModule>>;
36using ThreadQueue = std::vector<std::future<void>>;
37
38class Domain final : public DomainBase, public std::enable_shared_from_this<Domain> {
39 std::atomic_bool updated = false;
40 ColorMethod color_model = ColorMethod::MIS;
41
42 unsigned current_step_tag = 0;
43 std::pair<unsigned, unsigned> current_converger_tag{0, 0}; // current converger tag, current step tag
44 std::pair<unsigned, unsigned> current_integrator_tag{0, 0}; // current integrator tag, current step tag
45 std::pair<unsigned, unsigned> current_solver_tag{0, 0}; // current solver tag, current step tag
46
47 ThreadQueue thread_pond;
48
49 // dynamic libraries should be destroyed after all dependent objects are destroyed
50 ExternalModuleQueue external_module_pond;
51
52 shared_ptr<LongFactory> factory;
54 StepQueue step_pond;
55
56 AmplitudeStorage amplitude_pond;
57 ExpressionStorage expression_pond;
58 ConstraintStorage constraint_pond;
59 ConvergerStorage converger_pond;
60 CriterionStorage criterion_pond;
61 DatabaseStorage database_pond;
62 ElementStorage element_pond;
63 GroupStorage group_pond;
64 IntegratorStorage integrator_pond;
65 InteractionStorage interaction_pond;
66 LoadStorage load_pond;
67 MaterialStorage material_pond;
68 ModifierStorage modifier_pond;
69 NodeStorage node_pond;
70 OrientationStorage orientation_pond;
71 RecorderStorage recorder_pond;
72 SectionStorage section_pond;
73 SolverStorage solver_pond;
74
76 suanpan::unordered_set<uword> constrained_dofs;
78 std::vector<std::vector<unsigned>> color_map;
79
80 std::vector<bool> attribute;
81
82 mutable std::array<double, 5> statistics{};
83
84 TagMap compact_node; // existing tag -> compact tag
85 TagMapCollection compact_node_per_material; // material tag -> (existing tag -> compact tag)
86 TagMapCollection compact_node_per_section; // section tag -> (existing tag -> compact tag)
87
88public:
89 explicit Domain(unsigned = 0);
90 Domain(const Domain&) = delete; // copy forbidden
91 Domain(Domain&&) = delete; // move forbidden
92 Domain& operator=(const Domain&) = delete; // assign forbidden
93 Domain& operator=(Domain&&) = delete; // assign forbidden
94 ~Domain() override;
95
96 void set_factory(const shared_ptr<LongFactory>&) override;
97 const shared_ptr<LongFactory>& get_factory() const override;
98
99 bool insert(std::future<void>&&) override;
100
101 void wait() override;
102
103 bool insert(const shared_ptr<ExternalModule>&) override;
104 const ExternalModuleQueue& get_external_module_pool() const override;
105
106 bool insert(const shared_ptr<Amplitude>&) override;
107 bool insert(const shared_ptr<Expression>&) override;
108 bool insert(const shared_ptr<Constraint>&) override;
109 bool insert(const shared_ptr<Converger>&) override;
110 bool insert(const shared_ptr<Criterion>&) override;
111 bool insert(const shared_ptr<Database>&) override;
112 bool insert(const shared_ptr<Element>&) override;
113 bool insert(const shared_ptr<Group>&) override;
114 bool insert(const shared_ptr<Integrator>&) override;
115 bool insert(const shared_ptr<Interaction>&) override;
116 bool insert(const shared_ptr<Load>&) override;
117 bool insert(const shared_ptr<Material>&) override;
118 bool insert(const shared_ptr<Modifier>&) override;
119 bool insert(const shared_ptr<Node>&) override;
120 bool insert(const shared_ptr<Orientation>&) override;
121 bool insert(const shared_ptr<Recorder>&) override;
122 bool insert(const shared_ptr<Section>&) override;
123 bool insert(const shared_ptr<Solver>&) override;
124 bool insert(const shared_ptr<Step>&) override;
125
126 bool erase_amplitude(unsigned) override;
127 bool erase_expression(unsigned) override;
128 bool erase_constraint(unsigned) override;
129 bool erase_converger(unsigned) override;
130 bool erase_criterion(unsigned) override;
131 bool erase_database(unsigned) override;
132 bool erase_element(unsigned) override;
133 bool erase_group(unsigned) override;
134 bool erase_integrator(unsigned) override;
135 bool erase_interaction(unsigned) override;
136 bool erase_load(unsigned) override;
137 bool erase_material(unsigned) override;
138 bool erase_modifier(unsigned) override;
139 bool erase_node(unsigned) override;
140 bool erase_orientation(unsigned) override;
141 bool erase_recorder(unsigned) override;
142 bool erase_section(unsigned) override;
143 bool erase_solver(unsigned) override;
144 bool erase_step(unsigned) override;
145
146 void disable_amplitude(unsigned) override;
147 void disable_expression(unsigned) override;
148 void disable_constraint(unsigned) override;
149 void disable_converger(unsigned) override;
150 void disable_criterion(unsigned) override;
151 void disable_database(unsigned) override;
152 void disable_element(unsigned) override;
153 void disable_group(unsigned) override;
154 void disable_integrator(unsigned) override;
155 void disable_interaction(unsigned) override;
156 void disable_load(unsigned) override;
157 void disable_material(unsigned) override;
158 void disable_modifier(unsigned) override;
159 void disable_node(unsigned) override;
160 void disable_orientation(unsigned) override;
161 void disable_recorder(unsigned) override;
162 void disable_section(unsigned) override;
163 void disable_solver(unsigned) override;
164 void disable_step(unsigned) override;
165
166 void enable_amplitude(unsigned) override;
167 void enable_expression(unsigned) override;
168 void enable_constraint(unsigned) override;
169 void enable_converger(unsigned) override;
170 void enable_criterion(unsigned) override;
171 void enable_database(unsigned) override;
172 void enable_element(unsigned) override;
173 void enable_group(unsigned) override;
174 void enable_integrator(unsigned) override;
175 void enable_interaction(unsigned) override;
176 void enable_load(unsigned) override;
177 void enable_material(unsigned) override;
178 void enable_modifier(unsigned) override;
179 void enable_node(unsigned) override;
180 void enable_orientation(unsigned) override;
181 void enable_recorder(unsigned) override;
182 void enable_section(unsigned) override;
183 void enable_solver(unsigned) override;
184 void enable_step(unsigned) override;
185
186 const shared_ptr<Amplitude>& get_amplitude(unsigned) const override;
187 const shared_ptr<Expression>& get_expression(unsigned) const override;
188 const shared_ptr<Constraint>& get_constraint(unsigned) const override;
189 const shared_ptr<Converger>& get_converger(unsigned) const override;
190 const shared_ptr<Criterion>& get_criterion(unsigned) const override;
191 const shared_ptr<Database>& get_database(unsigned) const override;
192 const shared_ptr<Element>& get_element(unsigned) const override;
193 const shared_ptr<Group>& get_group(unsigned) const override;
194 const shared_ptr<Integrator>& get_integrator(unsigned) const override;
195 const shared_ptr<Interaction>& get_interaction(unsigned) const override;
196 const shared_ptr<Load>& get_load(unsigned) const override;
197 const shared_ptr<Material>& get_material(unsigned) const override;
198 const shared_ptr<Modifier>& get_modifier(unsigned) const override;
199 const shared_ptr<Node>& get_node(unsigned) const override;
200 const shared_ptr<Orientation>& get_orientation(unsigned) const override;
201 const shared_ptr<Recorder>& get_recorder(unsigned) const override;
202 const shared_ptr<Section>& get_section(unsigned) const override;
203 const shared_ptr<Solver>& get_solver(unsigned) const override;
204 const shared_ptr<Step>& get_step(unsigned) const override;
205
206 const AmplitudeQueue& get_amplitude_pool() const override;
207 const ExpressionQueue& get_expression_pool() const override;
208 const ConstraintQueue& get_constraint_pool() const override;
209 const ConvergerQueue& get_converger_pool() const override;
210 const CriterionQueue& get_criterion_pool() const override;
211 const DatabaseQueue& get_database_pool() const override;
212 const ElementQueue& get_element_pool() const override;
213 const GroupQueue& get_group_pool() const override;
214 const IntegratorQueue& get_integrator_pool() const override;
215 const InteractionQueue& get_interaction_pool() const override;
216 const LoadQueue& get_load_pool() const override;
217 const MaterialQueue& get_material_pool() const override;
218 const ModifierQueue& get_modifier_pool() const override;
219 const NodeQueue& get_node_pool() const override;
220 const OrientationQueue& get_orientation_pool() const override;
221 const RecorderQueue& get_recorder_pool() const override;
222 const SectionQueue& get_section_pool() const override;
223 const SolverQueue& get_solver_pool() const override;
224 const StepQueue& get_step_pool() const override;
225
226 friend shared_ptr<Amplitude>& get_amplitude(const shared_ptr<Domain>&, unsigned);
227 friend shared_ptr<Expression>& get_expression(const shared_ptr<Domain>&, unsigned);
228 friend shared_ptr<Constraint>& get_constraint(const shared_ptr<Domain>&, unsigned);
229 friend shared_ptr<Converger>& get_converger(const shared_ptr<Domain>&, unsigned);
230 friend shared_ptr<Criterion>& get_criterion(const shared_ptr<Domain>&, unsigned);
231 friend shared_ptr<Database>& get_database(const shared_ptr<Domain>&, unsigned);
232 friend shared_ptr<Element>& get_element(const shared_ptr<Domain>&, unsigned);
233 friend shared_ptr<Group>& get_group(const shared_ptr<Domain>&, unsigned);
234 friend shared_ptr<Integrator>& get_integrator(const shared_ptr<Domain>&, unsigned);
235 friend shared_ptr<Interaction>& get_interaction(const shared_ptr<Domain>&, unsigned);
236 friend shared_ptr<Load>& get_load(const shared_ptr<Domain>&, unsigned);
237 friend shared_ptr<Material>& get_material(const shared_ptr<Domain>&, unsigned);
238 friend shared_ptr<Modifier>& get_modifier(const shared_ptr<Domain>&, unsigned);
239 friend shared_ptr<Node>& get_node(const shared_ptr<Domain>&, unsigned);
240 friend shared_ptr<Orientation>& get_orientation(const shared_ptr<Domain>&, unsigned);
241 friend shared_ptr<Recorder>& get_recorder(const shared_ptr<Domain>&, unsigned);
242 friend shared_ptr<Section>& get_section(const shared_ptr<Domain>&, unsigned);
243 friend shared_ptr<Solver>& get_solver(const shared_ptr<Domain>&, unsigned);
244 friend shared_ptr<Step>& get_step(const shared_ptr<Domain>&, unsigned);
245
246 friend shared_ptr<Amplitude>& get_amplitude(const shared_ptr<DomainBase>&, unsigned);
247 friend shared_ptr<Expression>& get_expression(const shared_ptr<DomainBase>&, unsigned);
248 friend shared_ptr<Constraint>& get_constraint(const shared_ptr<DomainBase>&, unsigned);
249 friend shared_ptr<Converger>& get_converger(const shared_ptr<DomainBase>&, unsigned);
250 friend shared_ptr<Criterion>& get_criterion(const shared_ptr<DomainBase>&, unsigned);
251 friend shared_ptr<Database>& get_database(const shared_ptr<DomainBase>&, unsigned);
252 friend shared_ptr<Element>& get_element(const shared_ptr<DomainBase>&, unsigned);
253 friend shared_ptr<Group>& get_group(const shared_ptr<DomainBase>&, unsigned);
254 friend shared_ptr<Integrator>& get_integrator(const shared_ptr<DomainBase>&, unsigned);
255 friend shared_ptr<Interaction>& get_interaction(const shared_ptr<DomainBase>&, unsigned);
256 friend shared_ptr<Load>& get_load(const shared_ptr<DomainBase>&, unsigned);
257 friend shared_ptr<Material>& get_material(const shared_ptr<DomainBase>&, unsigned);
258 friend shared_ptr<Modifier>& get_modifier(const shared_ptr<DomainBase>&, unsigned);
259 friend shared_ptr<Node>& get_node(const shared_ptr<DomainBase>&, unsigned);
260 friend shared_ptr<Orientation>& get_orientation(const shared_ptr<DomainBase>&, unsigned);
261 friend shared_ptr<Recorder>& get_recorder(const shared_ptr<DomainBase>&, unsigned);
262 friend shared_ptr<Section>& get_section(const shared_ptr<DomainBase>&, unsigned);
263 friend shared_ptr<Solver>& get_solver(const shared_ptr<DomainBase>&, unsigned);
264 friend shared_ptr<Step>& get_step(const shared_ptr<DomainBase>&, unsigned);
265
266 size_t get_amplitude() const override;
267 size_t get_expression() const override;
268 size_t get_constraint() const override;
269 size_t get_converger() const override;
270 size_t get_criterion() const override;
271 size_t get_database() const override;
272 size_t get_element() const override;
273 size_t get_group() const override;
274 size_t get_integrator() const override;
275 size_t get_interaction() const override;
276 size_t get_load() const override;
277 size_t get_material() const override;
278 size_t get_modifier() const override;
279 size_t get_node() const override;
280 size_t get_orientation() const override;
281 size_t get_recorder() const override;
282 size_t get_section() const override;
283 size_t get_solver() const override;
284 size_t get_step() const override;
285
286 bool find_amplitude(unsigned) const override;
287 bool find_expression(unsigned) const override;
288 bool find_constraint(unsigned) const override;
289 bool find_converger(unsigned) const override;
290 bool find_criterion(unsigned) const override;
291 bool find_database(unsigned) const override;
292 bool find_element(unsigned) const override;
293 bool find_group(unsigned) const override;
294 bool find_integrator(unsigned) const override;
295 bool find_interaction(unsigned) const override;
296 bool find_load(unsigned) const override;
297 bool find_material(unsigned) const override;
298 bool find_modifier(unsigned) const override;
299 bool find_node(unsigned) const override;
300 bool find_orientation(unsigned) const override;
301 bool find_recorder(unsigned) const override;
302 bool find_section(unsigned) const override;
303 bool find_solver(unsigned) const override;
304 bool find_step(unsigned) const override;
305
306 void set_current_step_tag(unsigned) override;
307 void set_current_converger_tag(unsigned) override;
308 void set_current_integrator_tag(unsigned) override;
309 void set_current_solver_tag(unsigned) override;
310
311 unsigned get_current_step_tag() override;
312 std::pair<unsigned, unsigned> get_current_converger_tag() override;
313 std::pair<unsigned, unsigned> get_current_integrator_tag() override;
314 std::pair<unsigned, unsigned> get_current_solver_tag() override;
315
316 const shared_ptr<Step>& get_current_step() const override;
317 const shared_ptr<Converger>& get_current_converger() const override;
318 const shared_ptr<Integrator>& get_current_integrator() const override;
319 const shared_ptr<Solver>& get_current_solver() const override;
320
321 unique_ptr<Amplitude> initialized_amplitude_copy(uword) override;
322 unique_ptr<Material> initialized_material_copy(uword) override;
323 unique_ptr<Section> initialized_section_copy(uword) override;
324
325 void insert_loaded_dof(const uvec&) override;
326 void insert_constrained_dof(const uvec&) override;
327
328 const suanpan::unordered_set<uword>& get_loaded_dof() const override;
330
331 bool is_updated() const override;
332 bool is_sparse() const override;
333
334 void set_attribute(ModalAttribute) override;
335 bool get_attribute(ModalAttribute) override;
336
337 void set_color_model(ColorMethod) override;
338 const std::vector<std::vector<unsigned>>& get_color_map() const override;
339 std::pair<std::vector<unsigned>, suanpan::graph<unsigned>> get_element_connectivity(bool) override;
340
341 const TagMap& get_compact_node_map() const override;
344
345 uvec flatten_group(const uvec&) override;
346
347 int reorder_dof() override;
348 int assign_color() override;
349
350 // restart domain from the previous step
351 int restart() override;
352 // initialize domain from the previous step
353 int soft_restart() override;
354 // initialize the domain
355 int initialize() override;
356 // initialize loads for each step
357 int initialize_load() override;
358 // initialize constraints for each step
359 int initialize_constraint() override;
360 // initialize constraints for each step
361 int initialize_reference() override;
362 // initialize materials for each step
363 int initialize_material() override;
364 // initialize sections for each step
365 int initialize_section() override;
366 // process loads and constraints
367 [[nodiscard]] int process_load(bool) override;
368 [[nodiscard]] int process_constraint(bool) override;
369 [[nodiscard]] int process_criterion() override;
370 [[nodiscard]] int process_modifier() override;
371 // record response
372 void record() override;
373 // enable all objects
374 void enable_all() override;
375 // print out domain summary
376 void summary() const override;
377
378 void update_current_resistance() const override;
379 void update_current_damping_force() const override;
380 void update_current_nonviscous_force() const override;
381 void update_current_inertial_force() const override;
382
383 void assemble_resistance() const override;
384 void assemble_damping_force() const override;
385 void assemble_nonviscous_force() const override;
386 void assemble_inertial_force() const override;
387
388 void assemble_initial_mass() const override;
389 void assemble_current_mass() const override;
390 void assemble_trial_mass() const override;
391 void assemble_initial_damping() const override;
392 void assemble_current_damping() const override;
393 void assemble_trial_damping() const override;
394 void assemble_initial_nonviscous() const override;
395 void assemble_current_nonviscous() const override;
396 void assemble_trial_nonviscous() const override;
397 void assemble_initial_stiffness() const override;
398 void assemble_current_stiffness() const override;
399 void assemble_trial_stiffness() const override;
400 void assemble_initial_geometry() const override;
401 void assemble_current_geometry() const override;
402 void assemble_trial_geometry() const override;
403
404 void assemble_mass_container() const override;
405 void assemble_stiffness_container() const override;
406
407 void erase_machine_error(vec&) const override;
408
409 void update_load() override;
410 void update_constraint() override;
411
412 void assemble_load_stiffness() override;
413 void assemble_constraint_stiffness() override;
414
415 int update_current_status() const override;
416 int update_incre_status() const override;
417 int update_trial_status() const override;
418
419 void stage_status() override;
420 void commit_status() const override;
421 void clear_status() override;
422 void reset_status() const override;
423
424 void update(const Statistics T, const double value) const override { statistics[static_cast<size_t>(T)] += value; }
425
426 double stats(const Statistics T) const override { return statistics[static_cast<size_t>(T)]; }
427
428 void save(std::string) override;
429};
430
431#endif
432
The DomainBase class is a template.
Definition DomainBase.h:94
std::unordered_map< uword, TagMap > TagMapCollection
Definition DomainBase.h:350
ModalAttribute
Definition DomainBase.h:102
std::unordered_map< uword, uword > TagMap
Definition DomainBase.h:349
ColorMethod
Definition DomainBase.h:96
A Domain class holds all FE model components.
Definition Domain.h:38
bool find_element(unsigned) const override
Definition Domain.cpp:701
bool find_node(unsigned) const override
Definition Domain.cpp:715
void assemble_damping_force() const override
Definition DomainState.cpp:125
std::pair< unsigned, unsigned > get_current_solver_tag() override
Definition Domain.cpp:741
void disable_amplitude(unsigned) override
Definition Domain.cpp:307
void enable_constraint(unsigned) override
Definition Domain.cpp:455
const ConvergerQueue & get_converger_pool() const override
Definition Domain.cpp:619
bool erase_modifier(unsigned) override
Definition Domain.cpp:258
int update_trial_status() const override
Definition DomainState.cpp:472
void assemble_current_nonviscous() const override
Definition DomainState.cpp:304
bool erase_node(unsigned) override
Definition Domain.cpp:265
bool erase_expression(unsigned) override
Definition Domain.cpp:181
bool find_material(unsigned) const override
Definition Domain.cpp:711
void assemble_nonviscous_force() const override
Definition DomainState.cpp:147
bool erase_load(unsigned) override
Definition Domain.cpp:244
const shared_ptr< Step > & get_current_step() const override
Definition Domain.cpp:743
void enable_step(unsigned) override
Definition Domain.cpp:567
void update_load() override
Definition Domain.cpp:1362
friend shared_ptr< Constraint > & get_constraint(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:24
bool erase_converger(unsigned) override
Definition Domain.cpp:195
void enable_solver(unsigned) override
Definition Domain.cpp:560
bool erase_constraint(unsigned) override
Definition Domain.cpp:188
friend shared_ptr< Interaction > & get_interaction(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:38
const AmplitudeQueue & get_amplitude_pool() const override
Definition Domain.cpp:613
friend shared_ptr< Section > & get_section(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:52
void enable_modifier(unsigned) override
Definition Domain.cpp:525
bool is_sparse() const override
Definition Domain.cpp:808
void enable_section(unsigned) override
Definition Domain.cpp:553
bool erase_integrator(unsigned) override
Definition Domain.cpp:230
int initialize_section() override
Definition Domain.cpp:1179
void assemble_initial_mass() const override
Definition DomainState.cpp:191
Domain(Domain &&)=delete
std::pair< unsigned, unsigned > get_current_converger_tag() override
Definition Domain.cpp:737
void assemble_trial_geometry() const override
Definition DomainState.cpp:422
void assemble_current_mass() const override
Definition DomainState.cpp:207
uvec flatten_group(const uvec &) override
Definition Domain.cpp:856
const ExternalModuleQueue & get_external_module_pool() const override
Definition Domain.cpp:77
bool erase_section(unsigned) override
Definition Domain.cpp:286
friend shared_ptr< Amplitude > & get_amplitude(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:20
const ModifierQueue & get_modifier_pool() const override
Definition Domain.cpp:637
const StepQueue & get_step_pool() const override
Definition Domain.cpp:649
const TagMapCollection & get_compact_node_map_per_section() const override
Definition Domain.cpp:854
bool find_modifier(unsigned) const override
Definition Domain.cpp:713
void enable_interaction(unsigned) override
Definition Domain.cpp:504
bool erase_element(unsigned) override
Definition Domain.cpp:216
void enable_element(unsigned) override
Definition Domain.cpp:483
void disable_converger(unsigned) override
Definition Domain.cpp:328
const TagMapCollection & get_compact_node_map_per_material() const override
Definition Domain.cpp:852
const shared_ptr< Solver > & get_current_solver() const override
Definition Domain.cpp:749
const RecorderQueue & get_recorder_pool() const override
Definition Domain.cpp:643
const MaterialQueue & get_material_pool() const override
Definition Domain.cpp:635
friend shared_ptr< Material > & get_material(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:42
void assemble_current_geometry() const override
Definition DomainState.cpp:404
void assemble_constraint_stiffness() override
Definition Domain.cpp:1378
const shared_ptr< LongFactory > & get_factory() const override
Definition Domain.cpp:60
void update_current_resistance() const override
Definition DomainState.cpp:27
const shared_ptr< Integrator > & get_current_integrator() const override
Definition Domain.cpp:747
bool insert(std::future< void > &&) override
Definition Domain.cpp:62
void disable_orientation(unsigned) override
Definition Domain.cpp:405
const DatabaseQueue & get_database_pool() const override
Definition Domain.cpp:623
int initialize_constraint() override
Definition Domain.cpp:1125
const ElementQueue & get_element_pool() const override
Definition Domain.cpp:625
int process_constraint(bool) override
Definition Domain.cpp:1248
const suanpan::unordered_set< uword > & get_constrained_dof() const override
Definition Domain.cpp:804
bool find_recorder(unsigned) const override
Definition Domain.cpp:719
Domain(const Domain &)=delete
~Domain() override
Definition Domain.cpp:49
const SolverQueue & get_solver_pool() const override
Definition Domain.cpp:647
void reset_status() const override
Definition DomainState.cpp:606
void enable_load(unsigned) override
Definition Domain.cpp:511
void enable_converger(unsigned) override
Definition Domain.cpp:462
int process_modifier() override
Definition Domain.cpp:1327
void clear_status() override
Definition DomainState.cpp:581
void enable_expression(unsigned) override
Definition Domain.cpp:448
void set_current_solver_tag(unsigned) override
Definition Domain.cpp:733
void summary() const override
Definition Domain.cpp:1356
void enable_group(unsigned) override
Definition Domain.cpp:490
bool erase_material(unsigned) override
Definition Domain.cpp:251
void update(const Statistics T, const double value) const override
Definition Domain.h:424
bool find_integrator(unsigned) const override
Definition Domain.cpp:705
const TagMap & get_compact_node_map() const override
Definition Domain.cpp:850
int initialize() override
Definition Domain.cpp:996
friend shared_ptr< Orientation > & get_orientation(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:48
void insert_constrained_dof(const uvec &) override
concurrently safe insertion method
Definition Domain.cpp:800
bool find_section(unsigned) const override
Definition Domain.cpp:721
int update_incre_status() const override
Definition DomainState.cpp:488
bool find_amplitude(unsigned) const override
Definition Domain.cpp:689
const OrientationQueue & get_orientation_pool() const override
Definition Domain.cpp:641
friend shared_ptr< Converger > & get_converger(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:26
void enable_orientation(unsigned) override
Definition Domain.cpp:539
bool erase_recorder(unsigned) override
Definition Domain.cpp:279
void disable_criterion(unsigned) override
Definition Domain.cpp:335
bool find_converger(unsigned) const override
Definition Domain.cpp:695
void disable_node(unsigned) override
Definition Domain.cpp:398
void assemble_trial_stiffness() const override
Definition DomainState.cpp:370
void enable_database(unsigned) override
Definition Domain.cpp:476
void set_factory(const shared_ptr< LongFactory > &) override
Definition Domain.cpp:53
Domain & operator=(Domain &&)=delete
void disable_solver(unsigned) override
Definition Domain.cpp:426
bool erase_step(unsigned) override
Definition Domain.cpp:300
unsigned get_current_step_tag() override
Definition Domain.cpp:735
friend shared_ptr< Group > & get_group(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:34
void assemble_trial_nonviscous() const override
Definition DomainState.cpp:321
void enable_all() override
Definition Domain.cpp:1339
unique_ptr< Amplitude > initialized_amplitude_copy(uword) override
Definition Domain.cpp:751
bool find_criterion(unsigned) const override
Definition Domain.cpp:697
friend shared_ptr< Element > & get_element(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:32
const IntegratorQueue & get_integrator_pool() const override
Definition Domain.cpp:629
int restart() override
Definition Domain.cpp:947
const CriterionQueue & get_criterion_pool() const override
Definition Domain.cpp:621
bool find_group(unsigned) const override
Definition Domain.cpp:703
void disable_element(unsigned) override
Definition Domain.cpp:349
const ConstraintQueue & get_constraint_pool() const override
Definition Domain.cpp:617
friend shared_ptr< Database > & get_database(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:30
const ExpressionQueue & get_expression_pool() const override
Definition Domain.cpp:615
bool find_expression(unsigned) const override
Definition Domain.cpp:691
void set_current_integrator_tag(unsigned) override
Definition Domain.cpp:731
void assemble_initial_nonviscous() const override
Definition DomainState.cpp:287
int process_criterion() override
Definition Domain.cpp:1321
const InteractionQueue & get_interaction_pool() const override
Definition Domain.cpp:631
bool erase_amplitude(unsigned) override
Definition Domain.cpp:174
void assemble_initial_geometry() const override
Definition DomainState.cpp:386
void disable_interaction(unsigned) override
Definition Domain.cpp:370
friend shared_ptr< Solver > & get_solver(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:54
bool find_constraint(unsigned) const override
Definition Domain.cpp:693
void enable_node(unsigned) override
Definition Domain.cpp:532
void disable_recorder(unsigned) override
Definition Domain.cpp:412
friend shared_ptr< Expression > & get_expression(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:22
bool get_attribute(ModalAttribute) override
Definition Domain.cpp:812
const std::vector< std::vector< unsigned > > & get_color_map() const override
Definition Domain.cpp:819
unique_ptr< Material > initialized_material_copy(uword) override
Definition Domain.cpp:764
void assemble_initial_damping() const override
Definition DomainState.cpp:239
const suanpan::unordered_set< uword > & get_loaded_dof() const override
Definition Domain.cpp:802
void assemble_load_stiffness() override
Definition Domain.cpp:1376
bool is_updated() const override
Definition Domain.cpp:806
void disable_expression(unsigned) override
Definition Domain.cpp:314
void assemble_mass_container() const override
Definition DomainState.cpp:440
void set_color_model(ColorMethod) override
Definition Domain.cpp:814
const SectionQueue & get_section_pool() const override
Definition Domain.cpp:645
std::pair< std::vector< unsigned >, suanpan::graph< unsigned > > get_element_connectivity(bool) override
Definition Domain.cpp:821
int assign_color() override
Definition Domain.cpp:919
void enable_recorder(unsigned) override
Definition Domain.cpp:546
bool find_load(unsigned) const override
Definition Domain.cpp:709
bool find_interaction(unsigned) const override
Definition Domain.cpp:707
bool erase_interaction(unsigned) override
Definition Domain.cpp:237
int initialize_load() override
Definition Domain.cpp:1112
bool erase_group(unsigned) override
Definition Domain.cpp:223
void commit_status() const override
Definition DomainState.cpp:568
int initialize_material() override
Definition Domain.cpp:1157
void assemble_stiffness_container() const override
Definition DomainState.cpp:456
void disable_database(unsigned) override
Definition Domain.cpp:342
void enable_criterion(unsigned) override
Definition Domain.cpp:469
void update_current_damping_force() const override
Definition DomainState.cpp:46
void enable_amplitude(unsigned) override
Definition Domain.cpp:441
friend shared_ptr< Modifier > & get_modifier(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:44
void stage_status() override
Definition DomainState.cpp:564
friend shared_ptr< Load > & get_load(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:40
bool find_step(unsigned) const override
Definition Domain.cpp:725
const shared_ptr< Converger > & get_current_converger() const override
Definition Domain.cpp:745
void set_current_converger_tag(unsigned) override
Definition Domain.cpp:729
double stats(const Statistics T) const override
Definition Domain.h:426
friend shared_ptr< Criterion > & get_criterion(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:28
int reorder_dof() override
Definition Domain.cpp:869
const LoadQueue & get_load_pool() const override
Definition Domain.cpp:633
friend shared_ptr< Node > & get_node(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:46
Domain & operator=(const Domain &)=delete
void assemble_current_stiffness() const override
Definition DomainState.cpp:354
void assemble_current_damping() const override
Definition DomainState.cpp:255
friend shared_ptr< Recorder > & get_recorder(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:50
int initialize_reference() override
Definition Domain.cpp:1136
bool find_database(unsigned) const override
Definition Domain.cpp:699
void disable_section(unsigned) override
Definition Domain.cpp:419
void set_current_step_tag(unsigned) override
Definition Domain.cpp:727
bool find_orientation(unsigned) const override
Definition Domain.cpp:717
const NodeQueue & get_node_pool() const override
Definition Domain.cpp:639
void wait() override
Definition Domain.cpp:68
bool erase_database(unsigned) override
Definition Domain.cpp:209
void disable_material(unsigned) override
Definition Domain.cpp:384
std::pair< unsigned, unsigned > get_current_integrator_tag() override
Definition Domain.cpp:739
bool erase_solver(unsigned) override
Definition Domain.cpp:293
int soft_restart() override
Definition Domain.cpp:994
bool erase_criterion(unsigned) override
Definition Domain.cpp:202
void assemble_trial_damping() const override
Definition DomainState.cpp:271
void enable_integrator(unsigned) override
Definition Domain.cpp:497
void disable_modifier(unsigned) override
Definition Domain.cpp:391
void disable_load(unsigned) override
Definition Domain.cpp:377
bool find_solver(unsigned) const override
Definition Domain.cpp:723
void record() override
Definition Domain.cpp:1335
unique_ptr< Section > initialized_section_copy(uword) override
Definition Domain.cpp:778
void erase_machine_error(vec &) const override
Definition Domain.cpp:1358
int update_current_status() const override
Definition DomainState.cpp:504
friend shared_ptr< Integrator > & get_integrator(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:36
const GroupQueue & get_group_pool() const override
Definition Domain.cpp:627
void update_constraint() override
Definition Domain.cpp:1364
void assemble_trial_mass() const override
Definition DomainState.cpp:223
void assemble_inertial_force() const override
Definition DomainState.cpp:169
void update_current_nonviscous_force() const override
Definition DomainState.cpp:65
void assemble_resistance() const override
Definition DomainState.cpp:103
void enable_material(unsigned) override
Definition Domain.cpp:518
void assemble_initial_stiffness() const override
Definition DomainState.cpp:338
void disable_constraint(unsigned) override
Definition Domain.cpp:321
void update_current_inertial_force() const override
Definition DomainState.cpp:84
void disable_integrator(unsigned) override
Definition Domain.cpp:363
void set_attribute(ModalAttribute) override
Definition Domain.cpp:810
void disable_group(unsigned) override
Definition Domain.cpp:356
bool erase_orientation(unsigned) override
Definition Domain.cpp:272
int process_load(bool) override
Definition Domain.cpp:1201
friend shared_ptr< Step > & get_step(const shared_ptr< Domain > &, unsigned)
Definition DomainHelper.cpp:56
void save(std::string) override
Definition Domain.cpp:1383
void insert_loaded_dof(const uvec &) override
concurrently safe insertion method
Definition Domain.cpp:795
void disable_step(unsigned) override
Definition Domain.cpp:433
std::vector< shared_ptr< ExternalModule > > ExternalModuleQueue
Definition Domain.h:35
std::vector< shared_ptr< Orientation > > OrientationQueue
Definition DomainBase.h:78
std::vector< shared_ptr< Node > > NodeQueue
Definition DomainBase.h:77
std::vector< shared_ptr< Database > > DatabaseQueue
Definition DomainBase.h:69
std::vector< shared_ptr< Group > > GroupQueue
Definition DomainBase.h:71
std::vector< shared_ptr< Material > > MaterialQueue
Definition DomainBase.h:75
std::vector< shared_ptr< Interaction > > InteractionQueue
Definition DomainBase.h:73
std::vector< shared_ptr< Modifier > > ModifierQueue
Definition DomainBase.h:76
std::vector< shared_ptr< Integrator > > IntegratorQueue
Definition DomainBase.h:72
std::vector< shared_ptr< Recorder > > RecorderQueue
Definition DomainBase.h:79
std::vector< shared_ptr< Constraint > > ConstraintQueue
Definition DomainBase.h:66
std::map< unsigned, shared_ptr< Step > > StepQueue
Definition DomainBase.h:82
std::vector< shared_ptr< Element > > ElementQueue
Definition DomainBase.h:70
std::vector< shared_ptr< Converger > > ConvergerQueue
Definition DomainBase.h:67
std::vector< shared_ptr< Solver > > SolverQueue
Definition DomainBase.h:81
std::vector< std::future< void > > ThreadQueue
Definition Domain.h:36
std::vector< shared_ptr< Load > > LoadQueue
Definition DomainBase.h:74
std::vector< shared_ptr< Section > > SectionQueue
Definition DomainBase.h:80
Statistics
Definition DomainBase.h:86
std::vector< shared_ptr< Criterion > > CriterionQueue
Definition DomainBase.h:68
std::vector< shared_ptr< Expression > > ExpressionQueue
Definition DomainBase.h:65
std::vector< shared_ptr< Amplitude > > AmplitudeQueue
Definition DomainBase.h:64
std::unordered_set< T > unordered_set
Definition container.h:55
vector< set< T > > graph
Definition container.h:59