suanPan
Subloading.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * Copyright (C) 2017-2025 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 SUBLOADING_H
29 #define SUBLOADING_H
30 
32 
34  class Saturation {
35  const double rate, bound;
36 
37  public:
38  Saturation(const double R, const double B)
39  : rate(R)
40  , bound(B) {}
41 
42  [[nodiscard]] double r() const { return rate; }
43 
44  [[nodiscard]] double b() const { return bound; }
45 
46  [[nodiscard]] double rb() const { return r() * b(); }
47  };
48 
49  const double elastic; // elastic modulus
50  const double poissons_ratio;
51  const double initial_iso;
52  const double k_iso;
53  const double saturation_iso;
54  const double m_iso;
55  const double initial_kin;
56  const double k_kin;
57  const double saturation_kin;
58  const double m_kin;
59  const double u;
60 
61  const Saturation b;
62  const Saturation c;
63 };
64 
65 class Subloading final : protected DataSubloading, public Material3D {
66  static constexpr unsigned max_iteration = 20u;
67  static constexpr double two_third = 2. / 3.;
68  static const double root_two_third;
69  static constexpr double z_bound = 1E-15;
70  static const double rate_bound;
71  static const mat unit_dev_tensor;
72 
73  static vec2 yield_ratio(double);
74 
75  const double double_shear = elastic / (1. + poissons_ratio); // double shear modulus
76 
77 public:
78  Subloading(
79  unsigned, // tag
80  DataSubloading&&, // data
81  double = 0. // density
82  );
83 
84  int initialize(const shared_ptr<DomainBase>&) override;
85 
86  unique_ptr<Material> get_copy() override;
87 
88  int update_trial_status(const vec&) override;
89 
90  int clear_status() override;
91  int commit_status() override;
92  int reset_status() override;
93 
94  void print() override;
95 };
96 
97 #endif
98 
Definition: Subloading.h:34
double rb() const
Definition: Subloading.h:46
double r() const
Definition: Subloading.h:42
Saturation(const double R, const double B)
Definition: Subloading.h:38
double b() const
Definition: Subloading.h:44
The Material3D class.
Definition: Material3D.h:37
A Subloading material class.
Definition: Subloading.h:65
int commit_status() override
Definition: Subloading.cpp:204
int initialize(const shared_ptr< DomainBase > &) override
Definition: Subloading.cpp:36
Subloading(unsigned, DataSubloading &&, double=0.)
Definition: Subloading.cpp:32
int clear_status() override
Definition: Subloading.cpp:196
void print() override
Definition: Subloading.cpp:220
int reset_status() override
Definition: Subloading.cpp:212
int update_trial_status(const vec &) override
Definition: Subloading.cpp:46
unique_ptr< Material > get_copy() override
Definition: Subloading.cpp:44
Definition: Subloading.h:33
const double m_kin
Definition: Subloading.h:58
const double m_iso
Definition: Subloading.h:54
const double u
Definition: Subloading.h:59
const double initial_kin
Definition: Subloading.h:55
const double saturation_iso
Definition: Subloading.h:53
const Saturation c
Definition: Subloading.h:62
const double initial_iso
Definition: Subloading.h:51
const double elastic
Definition: Subloading.h:49
const Saturation b
Definition: Subloading.h:61
const double poissons_ratio
Definition: Subloading.h:50
const double saturation_kin
Definition: Subloading.h:57
const double k_kin
Definition: Subloading.h:56
const double k_iso
Definition: Subloading.h:52