suanPan
Integrator.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * Copyright (C) 2017-2022 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  ******************************************************************************/
39 #ifndef INTEGRATOR_H
40 #define INTEGRATOR_H
41 
42 #include <Domain/Tag.h>
43 
44 class DomainBase;
45 
46 class Integrator : public Tag {
47  bool time_step_switch = true;
48 
49  weak_ptr<DomainBase> database;
50 
51 public:
52  explicit Integrator(unsigned = 0);
53  Integrator(const Integrator&) = delete; // copy forbidden
54  Integrator(Integrator&&) = delete; // move forbidden
55  Integrator& operator=(const Integrator&) = delete; // assign forbidden
56  Integrator& operator=(Integrator&&) = delete; // assign forbidden
57  ~Integrator() override;
58 
59  void set_domain(const weak_ptr<DomainBase>&);
60  [[nodiscard]] const weak_ptr<DomainBase>& get_domain() const;
61 
62  virtual int initialize();
63 
64  // ! some multistep integrators may require fixed time step for some consecutive sub-steps
65  void set_time_step_switch(bool);
66  [[nodiscard]] bool allow_to_change_time_step() const;
67 
68  [[nodiscard]] virtual int process_load();
69  [[nodiscard]] virtual int process_constraint();
70  [[nodiscard]] virtual int process_criterion();
71  [[nodiscard]] virtual int process_modifier();
72  [[nodiscard]] virtual int process_load_resistance();
73  [[nodiscard]] virtual int process_constraint_resistance();
74 
75  void record() const;
76 
77  virtual void assemble_resistance();
78  virtual void assemble_matrix();
79 
80  virtual vec get_force_residual();
81  virtual vec get_displacement_residual();
82  virtual vec get_auxiliary_residual();
83  virtual sp_mat get_reference_load();
84  virtual sp_mat get_auxiliary_stiffness();
85 
86  virtual void update_load();
87  virtual void update_constraint();
88 
89  virtual void update_trial_load_factor(double);
90  virtual void update_trial_load_factor(const vec&);
91  virtual void update_trial_displacement(const vec&);
92 
93  void update_trial_time(double);
94  void update_incre_time(double);
95  virtual int update_trial_status();
96  virtual int update_incre_status();
97 
98  virtual int update_internal(const mat&);
99 
100  mat solve(const mat&);
101  mat solve(const sp_mat&);
102  mat solve(mat&&);
103  mat solve(sp_mat&&);
104  virtual int solve(mat&, const mat&);
105  virtual int solve(mat&, const sp_mat&);
106  virtual int solve(mat&, mat&&);
107  virtual int solve(mat&, sp_mat&&);
108 
109  virtual void erase_machine_error() const;
110 
111  virtual void stage_and_commit_status();
112 
113  virtual void stage_status();
114  virtual void commit_status();
115  virtual void clear_status();
116  virtual void reset_status();
117 
118  virtual void update_parameter(double);
119  virtual void update_compatibility() const;
120 
121  virtual vec from_incre_velocity(const vec&, const uvec&); // obtain target displacement from increment of velocity
122  virtual vec from_incre_acceleration(const vec&, const uvec&); // obtain target displacement from increment of acceleration
123  vec from_total_velocity(const vec&, const uvec&);
124  vec from_total_acceleration(const vec&, const uvec&);
125  vec from_incre_velocity(double, const uvec&);
126  vec from_incre_acceleration(double, const uvec&);
127  vec from_total_velocity(double, const uvec&);
128  vec from_total_acceleration(double, const uvec&);
129 };
130 
131 #endif
132 
The DomainBase class is a template.
Definition: DomainBase.h:90
The Integrator class is basically a wrapper of the DomainBase class with regard to some status changi...
Definition: Integrator.h:46
void update_incre_time(double)
Definition: Integrator.cpp:178
void set_domain(const weak_ptr< DomainBase > &)
Definition: Integrator.cpp:27
virtual int update_trial_status()
Definition: Integrator.cpp:184
Integrator & operator=(const Integrator &)=delete
virtual int process_load_resistance()
Definition: Integrator.cpp:73
virtual void update_trial_load_factor(double)
Definition: Integrator.cpp:160
virtual vec get_displacement_residual()
Definition: Integrator.cpp:132
virtual void update_load()
Definition: Integrator.cpp:156
const weak_ptr< DomainBase > & get_domain() const
Definition: Integrator.cpp:29
virtual int process_constraint()
Definition: Integrator.cpp:55
virtual sp_mat get_reference_load()
Definition: Integrator.cpp:152
Integrator(const Integrator &)=delete
virtual int process_modifier()
Definition: Integrator.cpp:71
virtual vec from_incre_acceleration(const vec &, const uvec &)
Definition: Integrator.cpp:288
virtual int process_load()
Definition: Integrator.cpp:47
Integrator(unsigned=0)
Definition: Integrator.cpp:22
virtual void update_constraint()
Definition: Integrator.cpp:158
void set_time_step_switch(bool)
Definition: Integrator.cpp:38
virtual void stage_status()
Definition: Integrator.cpp:237
void record() const
Definition: Integrator.cpp:93
~Integrator() override
Definition: Integrator.cpp:25
virtual void update_parameter(double)
Definition: Integrator.cpp:257
virtual void commit_status()
Definition: Integrator.cpp:239
virtual void update_trial_displacement(const vec &)
Definition: Integrator.cpp:167
virtual vec from_incre_velocity(const vec &, const uvec &)
Definition: Integrator.cpp:278
virtual void erase_machine_error() const
Definition: Integrator.cpp:230
mat solve(const mat &)
Definition: Integrator.cpp:193
virtual int initialize()
Definition: Integrator.cpp:31
virtual vec get_auxiliary_residual()
Definition: Integrator.cpp:146
virtual int process_constraint_resistance()
Definition: Integrator.cpp:82
vec from_total_acceleration(const vec &, const uvec &)
Definition: Integrator.cpp:298
virtual void assemble_resistance()
Definition: Integrator.cpp:95
virtual int process_criterion()
Definition: Integrator.cpp:69
virtual void clear_status()
Definition: Integrator.cpp:244
virtual void assemble_matrix()
Definition: Integrator.cpp:106
virtual int update_incre_status()
Definition: Integrator.cpp:186
Integrator(Integrator &&)=delete
virtual void update_compatibility() const
Definition: Integrator.cpp:268
Integrator & operator=(Integrator &&)=delete
virtual int update_internal(const mat &)
Definition: Integrator.cpp:191
bool allow_to_change_time_step() const
Definition: Integrator.cpp:45
virtual void reset_status()
Definition: Integrator.cpp:249
void update_trial_time(double)
Definition: Integrator.cpp:172
vec from_total_velocity(const vec &, const uvec &)
Definition: Integrator.cpp:290
virtual vec get_force_residual()
Definition: Integrator.cpp:117
virtual void stage_and_commit_status()
Definition: Integrator.cpp:232
virtual sp_mat get_auxiliary_stiffness()
Definition: Integrator.cpp:154
A base Tag class.
Definition: Tag.h:38