b2api
B2000++ API Reference Manual, VERSION 4.6
 
Loading...
Searching...
No Matches
b2element_klt_compute_strain.H
1//------------------------------------------------------------------------
2// b2element_klt_compute_strain.H --
3//
4// Compute the position vector and derivatives of a particle.
5//
6// Copyright (c) 2015,2016
7// SMR Engineering & Development SA
8// 2502 Bienne, Switzerland
9//
10// All Rights Reserved. Proprietary source code. The contents of
11// this file may not be disclosed to third parties, copied or
12// duplicated in any form, in whole or in part, without the prior
13// written permission of SMR.
14//------------------------------------------------------------------------
15
16#ifndef _B2ELEMENT_KLT_COMPUTE_STRAIN_H_
17#define _B2ELEMENT_KLT_COMPUTE_STRAIN_H_
18
19#include "b2element_klt_util.H"
21
22namespace b2000 { namespace klt {
23
24class ComputeStrain {
25public:
26 void compute_strain_covariant(
27 const DofVec3d& g1, const DofVec3d& g2, const double G1[3], const double G2[3],
28 const bool first, const bool second, const bool a3_second, DofVector<3>& strain) {
29 if (a3_second) {
30 compute_green_lagrange_strain_covariant_d2(g1, g2, G1, G2, first, second, strain);
31 } else {
32 compute_green_lagrange_strain_covariant_d1(g1, g2, G1, G2, first, second, strain);
33 }
34 }
35
36 void compute_strain_ts_covariant(
37 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a3, const bool first,
38 const bool second, const bool a3_second, DofScalar& gamma13, DofScalar& gamma23) {
39 if (a3_second) {
40 compute_green_lagrange_strain_ts_covariant_d2(
41 a1, a2, a3, first, second, gamma13, gamma23);
42 } else {
43 compute_green_lagrange_strain_ts_covariant_d1(
44 a1, a2, a3, first, second, gamma13, gamma23);
45 }
46 }
47
48 void compute_deformation_gradient(
49 const DofVec3d& g1, const DofVec3d& g2, const DofVec3d& g3, const double G1[3],
50 const double G2[3], const double G3[3], double F[3][3]);
51
52private:
53 void compute_green_lagrange_strain_covariant_d2(
54 const DofVec3d& g1, const DofVec3d& g2, const double G1[3], const double G2[3],
55 const bool first, const bool second, DofVector<3>& strain);
56
57 void compute_green_lagrange_strain_covariant_d1(
58 const DofVec3d& g1, const DofVec3d& g2, const double G1[3], const double G2[3],
59 const bool first, const bool second, DofVector<3>& strain);
60
61 void compute_green_lagrange_strain_ts_covariant_d1(
62 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a3, const bool first,
63 const bool second, DofScalar& gamma13, DofScalar& gamma23);
64
65 void compute_green_lagrange_strain_ts_covariant_d2(
66 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a3, const bool first,
67 const bool second, DofScalar& gamma13, DofScalar& gamma23);
68};
69
70class ComputeStrainPreintegration {
71public:
72 void compute_strain_covariant(
73 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a31, const DofVec3d& a32,
74 const double A1[3], const double A2[3], const double A31[3], const double A32[3],
75 const bool first, const bool second, const bool a3_second, DofVector<3>& strain0,
76 DofVector<3>& strain1) {
77 if (a3_second) {
78 compute_green_lagrange_strain_covariant_d2(
79 a1, a2, a31, a32, A1, A2, A31, A32, first, second, strain0, strain1);
80 } else {
81 compute_green_lagrange_strain_covariant_d1(
82 a1, a2, a31, a32, A1, A2, A31, A32, first, second, strain0, strain1);
83 }
84 }
85
86 void compute_strain_ts_covariant(
87 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a3, const bool first,
88 const bool second, const bool a3_second, DofScalar& gamma13, DofScalar& gamma23) {
89 if (a3_second) {
90 compute_green_lagrange_strain_ts_covariant_d2(
91 a1, a2, a3, first, second, gamma13, gamma23);
92 } else {
93 compute_green_lagrange_strain_ts_covariant_d1(
94 a1, a2, a3, first, second, gamma13, gamma23);
95 }
96 }
97
98 void compute_strain_covariant(
99 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a3, const DofVec3d& a3d1,
100 const DofVec3d& a3d2, const double A1[3], const double A2[3], const double A3[3],
101 const double A3d1[3], const double A3d2[3], const bool first, const bool second,
102 const bool a3_second, DofVector<8>& strain) {
103 if (a3_second) {
104 compute_green_lagrange_strain_covariant_d2(
105 a1, a2, a3, a3d1, a3d2, A1, A2, A3, A3d1, A3d2, first, second, strain);
106 } else {
107 compute_green_lagrange_strain_covariant_d1(
108 a1, a2, a3, a3d1, a3d2, A1, A2, A3, A3d1, A3d2, first, second, strain);
109 }
110 }
111
112 void compute_strain_covariant_nitsche(
113 const DofVec3d& an, const DofVec3d& a3r, const bool first, const bool second,
114 const bool a3_second, DofScalar& gamma) {
115 if (a3_second) {
116 compute_green_lagrange_strain_covariant_nitsche_d2(an, a3r, first, second, gamma);
117 } else {
118 compute_green_lagrange_strain_covariant_nitsche_d1(an, a3r, first, second, gamma);
119 }
120 }
121
122private:
123 void compute_green_lagrange_strain_covariant_d2(
124 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a31, const DofVec3d& a32,
125 const double A1[3], const double A2[3], const double A31[3], const double A32[3],
126 const bool first, const bool second, DofVector<3>& strain_0, DofVector<3>& strain_1);
127
128 void compute_green_lagrange_strain_covariant_d1(
129 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a31, const DofVec3d& a32,
130 const double A1[3], const double A2[3], const double A31[3], const double A32[3],
131 const bool first, const bool second, DofVector<3>& strain_0, DofVector<3>& strain_1);
132
133 void compute_green_lagrange_strain_ts_covariant_d1(
134 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a3, const bool first,
135 const bool second, DofScalar& gamma13, DofScalar& gamma23);
136
137 void compute_green_lagrange_strain_ts_covariant_d2(
138 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a3, const bool first,
139 const bool second, DofScalar& gamma13, DofScalar& gamma23);
140
141 void compute_green_lagrange_strain_covariant_d2(
142 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a3, const DofVec3d& a31,
143 const DofVec3d& a32, const double A1[3], const double A2[3], const double A3[3],
144 const double A31[3], const double A32[3], const bool first, const bool second,
145 DofVector<8>& strain);
146
147 void compute_green_lagrange_strain_covariant_d1(
148 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a3, const DofVec3d& a31,
149 const DofVec3d& a32, const double A1[3], const double A2[3], const double A3[3],
150 const double A31[3], const double A32[3], const bool first, const bool second,
151 DofVector<8>& strain);
152
153 void compute_green_lagrange_strain_covariant_nitsche_d1(
154 const DofVec3d& an, const DofVec3d& a3r, const bool first, const bool second,
155 DofScalar& gamma);
156
157 void compute_green_lagrange_strain_covariant_nitsche_d2(
158 const DofVec3d& an, const DofVec3d& a3r, const bool first, const bool second,
159 DofScalar& gamma);
160};
161
162class ComputeStrainMembrane {
163public:
164 void compute_strain_covariant(
165 const DofVec3d& a1, const DofVec3d& a2, const double A1[3], const double A2[3],
166 const int component, const bool first, const bool second, DofScalar& strain) {
167 if (component == 0) {
168 compute_strain_covariant_11(a1, a2, A1, A2, first, second, strain);
169 } else if (component == 1) {
170 compute_strain_covariant_22(a1, a2, A1, A2, first, second, strain);
171 } else {
172 compute_strain_covariant_12(a1, a2, A1, A2, first, second, strain);
173 }
174 }
175
176 void compute_strain_covariant_11(
177 const DofVec3d& a1, const DofVec3d& a2, const double A1[3], const double A2[3],
178 const bool first, const bool second, DofScalar& strain);
179
180 void compute_strain_covariant_22(
181 const DofVec3d& a1, const DofVec3d& a2, const double A1[3], const double A2[3],
182 const bool first, const bool second, DofScalar& strain);
183
184 void compute_strain_covariant_12(
185 const DofVec3d& a1, const DofVec3d& a2, const double A1[3], const double A2[3],
186 const bool first, const bool second, DofScalar& strain);
187};
188
189class ComputeStrainBending {
190public:
191 void compute_strain_covariant(
192 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a31, const DofVec3d& a32,
193 const double A1[3], const double A2[3], const double A31[3], const double A32[3],
194 const int component, const bool first, const bool second, DofScalar& strain) {
195 if (component == 0) {
196 compute_strain_covariant_11(a1, a2, a31, a32, A1, A2, A31, A32, first, second, strain);
197 } else if (component == 1) {
198 compute_strain_covariant_22(a1, a2, a31, a32, A1, A2, A31, A32, first, second, strain);
199 } else {
200 compute_strain_covariant_12(a1, a2, a31, a32, A1, A2, A31, A32, first, second, strain);
201 }
202 }
203
204 void compute_strain_covariant_11(
205 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a31, const DofVec3d& a32,
206 const double A1[3], const double A2[3], const double A31[3], const double A32[3],
207 const bool first, const bool second, DofScalar& strain);
208
209 void compute_strain_covariant_22(
210 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a31, const DofVec3d& a32,
211 const double A1[3], const double A2[3], const double A31[3], const double A32[3],
212 const bool first, const bool second, DofScalar& strain);
213
214 void compute_strain_covariant_12(
215 const DofVec3d& a1, const DofVec3d& a2, const DofVec3d& a31, const DofVec3d& a32,
216 const double A1[3], const double A2[3], const double A31[3], const double A32[3],
217 const bool first, const bool second, DofScalar& strain);
218};
219
220}} // namespace b2000::klt
221
222#endif /* _B2ELEMENT_KLT_COMPUTE_STRAIN_H_ */
Contains the base classes for implementing Finite Elements.
Definition b2boundary_condition.H:32