suanPan
🧮 An Open Source, Parallel and Heterogeneous Finite Element Analysis Framework
Loading...
Searching...
No Matches
Step.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 STEP_H
29#define STEP_H
30
31#include <Domain/Factory.hpp>
32#include <Domain/Tag.h>
33
34class DomainBase;
35class Solver;
36class Converger;
37class Integrator;
38
39class Step : public UniqueTag {
40 double time_period = 1.0; // time period
41
42 double time_left = time_period;
43
44 double max_step_size = time_period; // maximum step size
45 double min_step_size = time_period > 0. ? 1E-8 : 0.; // minimum step size
46 double ini_step_size = time_period > 0. ? time_period : 1.; // initial step size
47
48 unsigned max_substep = 1000; // maximum increment number
49
50 bool fixed_step_size = false; // auto-stepping
51
52 unsigned solver_tag = 0;
53 unsigned converger_tag = 0;
54 unsigned integrator_tag = 0;
55
56protected:
57 const bool symm_mat = false;
58 const bool band_mat = true;
59 const bool sparse_mat = false;
60
64
65 std::weak_ptr<DomainBase> database;
66 shared_ptr<Factory<double>> factory;
67 shared_ptr<Solver> solver;
68 shared_ptr<Converger> tester;
69 shared_ptr<Integrator> modifier;
70
71 void configure_storage_scheme() const;
72
73public:
74 explicit Step(unsigned = 0, double = 1.);
75
76 virtual int initialize();
77
78 virtual int analyze() = 0;
79
80 void set_domain(const std::weak_ptr<DomainBase>&);
81 [[nodiscard]] const std::weak_ptr<DomainBase>& get_domain() const;
82
83 void set_factory(const shared_ptr<Factory<double>>&);
84 [[nodiscard]] const shared_ptr<Factory<double>>& get_factory() const;
85
86 void set_solver_tag(unsigned);
87 void set_solver(const shared_ptr<Solver>&);
88 [[nodiscard]] const shared_ptr<Solver>& get_solver() const;
89
90 void set_converger_tag(unsigned);
91 void set_converger(const shared_ptr<Converger>&);
92 [[nodiscard]] const shared_ptr<Converger>& get_converger() const;
93
94 void set_integrator_tag(unsigned);
95 void set_integrator(const shared_ptr<Integrator>&);
96 [[nodiscard]] const shared_ptr<Integrator>& get_integrator() const;
97
98 void set_time_period(double);
99 void set_time_left(double);
100 [[nodiscard]] double get_time_period() const;
101 [[nodiscard]] double get_time_left() const;
102
103 void set_ini_step_size(double);
104 void set_min_step_size(double);
105 void set_max_step_size(double);
106 void set_max_substep(unsigned);
110 void set_tolerance(double);
111 void set_refinement(std::uint8_t);
112 void set_lis_option(std::istringstream&);
113 void set_option(std::istringstream&);
114
115 [[nodiscard]] double get_ini_step_size() const;
116 [[nodiscard]] double get_min_step_size() const;
117 [[nodiscard]] double get_max_step_size() const;
118 [[nodiscard]] unsigned get_max_substep() const;
119
120 [[nodiscard]] bool is_fixed_step_size() const;
121 void set_fixed_step_size(bool);
122
123 [[nodiscard]] bool is_symm() const;
124 [[nodiscard]] bool is_band() const;
125 [[nodiscard]] bool is_sparse() const;
126 void set_symm(bool) const;
127 void set_band(bool) const;
128 void set_sparse(bool) const;
129};
130
131#endif
132
Precision
Definition SolverSetting.hpp:23
The Converger class handles converger test to indicate if the iteration converges according to variou...
Definition Converger.h:44
The DomainBase class is a template.
Definition DomainBase.h:94
A Factory class.
Definition Factory.hpp:69
The Integrator class is basically a wrapper of the DomainBase class with regard to some status changi...
Definition Integrator.h:46
A Solver class defines solvers used in analysis.
Definition Solver.h:38
A Step class.
Definition Step.h:39
const bool sparse_mat
Definition Step.h:59
void set_precision(Precision)
Definition Step.cpp:138
const std::weak_ptr< DomainBase > & get_domain() const
Definition Step.cpp:76
void set_integrator_tag(unsigned)
Definition Step.cpp:94
void set_sparse(bool) const
Definition Step.cpp:170
const shared_ptr< Solver > & get_solver() const
Definition Step.cpp:86
void set_converger_tag(unsigned)
Definition Step.cpp:88
void set_integrator(const shared_ptr< Integrator > &)
Definition Step.cpp:96
void set_band(bool) const
Definition Step.cpp:168
void set_factory(const shared_ptr< Factory< double > > &)
Definition Step.cpp:78
bool is_band() const
Definition Step.cpp:162
void set_system_solver(SolverType)
Definition Step.cpp:134
void set_max_substep(unsigned)
Definition Step.cpp:132
bool is_symm() const
Definition Step.cpp:160
double get_time_period() const
Definition Step.cpp:114
SolverType sub_system_solver
Definition Step.h:62
virtual int initialize()
Definition Step.cpp:38
unsigned get_max_substep() const
Definition Step.cpp:154
void set_sub_system_solver(SolverType)
Definition Step.cpp:136
std::weak_ptr< DomainBase > database
Definition Step.h:65
double get_ini_step_size() const
Definition Step.cpp:148
void set_domain(const std::weak_ptr< DomainBase > &)
Definition Step.cpp:74
void set_max_step_size(double)
Definition Step.cpp:130
const shared_ptr< Factory< double > > & get_factory() const
Definition Step.cpp:80
void set_solver(const shared_ptr< Solver > &)
Definition Step.cpp:84
const bool band_mat
Definition Step.h:58
const shared_ptr< Converger > & get_converger() const
Definition Step.cpp:92
void set_option(std::istringstream &)
Definition Step.cpp:146
void set_refinement(std::uint8_t)
Definition Step.cpp:142
double get_max_step_size() const
Definition Step.cpp:152
SolverSetting< double > system_setting
Definition Step.h:63
virtual int analyze()=0
SolverType system_solver
Definition Step.h:61
void set_symm(bool) const
Definition Step.cpp:166
const bool symm_mat
Definition Step.h:57
void set_fixed_step_size(bool)
Definition Step.cpp:158
void set_solver_tag(unsigned)
Definition Step.cpp:82
void set_tolerance(double)
Definition Step.cpp:140
void configure_storage_scheme() const
Definition Step.cpp:26
bool is_sparse() const
Definition Step.cpp:164
shared_ptr< Integrator > modifier
Definition Step.h:69
shared_ptr< Solver > solver
Definition Step.h:67
bool is_fixed_step_size() const
Definition Step.cpp:156
void set_time_period(double)
Definition Step.cpp:100
double get_time_left() const
Definition Step.cpp:116
void set_converger(const shared_ptr< Converger > &)
Definition Step.cpp:90
void set_ini_step_size(double)
Definition Step.cpp:118
void set_min_step_size(double)
Definition Step.cpp:128
double get_min_step_size() const
Definition Step.cpp:150
void set_lis_option(std::istringstream &)
Definition Step.cpp:144
const shared_ptr< Integrator > & get_integrator() const
Definition Step.cpp:98
shared_ptr< Converger > tester
Definition Step.h:68
void set_time_left(double)
Definition Step.cpp:112
shared_ptr< Factory< double > > factory
Definition Step.h:66
Label objects that cannot be copied.
Definition Tag.h:88
SolverType
Definition Factory.hpp:57
Definition SolverSetting.hpp:28