80 using StepQueue = std::map<unsigned, shared_ptr<Step>>;
99 virtual void set_factory(
const shared_ptr<LongFactory>&) = 0;
100 [[nodiscard]]
virtual const shared_ptr<LongFactory>& get_factory()
const = 0;
102 virtual bool insert(
const shared_ptr<future<void>>&) = 0;
104 virtual void wait() = 0;
106 virtual bool insert(
const shared_ptr<ExternalModule>&) = 0;
107 [[nodiscard]]
virtual const std::vector<shared_ptr<ExternalModule>>& get_external_module_pool()
const = 0;
109 virtual bool insert(
const shared_ptr<Amplitude>&) = 0;
110 virtual bool insert(
const shared_ptr<Constraint>&) = 0;
111 virtual bool insert(
const shared_ptr<Converger>&) = 0;
112 virtual bool insert(
const shared_ptr<Criterion>&) = 0;
113 virtual bool insert(
const shared_ptr<Database>&) = 0;
114 virtual bool insert(
const shared_ptr<Element>&) = 0;
115 virtual bool insert(
const shared_ptr<Group>&) = 0;
116 virtual bool insert(
const shared_ptr<Integrator>&) = 0;
117 virtual bool insert(
const shared_ptr<Load>&) = 0;
118 virtual bool insert(
const shared_ptr<Material>&) = 0;
119 virtual bool insert(
const shared_ptr<Modifier>&) = 0;
120 virtual bool insert(
const shared_ptr<Node>&) = 0;
121 virtual bool insert(
const shared_ptr<Orientation>&) = 0;
122 virtual bool insert(
const shared_ptr<Recorder>&) = 0;
123 virtual bool insert(
const shared_ptr<Section>&) = 0;
124 virtual bool insert(
const shared_ptr<Solver>&) = 0;
125 virtual bool insert(
const shared_ptr<Step>&) = 0;
127 template<
typename T>
bool erase(
unsigned);
128 virtual bool erase_amplitude(
unsigned) = 0;
129 virtual bool erase_constraint(
unsigned) = 0;
130 virtual bool erase_converger(
unsigned) = 0;
131 virtual bool erase_criterion(
unsigned) = 0;
132 virtual bool erase_database(
unsigned) = 0;
133 virtual bool erase_element(
unsigned) = 0;
134 virtual bool erase_group(
unsigned) = 0;
135 virtual bool erase_integrator(
unsigned) = 0;
136 virtual bool erase_load(
unsigned) = 0;
137 virtual bool erase_material(
unsigned) = 0;
138 virtual bool erase_modifier(
unsigned) = 0;
139 virtual bool erase_node(
unsigned) = 0;
140 virtual bool erase_orientation(
unsigned) = 0;
141 virtual bool erase_recorder(
unsigned) = 0;
142 virtual bool erase_section(
unsigned) = 0;
143 virtual bool erase_solver(
unsigned) = 0;
144 virtual bool erase_step(
unsigned) = 0;
146 virtual void disable_amplitude(
unsigned) = 0;
147 virtual void disable_constraint(
unsigned) = 0;
148 virtual void disable_converger(
unsigned) = 0;
149 virtual void disable_criterion(
unsigned) = 0;
150 virtual void disable_database(
unsigned) = 0;
151 virtual void disable_element(
unsigned) = 0;
152 virtual void disable_group(
unsigned) = 0;
153 virtual void disable_integrator(
unsigned) = 0;
154 virtual void disable_load(
unsigned) = 0;
155 virtual void disable_material(
unsigned) = 0;
156 virtual void disable_modifier(
unsigned) = 0;
157 virtual void disable_node(
unsigned) = 0;
158 virtual void disable_orientation(
unsigned) = 0;
159 virtual void disable_recorder(
unsigned) = 0;
160 virtual void disable_section(
unsigned) = 0;
161 virtual void disable_solver(
unsigned) = 0;
162 virtual void disable_step(
unsigned) = 0;
164 virtual void enable_amplitude(
unsigned) = 0;
165 virtual void enable_constraint(
unsigned) = 0;
166 virtual void enable_converger(
unsigned) = 0;
167 virtual void enable_criterion(
unsigned) = 0;
168 virtual void enable_database(
unsigned) = 0;
169 virtual void enable_element(
unsigned) = 0;
170 virtual void enable_group(
unsigned) = 0;
171 virtual void enable_integrator(
unsigned) = 0;
172 virtual void enable_load(
unsigned) = 0;
173 virtual void enable_material(
unsigned) = 0;
174 virtual void enable_modifier(
unsigned) = 0;
175 virtual void enable_node(
unsigned) = 0;
176 virtual void enable_orientation(
unsigned) = 0;
177 virtual void enable_recorder(
unsigned) = 0;
178 virtual void enable_section(
unsigned) = 0;
179 virtual void enable_solver(
unsigned) = 0;
180 virtual void enable_step(
unsigned) = 0;
182 template<
typename T>
const shared_ptr<T>&
get(unsigned);
183 template<
typename T>
const shared_ptr<T>&
get(uword);
184 template<
typename T> std::vector<shared_ptr<T>>
get(
const uvec&);
185 [[nodiscard]]
virtual const shared_ptr<Amplitude>&
get_amplitude(
unsigned)
const = 0;
186 [[nodiscard]]
virtual const shared_ptr<Constraint>&
get_constraint(
unsigned)
const = 0;
187 [[nodiscard]]
virtual const shared_ptr<Converger>&
get_converger(
unsigned)
const = 0;
188 [[nodiscard]]
virtual const shared_ptr<Criterion>&
get_criterion(
unsigned)
const = 0;
189 [[nodiscard]]
virtual const shared_ptr<Database>&
get_database(
unsigned)
const = 0;
190 [[nodiscard]]
virtual const shared_ptr<Element>&
get_element(
unsigned)
const = 0;
191 [[nodiscard]]
virtual const shared_ptr<Group>&
get_group(
unsigned)
const = 0;
192 [[nodiscard]]
virtual const shared_ptr<Integrator>&
get_integrator(
unsigned)
const = 0;
193 [[nodiscard]]
virtual const shared_ptr<Load>&
get_load(
unsigned)
const = 0;
194 [[nodiscard]]
virtual const shared_ptr<Material>&
get_material(
unsigned)
const = 0;
195 [[nodiscard]]
virtual const shared_ptr<Modifier>&
get_modifier(
unsigned)
const = 0;
196 [[nodiscard]]
virtual const shared_ptr<Node>&
get_node(
unsigned)
const = 0;
197 [[nodiscard]]
virtual const shared_ptr<Orientation>&
get_orientation(
unsigned)
const = 0;
198 [[nodiscard]]
virtual const shared_ptr<Recorder>&
get_recorder(
unsigned)
const = 0;
199 [[nodiscard]]
virtual const shared_ptr<Section>&
get_section(
unsigned)
const = 0;
200 [[nodiscard]]
virtual const shared_ptr<Solver>&
get_solver(
unsigned)
const = 0;
201 [[nodiscard]]
virtual const shared_ptr<Step>&
get_step(
unsigned)
const = 0;
203 template<
typename T>
const std::vector<shared_ptr<T>>& get_pool();
204 [[nodiscard]]
virtual const AmplitudeQueue& get_amplitude_pool()
const = 0;
205 [[nodiscard]]
virtual const ConstraintQueue& get_constraint_pool()
const = 0;
206 [[nodiscard]]
virtual const ConvergerQueue& get_converger_pool()
const = 0;
207 [[nodiscard]]
virtual const CriterionQueue& get_criterion_pool()
const = 0;
208 [[nodiscard]]
virtual const DatabaseQueue& get_database_pool()
const = 0;
209 [[nodiscard]]
virtual const ElementQueue& get_element_pool()
const = 0;
210 [[nodiscard]]
virtual const GroupQueue& get_group_pool()
const = 0;
211 [[nodiscard]]
virtual const IntegratorQueue& get_integrator_pool()
const = 0;
212 [[nodiscard]]
virtual const LoadQueue& get_load_pool()
const = 0;
213 [[nodiscard]]
virtual const MaterialQueue& get_material_pool()
const = 0;
214 [[nodiscard]]
virtual const ModifierQueue& get_modifier_pool()
const = 0;
215 [[nodiscard]]
virtual const NodeQueue& get_node_pool()
const = 0;
216 [[nodiscard]]
virtual const OrientationQueue& get_orientation_pool()
const = 0;
217 [[nodiscard]]
virtual const RecorderQueue& get_recorder_pool()
const = 0;
218 [[nodiscard]]
virtual const SectionQueue& get_section_pool()
const = 0;
219 [[nodiscard]]
virtual const SolverQueue& get_solver_pool()
const = 0;
220 [[nodiscard]]
virtual const StepQueue& get_step_pool()
const = 0;
222 friend shared_ptr<Amplitude>&
get_amplitude(
const shared_ptr<DomainBase>&,
unsigned);
223 friend shared_ptr<Constraint>&
get_constraint(
const shared_ptr<DomainBase>&,
unsigned);
224 friend shared_ptr<Converger>&
get_converger(
const shared_ptr<DomainBase>&,
unsigned);
225 friend shared_ptr<Criterion>&
get_criterion(
const shared_ptr<DomainBase>&,
unsigned);
226 friend shared_ptr<Database>&
get_database(
const shared_ptr<DomainBase>&,
unsigned);
227 friend shared_ptr<Element>&
get_element(
const shared_ptr<DomainBase>&,
unsigned);
228 friend shared_ptr<Group>&
get_group(
const shared_ptr<DomainBase>&,
unsigned);
229 friend shared_ptr<Integrator>&
get_integrator(
const shared_ptr<DomainBase>&,
unsigned);
230 friend shared_ptr<Load>&
get_load(
const shared_ptr<DomainBase>&,
unsigned);
231 friend shared_ptr<Material>&
get_material(
const shared_ptr<DomainBase>&,
unsigned);
232 friend shared_ptr<Modifier>&
get_modifier(
const shared_ptr<DomainBase>&,
unsigned);
233 friend shared_ptr<Node>&
get_node(
const shared_ptr<DomainBase>&,
unsigned);
234 friend shared_ptr<Orientation>&
get_orientation(
const shared_ptr<DomainBase>&,
unsigned);
235 friend shared_ptr<Recorder>&
get_recorder(
const shared_ptr<DomainBase>&,
unsigned);
236 friend shared_ptr<Section>&
get_section(
const shared_ptr<DomainBase>&,
unsigned);
237 friend shared_ptr<Solver>&
get_solver(
const shared_ptr<DomainBase>&,
unsigned);
238 friend shared_ptr<Step>&
get_step(
const shared_ptr<DomainBase>&,
unsigned);
240 template<
typename T>
size_t get();
246 [[nodiscard]]
virtual size_t get_element()
const = 0;
247 [[nodiscard]]
virtual size_t get_group()
const = 0;
249 [[nodiscard]]
virtual size_t get_load()
const = 0;
252 [[nodiscard]]
virtual size_t get_node()
const = 0;
255 [[nodiscard]]
virtual size_t get_section()
const = 0;
256 [[nodiscard]]
virtual size_t get_solver()
const = 0;
257 [[nodiscard]]
virtual size_t get_step()
const = 0;
259 template<
typename T>
bool find(
unsigned);
260 template<
typename T>
bool find(uword);
261 template<
typename T>
bool find(
const uvec&);
262 [[nodiscard]]
virtual bool find_amplitude(
unsigned)
const = 0;
263 [[nodiscard]]
virtual bool find_constraint(
unsigned)
const = 0;
264 [[nodiscard]]
virtual bool find_converger(
unsigned)
const = 0;
265 [[nodiscard]]
virtual bool find_criterion(
unsigned)
const = 0;
266 [[nodiscard]]
virtual bool find_database(
unsigned)
const = 0;
267 [[nodiscard]]
virtual bool find_element(
unsigned)
const = 0;
268 [[nodiscard]]
virtual bool find_group(
unsigned)
const = 0;
269 [[nodiscard]]
virtual bool find_integrator(
unsigned)
const = 0;
270 [[nodiscard]]
virtual bool find_load(
unsigned)
const = 0;
271 [[nodiscard]]
virtual bool find_material(
unsigned)
const = 0;
272 [[nodiscard]]
virtual bool find_modifier(
unsigned)
const = 0;
273 [[nodiscard]]
virtual bool find_node(
unsigned)
const = 0;
274 [[nodiscard]]
virtual bool find_orientation(
unsigned)
const = 0;
275 [[nodiscard]]
virtual bool find_recorder(
unsigned)
const = 0;
276 [[nodiscard]]
virtual bool find_section(
unsigned)
const = 0;
277 [[nodiscard]]
virtual bool find_solver(
unsigned)
const = 0;
278 [[nodiscard]]
virtual bool find_step(
unsigned)
const = 0;
280 virtual void set_current_step_tag(
unsigned) = 0;
281 virtual void set_current_converger_tag(
unsigned) = 0;
282 virtual void set_current_integrator_tag(
unsigned) = 0;
283 virtual void set_current_solver_tag(
unsigned) = 0;
285 virtual unsigned get_current_step_tag() = 0;
286 virtual unsigned get_current_converger_tag() = 0;
287 virtual unsigned get_current_integrator_tag() = 0;
288 virtual unsigned get_current_solver_tag() = 0;
290 [[nodiscard]]
virtual const shared_ptr<Step>& get_current_step()
const = 0;
291 [[nodiscard]]
virtual const shared_ptr<Converger>& get_current_converger()
const = 0;
292 [[nodiscard]]
virtual const shared_ptr<Integrator>& get_current_integrator()
const = 0;
293 [[nodiscard]]
virtual const shared_ptr<Solver>& get_current_solver()
const = 0;
298 virtual void insert_loaded_dof(
const uvec&) = 0;
302 virtual void insert_restrained_dof(
const uvec&) = 0;
306 virtual void insert_constrained_dof(
const uvec&) = 0;
311 virtual void insert_loaded_dof(uword) = 0;
315 virtual void insert_restrained_dof(uword) = 0;
319 virtual void insert_constrained_dof(uword) = 0;
325 [[nodiscard]]
virtual bool is_updated()
const = 0;
326 [[nodiscard]]
virtual bool is_sparse()
const = 0;
329 [[nodiscard]]
virtual const std::vector<std::vector<unsigned>>& get_color_map()
const = 0;
330 [[nodiscard]]
virtual std::pair<std::vector<unsigned>,
suanpan::graph<unsigned>> get_element_connectivity(
bool) = 0;
332 virtual int reorder_dof() = 0;
333 virtual int assign_color() = 0;
335 virtual int restart() = 0;
336 virtual int soft_restart() = 0;
337 virtual int initialize() = 0;
338 virtual int initialize_load() = 0;
339 virtual int initialize_constraint() = 0;
340 virtual int initialize_reference() = 0;
342 [[nodiscard]]
virtual int process_load(
bool) = 0;
343 [[nodiscard]]
virtual int process_constraint(
bool) = 0;
344 [[nodiscard]]
virtual int process_criterion() = 0;
345 [[nodiscard]]
virtual int process_modifier() = 0;
347 virtual void record() = 0;
348 virtual void enable_all() = 0;
349 virtual void summary()
const = 0;
351 virtual void update_current_resistance()
const = 0;
352 virtual void update_current_damping_force()
const = 0;
353 virtual void update_current_inertial_force()
const = 0;
355 virtual void assemble_resistance()
const = 0;
356 virtual void assemble_damping_force()
const = 0;
357 virtual void assemble_inertial_force()
const = 0;
359 virtual void assemble_initial_mass()
const = 0;
360 virtual void assemble_current_mass()
const = 0;
361 virtual void assemble_trial_mass()
const = 0;
362 virtual void assemble_initial_damping()
const = 0;
363 virtual void assemble_current_damping()
const = 0;
364 virtual void assemble_trial_damping()
const = 0;
365 virtual void assemble_initial_stiffness()
const = 0;
366 virtual void assemble_current_stiffness()
const = 0;
367 virtual void assemble_trial_stiffness()
const = 0;
368 virtual void assemble_initial_geometry()
const = 0;
369 virtual void assemble_current_geometry()
const = 0;
370 virtual void assemble_trial_geometry()
const = 0;
372 virtual void erase_machine_error()
const = 0;
374 virtual void update_load() = 0;
375 virtual void update_constraint() = 0;
377 virtual void assemble_load_stiffness() = 0;
378 virtual void assemble_constraint_stiffness() = 0;
380 [[nodiscard]]
virtual int update_current_status()
const = 0;
381 [[nodiscard]]
virtual int update_incre_status()
const = 0;
382 [[nodiscard]]
virtual int update_trial_status()
const = 0;
384 virtual void stage_status() = 0;
385 virtual void commit_status()
const = 0;
386 virtual void clear_status() = 0;
387 virtual void reset_status()
const = 0;
389 virtual void save(
string) = 0;
392 template<
typename T>
bool DomainBase::erase(
unsigned) {
throw invalid_argument(
"unsupported"); }
394 template<>
inline bool DomainBase::erase<Amplitude>(
const unsigned T) {
return erase_amplitude(
T); }
396 template<>
inline bool DomainBase::erase<Constraint>(
const unsigned T) {
return erase_constraint(
T); }
398 template<>
inline bool DomainBase::erase<Converger>(
const unsigned T) {
return erase_converger(
T); }
400 template<>
inline bool DomainBase::erase<Criterion>(
const unsigned T) {
return erase_criterion(
T); }
402 template<>
inline bool DomainBase::erase<Database>(
const unsigned T) {
return erase_database(
T); }
404 template<>
inline bool DomainBase::erase<Element>(
const unsigned T) {
return erase_element(
T); }
406 template<>
inline bool DomainBase::erase<Group>(
const unsigned T) {
return erase_group(
T); }
408 template<>
inline bool DomainBase::erase<Integrator>(
const unsigned T) {
return erase_integrator(
T); }
410 template<>
inline bool DomainBase::erase<Load>(
const unsigned T) {
return erase_load(
T); }
412 template<>
inline bool DomainBase::erase<Material>(
const unsigned T) {
return erase_material(
T); }
414 template<>
inline bool DomainBase::erase<Modifier>(
const unsigned T) {
return erase_modifier(
T); }
416 template<>
inline bool DomainBase::erase<Node>(
const unsigned T) {
return erase_node(
T); }
418 template<>
inline bool DomainBase::erase<Orientation>(
const unsigned T) {
return erase_orientation(
T); }
420 template<>
inline bool DomainBase::erase<Recorder>(
const unsigned T) {
return erase_recorder(
T); }
422 template<>
inline bool DomainBase::erase<Section>(
const unsigned T) {
return erase_section(
T); }
424 template<>
inline bool DomainBase::erase<Solver>(
const unsigned T) {
return erase_solver(
T); }
426 template<>
inline bool DomainBase::erase<Step>(
const unsigned T) {
return erase_step(
T); }
428 template<
typename T>
const shared_ptr<T>&
DomainBase::get(
unsigned) {
throw invalid_argument(
"unsupported"); }
430 template<
typename T>
const shared_ptr<T>&
DomainBase::get(uword) {
throw invalid_argument(
"unsupported"); }
433 std::vector<shared_ptr<T>> output;
434 output.reserve(P.n_elem);
436 for(
auto I : P) output.emplace_back(get<T>(I));
441 template<>
inline const shared_ptr<Amplitude>& DomainBase::get<Amplitude>(
const uword
T) {
return get_amplitude(static_cast<unsigned>(
T)); }
443 template<>
inline const shared_ptr<Constraint>& DomainBase::get<Constraint>(
const uword
T) {
return get_constraint(static_cast<unsigned>(
T)); }
445 template<>
inline const shared_ptr<Converger>& DomainBase::get<Converger>(
const uword
T) {
return get_converger(static_cast<unsigned>(
T)); }
447 template<>
inline const shared_ptr<Criterion>& DomainBase::get<Criterion>(
const uword
T) {
return get_criterion(static_cast<unsigned>(
T)); }
449 template<>
inline const shared_ptr<Database>& DomainBase::get<Database>(
const uword
T) {
return get_database(static_cast<unsigned>(
T)); }
451 template<>
inline const shared_ptr<Element>& DomainBase::get<Element>(
const uword
T) {
return get_element(static_cast<unsigned>(
T)); }
453 template<>
inline const shared_ptr<Group>& DomainBase::get<Group>(
const uword
T) {
return get_group(static_cast<unsigned>(
T)); }
455 template<>
inline const shared_ptr<Integrator>& DomainBase::get<Integrator>(
const uword
T) {
return get_integrator(static_cast<unsigned>(
T)); }
457 template<>
inline const shared_ptr<Load>& DomainBase::get<Load>(
const uword
T) {
return get_load(static_cast<unsigned>(
T)); }
459 template<>
inline const shared_ptr<Material>& DomainBase::get<Material>(
const uword
T) {
return get_material(static_cast<unsigned>(
T)); }
461 template<>
inline const shared_ptr<Modifier>& DomainBase::get<Modifier>(
const uword
T) {
return get_modifier(static_cast<unsigned>(
T)); }
463 template<>
inline const shared_ptr<Node>& DomainBase::get<Node>(
const uword
T) {
return get_node(static_cast<unsigned>(
T)); }
465 template<>
inline const shared_ptr<Orientation>& DomainBase::get<Orientation>(
const uword
T) {
return get_orientation(static_cast<unsigned>(
T)); }
467 template<>
inline const shared_ptr<Recorder>& DomainBase::get<Recorder>(
const uword
T) {
return get_recorder(static_cast<unsigned>(
T)); }
469 template<>
inline const shared_ptr<Section>& DomainBase::get<Section>(
const uword
T) {
return get_section(static_cast<unsigned>(
T)); }
471 template<>
inline const shared_ptr<Solver>& DomainBase::get<Solver>(
const uword
T) {
return get_solver(static_cast<unsigned>(
T)); }
473 template<>
inline const shared_ptr<Step>& DomainBase::get<Step>(
const uword
T) {
return get_step(static_cast<unsigned>(
T)); }
475 template<>
inline const shared_ptr<Amplitude>& DomainBase::get<Amplitude>(
const unsigned T) {
return get_amplitude(
T); }
477 template<>
inline const shared_ptr<Constraint>& DomainBase::get<Constraint>(
const unsigned T) {
return get_constraint(
T); }
479 template<>
inline const shared_ptr<Converger>& DomainBase::get<Converger>(
const unsigned T) {
return get_converger(
T); }
481 template<>
inline const shared_ptr<Criterion>& DomainBase::get<Criterion>(
const unsigned T) {
return get_criterion(
T); }
483 template<>
inline const shared_ptr<Database>& DomainBase::get<Database>(
const unsigned T) {
return get_database(
T); }
485 template<>
inline const shared_ptr<Element>& DomainBase::get<Element>(
const unsigned T) {
return get_element(
T); }
487 template<>
inline const shared_ptr<Group>& DomainBase::get<Group>(
const unsigned T) {
return get_group(
T); }
489 template<>
inline const shared_ptr<Integrator>& DomainBase::get<Integrator>(
const unsigned T) {
return get_integrator(
T); }
491 template<>
inline const shared_ptr<Load>& DomainBase::get<Load>(
const unsigned T) {
return get_load(
T); }
493 template<>
inline const shared_ptr<Material>& DomainBase::get<Material>(
const unsigned T) {
return get_material(
T); }
495 template<>
inline const shared_ptr<Modifier>& DomainBase::get<Modifier>(
const unsigned T) {
return get_modifier(
T); }
497 template<>
inline const shared_ptr<Node>& DomainBase::get<Node>(
const unsigned T) {
return get_node(
T); }
499 template<>
inline const shared_ptr<Orientation>& DomainBase::get<Orientation>(
const unsigned T) {
return get_orientation(
T); }
501 template<>
inline const shared_ptr<Recorder>& DomainBase::get<Recorder>(
const unsigned T) {
return get_recorder(
T); }
503 template<>
inline const shared_ptr<Section>& DomainBase::get<Section>(
const unsigned T) {
return get_section(
T); }
505 template<>
inline const shared_ptr<Solver>& DomainBase::get<Solver>(
const unsigned T) {
return get_solver(
T); }
507 template<>
inline const shared_ptr<Step>& DomainBase::get<Step>(
const unsigned T) {
return get_step(
T); }
509 template<
typename T>
const std::vector<shared_ptr<T>>&
DomainBase::get_pool() {
throw invalid_argument(
"unsupported"); }
511 template<>
inline const std::vector<shared_ptr<Amplitude>>& DomainBase::get_pool<Amplitude>() {
return get_amplitude_pool(); }
513 template<>
inline const std::vector<shared_ptr<Constraint>>& DomainBase::get_pool<Constraint>() {
return get_constraint_pool(); }
515 template<>
inline const std::vector<shared_ptr<Converger>>& DomainBase::get_pool<Converger>() {
return get_converger_pool(); }
517 template<>
inline const std::vector<shared_ptr<Criterion>>& DomainBase::get_pool<Criterion>() {
return get_criterion_pool(); }
519 template<>
inline const std::vector<shared_ptr<Database>>& DomainBase::get_pool<Database>() {
return get_database_pool(); }
521 template<>
inline const std::vector<shared_ptr<Element>>& DomainBase::get_pool<Element>() {
return get_element_pool(); }
523 template<>
inline const std::vector<shared_ptr<Group>>& DomainBase::get_pool<Group>() {
return get_group_pool(); }
525 template<>
inline const std::vector<shared_ptr<Integrator>>& DomainBase::get_pool<Integrator>() {
return get_integrator_pool(); }
527 template<>
inline const std::vector<shared_ptr<Load>>& DomainBase::get_pool<Load>() {
return get_load_pool(); }
529 template<>
inline const std::vector<shared_ptr<Material>>& DomainBase::get_pool<Material>() {
return get_material_pool(); }
531 template<>
inline const std::vector<shared_ptr<Modifier>>& DomainBase::get_pool<Modifier>() {
return get_modifier_pool(); }
533 template<>
inline const std::vector<shared_ptr<Node>>& DomainBase::get_pool<Node>() {
return get_node_pool(); }
535 template<>
inline const std::vector<shared_ptr<Orientation>>& DomainBase::get_pool<Orientation>() {
return get_orientation_pool(); }
537 template<>
inline const std::vector<shared_ptr<Recorder>>& DomainBase::get_pool<Recorder>() {
return get_recorder_pool(); }
539 template<>
inline const std::vector<shared_ptr<Section>>& DomainBase::get_pool<Section>() {
return get_section_pool(); }
541 template<>
inline const std::vector<shared_ptr<Solver>>& DomainBase::get_pool<Solver>() {
return get_solver_pool(); }
543 template<
typename T>
size_t DomainBase::get() {
throw invalid_argument(
"unsupported"); }
545 template<>
inline size_t DomainBase::get<Amplitude>() {
return get_amplitude(); }
547 template<>
inline size_t DomainBase::get<Constraint>() {
return get_constraint(); }
549 template<>
inline size_t DomainBase::get<Converger>() {
return get_converger(); }
551 template<>
inline size_t DomainBase::get<Criterion>() {
return get_criterion(); }
553 template<>
inline size_t DomainBase::get<Database>() {
return get_database(); }
555 template<>
inline size_t DomainBase::get<Element>() {
return get_element(); }
557 template<>
inline size_t DomainBase::get<Group>() {
return get_group(); }
559 template<>
inline size_t DomainBase::get<Integrator>() {
return get_integrator(); }
561 template<>
inline size_t DomainBase::get<Load>() {
return get_load(); }
563 template<>
inline size_t DomainBase::get<Material>() {
return get_material(); }
565 template<>
inline size_t DomainBase::get<Modifier>() {
return get_modifier(); }
567 template<>
inline size_t DomainBase::get<Node>() {
return get_node(); }
571 template<>
inline size_t DomainBase::get<Recorder>() {
return get_recorder(); }
573 template<>
inline size_t DomainBase::get<Section>() {
return get_section(); }
575 template<>
inline size_t DomainBase::get<Solver>() {
return get_solver(); }
577 template<>
inline size_t DomainBase::get<Step>() {
return get_step(); }
579 template<
typename T>
bool DomainBase::find(
unsigned) {
throw invalid_argument(
"unsupported"); }
581 template<
typename T>
bool DomainBase::find(uword) {
throw invalid_argument(
"unsupported"); }
584 for(
auto I : P)
if(!find<T>(I))
return false;
589 template<>
inline bool DomainBase::find<Amplitude>(
const uword
T) {
return find_amplitude(static_cast<unsigned>(
T)); }
591 template<>
inline bool DomainBase::find<Constraint>(
const uword
T) {
return find_constraint(static_cast<unsigned>(
T)); }
593 template<>
inline bool DomainBase::find<Converger>(
const uword
T) {
return find_converger(static_cast<unsigned>(
T)); }
595 template<>
inline bool DomainBase::find<Criterion>(
const uword
T) {
return find_criterion(static_cast<unsigned>(
T)); }
597 template<>
inline bool DomainBase::find<Database>(
const uword
T) {
return find_database(static_cast<unsigned>(
T)); }
599 template<>
inline bool DomainBase::find<Element>(
const uword
T) {
return find_element(static_cast<unsigned>(
T)); }
601 template<>
inline bool DomainBase::find<Group>(
const uword
T) {
return find_group(static_cast<unsigned>(
T)); }
603 template<>
inline bool DomainBase::find<Integrator>(
const uword
T) {
return find_integrator(static_cast<unsigned>(
T)); }
605 template<>
inline bool DomainBase::find<Load>(
const uword
T) {
return find_load(static_cast<unsigned>(
T)); }
607 template<>
inline bool DomainBase::find<Material>(
const uword
T) {
return find_material(static_cast<unsigned>(
T)); }
609 template<>
inline bool DomainBase::find<Modifier>(
const uword
T) {
return find_modifier(static_cast<unsigned>(
T)); }
611 template<>
inline bool DomainBase::find<Node>(
const uword
T) {
return find_node(static_cast<unsigned>(
T)); }
613 template<>
inline bool DomainBase::find<Orientation>(
const uword
T) {
return find_orientation(static_cast<unsigned>(
T)); }
615 template<>
inline bool DomainBase::find<Recorder>(
const uword
T) {
return find_recorder(static_cast<unsigned>(
T)); }
617 template<>
inline bool DomainBase::find<Section>(
const uword
T) {
return find_section(static_cast<unsigned>(
T)); }
619 template<>
inline bool DomainBase::find<Solver>(
const uword
T) {
return find_solver(static_cast<unsigned>(
T)); }
621 template<>
inline bool DomainBase::find<Step>(
const uword
T) {
return find_step(static_cast<unsigned>(
T)); }
623 template<>
inline bool DomainBase::find<Amplitude>(
const unsigned T) {
return find_amplitude(
T); }
625 template<>
inline bool DomainBase::find<Constraint>(
const unsigned T) {
return find_constraint(
T); }
627 template<>
inline bool DomainBase::find<Converger>(
const unsigned T) {
return find_converger(
T); }
629 template<>
inline bool DomainBase::find<Criterion>(
const unsigned T) {
return find_criterion(
T); }
631 template<>
inline bool DomainBase::find<Database>(
const unsigned T) {
return find_database(
T); }
633 template<>
inline bool DomainBase::find<Element>(
const unsigned T) {
return find_element(
T); }
635 template<>
inline bool DomainBase::find<Group>(
const unsigned T) {
return find_group(
T); }
637 template<>
inline bool DomainBase::find<Integrator>(
const unsigned T) {
return find_integrator(
T); }
639 template<>
inline bool DomainBase::find<Load>(
const unsigned T) {
return find_load(
T); }
641 template<>
inline bool DomainBase::find<Material>(
const unsigned T) {
return find_material(
T); }
643 template<>
inline bool DomainBase::find<Modifier>(
const unsigned T) {
return find_modifier(
T); }
645 template<>
inline bool DomainBase::find<Node>(
const unsigned T) {
return find_node(
T); }
647 template<>
inline bool DomainBase::find<Orientation>(
const unsigned T) {
return find_orientation(
T); }
649 template<>
inline bool DomainBase::find<Recorder>(
const unsigned T) {
return find_recorder(
T); }
651 template<>
inline bool DomainBase::find<Section>(
const unsigned T) {
return find_section(
T); }
653 template<>
inline bool DomainBase::find<Solver>(
const unsigned T) {
return find_solver(
T); }
655 template<>
inline bool DomainBase::find<Step>(
const unsigned T) {
return find_step(
T); }
shared_ptr< Integrator > & get_integrator(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:34
std::vector< shared_ptr< Material > > MaterialQueue
Definition: DomainBase.h:73
A Element class.
Definition: Element.h:89
The Node class holds the number of DoFs, coordinate, displacement, velocity and acceleration.
Definition: Node.h:77
The DomainBase class is a template.
Definition: DomainBase.h:90
const std::vector< shared_ptr< T > > & get_pool()
Definition: DomainBase.h:509
std::map< unsigned, shared_ptr< Step > > StepQueue
Definition: DomainBase.h:80
A Factory class.
Definition: DomainBase.h:44
shared_ptr< Group > & get_group(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:32
shared_ptr< Section > & get_section(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:48
std::vector< shared_ptr< Node > > NodeQueue
Definition: DomainBase.h:75
std::vector< shared_ptr< Criterion > > CriterionQueue
Definition: DomainBase.h:67
shared_ptr< Material > & get_material(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:38
std::vector< shared_ptr< Amplitude > > AmplitudeQueue
Definition: DomainBase.h:64
std::vector< shared_ptr< Solver > > SolverQueue
Definition: DomainBase.h:79
A Section class.
Definition: Section.h:73
shared_ptr< Converger > & get_converger(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:24
vector< set< T > > graph
Definition: container.h:59
The Group class.
Definition: Group.h:36
shared_ptr< Load > & get_load(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:36
An Amplitude class that can generate Amplitude pattern.
Definition: Amplitude.h:67
shared_ptr< Recorder > & get_recorder(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:46
A Modifier class.
Definition: Modifier.h:36
size_t get()
Definition: DomainBase.h:543
ColorMethod
Definition: DomainBase.h:84
std::vector< shared_ptr< Constraint > > ConstraintQueue
Definition: DomainBase.h:65
A Material abstract base class.
Definition: Material.h:102
A Solver class defines solvers used in analysis.
Definition: Solver.h:38
shared_ptr< Orientation > & get_orientation(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:44
std::vector< shared_ptr< Group > > GroupQueue
Definition: DomainBase.h:70
A Load class.
Definition: Load.h:37
The Integrator class is basically a wrapper of the DomainBase class with regard to some status changi...
Definition: Integrator.h:46
std::vector< shared_ptr< Section > > SectionQueue
Definition: DomainBase.h:78
shared_ptr< Modifier > & get_modifier(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:40
std::vector< shared_ptr< Recorder > > RecorderQueue
Definition: DomainBase.h:77
The Converger class handles converger test to indicate if the iteration converges according to variou...
Definition: Converger.h:44
A base Tag class.
Definition: Tag.h:38
A Criterion class.
Definition: Criterion.h:38
std::vector< shared_ptr< Orientation > > OrientationQueue
Definition: DomainBase.h:76
std::vector< shared_ptr< Database > > DatabaseQueue
Definition: DomainBase.h:68
shared_ptr< Step > & get_step(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:52
A ExternalModule class handles communication between the main program and external library...
Definition: ExternalModule.h:45
std::vector< shared_ptr< Integrator > > IntegratorQueue
Definition: DomainBase.h:71
shared_ptr< Database > & get_database(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:28
A Database class is a top level container.
Definition: Database.h:33
bool find(unsigned)
Definition: DomainBase.h:579
shared_ptr< Element > & get_element(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:30
std::vector< shared_ptr< Element > > ElementQueue
Definition: DomainBase.h:69
A Step class.
Definition: Step.h:39
A Orientation class.
Definition: Orientation.h:40
std::vector< shared_ptr< Modifier > > ModifierQueue
Definition: DomainBase.h:74
bool erase(unsigned)
Definition: DomainBase.h:392
A Recorder class.
Definition: Recorder.h:35
std::vector< shared_ptr< Converger > > ConvergerQueue
Definition: DomainBase.h:66
shared_ptr< Constraint > & get_constraint(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:22
shared_ptr< Node > & get_node(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:42
std::unordered_set< T > unordered_set
Definition: container.h:55
shared_ptr< Amplitude > & get_amplitude(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:20
shared_ptr< Solver > & get_solver(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:50
std::vector< shared_ptr< Load > > LoadQueue
Definition: DomainBase.h:72
A Constraint class.
Definition: Constraint.h:36
shared_ptr< Criterion > & get_criterion(const shared_ptr< Domain > &D, const unsigned T)
Definition: DomainHelper.cpp:26