suanPan
🧮 An Open Source, Parallel and Heterogeneous Finite Element Analysis Framework
Loading...
Searching...
No Matches
Section.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 SECTION_H
29#define SECTION_H
30
31#include <Domain/Tag.h>
32
33enum class SectionType : unsigned {
34 D0 = 0,
35 D1 = 1,
36 D2 = 2,
37 D3 = 3,
38 NM2D = 3,
39 NM3D = 6,
40 OS3D = 12,
41};
42
43enum class OutputType;
44
45class DomainBase;
46class Material;
47
49 const unsigned material_tag; // material tag
50
52
53 const vec eccentricity;
54
55 const double area;
56 const double linear_density = 0.;
57 const double characteristic_length = -1.;
58
59 vec trial_deformation{}; // trial deformation
60 vec current_deformation{}; // current deformation
61
62 vec trial_deformation_rate{}; // trial deformation rate
63 vec current_deformation_rate{}; // current deformation rate
64
65 vec trial_resistance{}; // trial resistance
66 vec current_resistance{}; // current resistance
67
68 mat initial_stiffness{}; // stiffness matrix
69 mat current_stiffness{}; // stiffness matrix
70 mat trial_stiffness{}; // stiffness matrix
71
72 mat initial_geometry{}; // geometry matrix
73 mat current_geometry{}; // geometry matrix
74 mat trial_geometry{}; // geometry matrix
75};
76
77class Section : protected DataSection, public CopyableTag {
78 const bool initialized = false;
79 const bool symmetric = false;
80
81public:
82 explicit Section(
83 unsigned = 0, // section tag
84 SectionType = SectionType::D0, // section type
85 unsigned = 0, // material tag
86 double = 0., // area
87 vec&& = {0., 0.} // eccentricity
88 );
89
90 [[nodiscard]] SectionType get_section_type() const;
91 [[nodiscard]] double get_area() const;
92 [[nodiscard]] double get_linear_density() const;
93
94 int initialize_base(const shared_ptr<DomainBase>&);
95
96 virtual int initialize(const shared_ptr<DomainBase>&) = 0;
97
98 void set_initialized(bool) const;
99 void set_symmetric(bool) const;
100 [[nodiscard]] bool is_initialized() const;
101 [[nodiscard]] bool is_symmetric() const;
102
103 void set_eccentricity(const vec&) const;
104 [[nodiscard]] const vec& get_eccentricity() const;
105
106 virtual void set_characteristic_length(double) const;
107 [[nodiscard]] double get_characteristic_length() const;
108
109 [[nodiscard]] virtual const vec& get_trial_deformation() const;
110 [[nodiscard]] virtual const vec& get_trial_deformation_rate() const;
111 [[nodiscard]] virtual const vec& get_trial_resistance() const;
112 [[nodiscard]] virtual const mat& get_trial_stiffness() const;
113 [[nodiscard]] virtual const mat& get_trial_geometry() const;
114
115 [[nodiscard]] virtual const vec& get_current_deformation() const;
116 [[nodiscard]] virtual const vec& get_current_deformation_rate() const;
117 [[nodiscard]] virtual const vec& get_current_resistance() const;
118 [[nodiscard]] virtual const mat& get_current_stiffness() const;
119 [[nodiscard]] virtual const mat& get_current_geometry() const;
120
121 [[nodiscard]] virtual const mat& get_initial_stiffness() const;
122 [[nodiscard]] virtual const mat& get_initial_geometry() const;
123
124 virtual unique_ptr<Section> unique_copy() = 0;
125
126 int update_incre_status(double);
127 int update_incre_status(double, double);
128 int update_trial_status(double);
129 int update_trial_status(double, double);
130
131 virtual int update_incre_status(const vec&);
132 virtual int update_incre_status(const vec&, const vec&);
133 virtual int update_trial_status(const vec&);
134 virtual int update_trial_status(const vec&, const vec&);
135
136 virtual int clear_status() = 0;
137 virtual int commit_status() = 0;
138 virtual int reset_status() = 0;
139
140 [[nodiscard]] virtual std::vector<vec> record(OutputType) const;
141};
142
143namespace suanpan {
144 unique_ptr<Section> unique_copy(const shared_ptr<Section>&);
145} // namespace suanpan
146
147#endif
148
OutputType
Definition OutputType.h:23
Label objects that can be copied.
Definition Tag.h:73
The DomainBase class is a template.
Definition DomainBase.h:94
A Material abstract base class.
Definition Material.h:114
A Section class.
Definition Section.h:77
bool is_initialized() const
Definition Section.cpp:76
virtual unique_ptr< Section > unique_copy()=0
void set_symmetric(bool) const
Definition Section.cpp:74
virtual const vec & get_trial_deformation() const
Definition Section.cpp:88
void set_eccentricity(const vec &) const
Definition Section.cpp:80
virtual int clear_status()=0
int update_incre_status(double)
Definition Section.cpp:112
const vec & get_eccentricity() const
Definition Section.cpp:82
SectionType get_section_type() const
Definition Section.cpp:28
virtual const mat & get_initial_stiffness() const
Definition Section.cpp:108
virtual const vec & get_trial_resistance() const
Definition Section.cpp:92
void set_initialized(bool) const
Definition Section.cpp:72
int initialize_base(const shared_ptr< DomainBase > &)
Definition Section.cpp:34
double get_area() const
Definition Section.cpp:30
virtual const mat & get_current_stiffness() const
Definition Section.cpp:104
virtual const vec & get_trial_deformation_rate() const
Definition Section.cpp:90
virtual const mat & get_initial_geometry() const
Definition Section.cpp:110
virtual const mat & get_trial_geometry() const
Definition Section.cpp:96
double get_characteristic_length() const
Definition Section.cpp:86
virtual void set_characteristic_length(double) const
Definition Section.cpp:84
int update_trial_status(double)
Definition Section.cpp:123
virtual int commit_status()=0
virtual const vec & get_current_resistance() const
Definition Section.cpp:102
double get_linear_density() const
Definition Section.cpp:32
bool is_symmetric() const
Definition Section.cpp:78
virtual const vec & get_current_deformation() const
Definition Section.cpp:98
virtual int reset_status()=0
virtual const vec & get_current_deformation_rate() const
Definition Section.cpp:100
virtual const mat & get_current_geometry() const
Definition Section.cpp:106
virtual std::vector< vec > record(OutputType) const
Definition Section.cpp:142
virtual int initialize(const shared_ptr< DomainBase > &)=0
virtual const mat & get_trial_stiffness() const
Definition Section.cpp:94
SectionType
Definition Section.h:33
Definition SparseMatMAGMA.hpp:43
unique_ptr< Material > unique_copy(const shared_ptr< Material > &)
Definition Material.cpp:371
Definition Section.h:48
vec trial_deformation
Definition Section.h:59
mat initial_stiffness
Definition Section.h:68
vec trial_resistance
Definition Section.h:65
mat trial_geometry
Definition Section.h:74
mat current_stiffness
Definition Section.h:69
const double characteristic_length
Definition Section.h:57
vec trial_deformation_rate
Definition Section.h:62
mat current_geometry
Definition Section.h:73
const SectionType section_type
Definition Section.h:51
const unsigned material_tag
Definition Section.h:49
vec current_deformation
Definition Section.h:60
const vec eccentricity
Definition Section.h:53
vec current_resistance
Definition Section.h:66
const double linear_density
Definition Section.h:56
vec current_deformation_rate
Definition Section.h:63
mat trial_stiffness
Definition Section.h:70
const double area
Definition Section.h:55
mat initial_geometry
Definition Section.h:72