16 #include "weakforms_elasticity.h"
22 namespace WeakFormsElasticity
24 template<
typename Scalar>
25 DefaultJacobianElasticity_0_0<Scalar>::DefaultJacobianElasticity_0_0
26 (
unsigned int i,
unsigned int j,
double lambda,
double mu)
27 : MatrixFormVol<Scalar>(i, j), lambda(lambda), mu(mu)
29 this->setSymFlag(HERMES_SYM);
32 template<
typename Scalar>
33 DefaultJacobianElasticity_0_0<Scalar>::DefaultJacobianElasticity_0_0
34 (
unsigned int i,
unsigned int j,
std::string area,
double lambda,
double mu)
35 : MatrixFormVol<Scalar>(i, j), lambda(lambda), mu(mu)
37 this->setSymFlag(HERMES_SYM);
41 template<
typename Scalar>
42 Scalar DefaultJacobianElasticity_0_0<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *u,
43 Func<double> *v, Geom<double> *e, Func<Scalar> **ext)
const
45 return (lambda + 2*mu) * int_dudx_dvdx<double, Scalar>(n, wt, u, v) +
46 mu * int_dudy_dvdy<double, Scalar>(n, wt, u, v);
49 template<
typename Scalar>
50 Ord DefaultJacobianElasticity_0_0<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *u, Func<Ord> *v,
51 Geom<Ord> *e, Func<Ord> **ext)
const
53 return (lambda + 2*mu) * int_dudx_dvdx<Ord, Ord>(n, wt, u, v) +
54 mu * int_dudy_dvdy<Ord, Ord>(n, wt, u, v);
57 template<
typename Scalar>
58 MatrixFormVol<Scalar>* DefaultJacobianElasticity_0_0<Scalar>::clone()
const
60 return new DefaultJacobianElasticity_0_0<Scalar>(this->i, this->j, this->areas[0], this->lambda, this->mu);
63 template<
typename Scalar>
64 DefaultJacobianElasticity_0_1<Scalar>::DefaultJacobianElasticity_0_1
65 (
unsigned int i,
unsigned int j,
double lambda,
double mu)
66 : MatrixFormVol<Scalar>(i, j), lambda(lambda), mu(mu)
68 this->setSymFlag(HERMES_SYM);
71 template<
typename Scalar>
72 DefaultJacobianElasticity_0_1<Scalar>::DefaultJacobianElasticity_0_1
73 (
unsigned int i,
unsigned int j,
std::string area,
double lambda,
double mu)
74 : MatrixFormVol<Scalar>(i, j), lambda(lambda), mu(mu)
76 this->setSymFlag(HERMES_SYM);
80 template<
typename Scalar>
81 Scalar DefaultJacobianElasticity_0_1<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *u,
82 Func<double> *v, Geom<double> *e, Func<Scalar> **ext)
const
84 return lambda * int_dudy_dvdx<double, Scalar>(n, wt, u, v) +
85 mu * int_dudx_dvdy<double, Scalar>(n, wt, u, v);
88 template<
typename Scalar>
89 Ord DefaultJacobianElasticity_0_1<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *u,
90 Func<Ord> *v, Geom<Ord> *e, Func<Ord> **ext)
const
92 return lambda * int_dudy_dvdx<Ord, Ord>(n, wt, u, v) +
93 mu * int_dudx_dvdy<Ord, Ord>(n, wt, u, v);
96 template<
typename Scalar>
97 MatrixFormVol<Scalar>* DefaultJacobianElasticity_0_1<Scalar>::clone()
const
99 return new DefaultJacobianElasticity_0_1<Scalar>(this->i, this->j, this->areas[0], this->lambda, this->mu);
102 template<
typename Scalar>
103 DefaultResidualElasticity_0_0<Scalar>::DefaultResidualElasticity_0_0
104 (
unsigned int i,
double lambda,
double mu)
105 : VectorFormVol<Scalar>(i), lambda(lambda), mu(mu)
109 template<
typename Scalar>
110 DefaultResidualElasticity_0_0<Scalar>::DefaultResidualElasticity_0_0
111 (
unsigned int i,
std::string area,
double lambda,
double mu)
112 : VectorFormVol<Scalar>(i), lambda(lambda), mu(mu)
117 template<
typename Scalar>
118 Scalar DefaultResidualElasticity_0_0<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *v,
119 Geom<double> *e, Func<Scalar> **ext)
const
121 return (2*mu + lambda) * int_dudx_dvdx<Scalar, double>(n, wt, u_ext[0], v) +
122 mu * int_dudy_dvdy<Scalar, double>(n, wt, u_ext[0], v);
125 template<
typename Scalar>
126 Ord DefaultResidualElasticity_0_0<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *v,
127 Geom<Ord> *e, Func<Ord> **ext)
const
129 return (2*mu + lambda) * int_dudx_dvdx<Ord, Ord>(n, wt, u_ext[0], v) +
130 mu * int_dudy_dvdy<Ord, Ord>(n, wt, u_ext[0], v);
133 template<
typename Scalar>
134 VectorFormVol<Scalar>* DefaultResidualElasticity_0_0<Scalar>::clone()
const
136 return new DefaultResidualElasticity_0_0<Scalar>(this->i, this->areas[0], this->lambda, this->mu);
139 template<
typename Scalar>
140 DefaultResidualElasticity_0_1<Scalar>::DefaultResidualElasticity_0_1
141 (
unsigned int i,
double lambda,
double mu)
142 : VectorFormVol<Scalar>(i), lambda(lambda), mu(mu)
146 template<
typename Scalar>
147 DefaultResidualElasticity_0_1<Scalar>::DefaultResidualElasticity_0_1
148 (
unsigned int i,
std::string area,
double lambda,
double mu)
149 : VectorFormVol<Scalar>(i), lambda(lambda), mu(mu)
154 template<
typename Scalar>
155 Scalar DefaultResidualElasticity_0_1<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *v,
156 Geom<double> *e, Func<Scalar> **ext)
const
158 return lambda * int_dudy_dvdx<double, Scalar>(n, wt, u_ext[1], v) +
159 mu * int_dudx_dvdy<double, Scalar>(n, wt, u_ext[1], v);
162 template<
typename Scalar>
163 Ord DefaultResidualElasticity_0_1<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *v,
164 Geom<Ord> *e, Func<Ord> **ext)
const
166 return lambda * int_dudy_dvdx<Ord, Ord>(n, wt, u_ext[1], v) +
167 mu * int_dudx_dvdy<Ord, Ord>(n, wt, u_ext[1], v);
170 template<
typename Scalar>
171 VectorFormVol<Scalar>* DefaultResidualElasticity_0_1<Scalar>::clone()
const
173 return new DefaultResidualElasticity_0_1<Scalar>(this->i, this->areas[0], this->lambda, this->mu);
176 template<
typename Scalar>
177 DefaultResidualElasticity_1_0<Scalar>::DefaultResidualElasticity_1_0
178 (
unsigned int i,
double lambda,
double mu)
179 : VectorFormVol<Scalar>(i), lambda(lambda), mu(mu)
183 template<
typename Scalar>
184 DefaultResidualElasticity_1_0<Scalar>::DefaultResidualElasticity_1_0
185 (
unsigned int i,
std::string area,
double lambda,
double mu)
186 : VectorFormVol<Scalar>(i), lambda(lambda), mu(mu)
191 template<
typename Scalar>
192 Scalar DefaultResidualElasticity_1_0<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *v,
193 Geom<double> *e, Func<Scalar> **ext)
const
195 return mu * int_dudy_dvdx<double, Scalar>(n, wt, u_ext[0], v) +
196 lambda * int_dudx_dvdy<double, Scalar>(n, wt, u_ext[0], v);
199 template<
typename Scalar>
200 Ord DefaultResidualElasticity_1_0<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *v,
201 Geom<Ord> *e, Func<Ord> **ext)
const
203 return mu * int_dudy_dvdx<Ord, Ord>(n, wt, u_ext[0], v) +
204 lambda * int_dudx_dvdy<Ord, Ord>(n, wt, u_ext[0], v);
207 template<
typename Scalar>
208 VectorFormVol<Scalar>* DefaultResidualElasticity_1_0<Scalar>::clone()
const
210 return new DefaultResidualElasticity_1_0<Scalar>(this->i, this->areas[0], this->lambda, this->mu);
213 template<
typename Scalar>
214 DefaultResidualElasticity_1_1<Scalar>::DefaultResidualElasticity_1_1
215 (
unsigned int i,
double lambda,
double mu)
216 : VectorFormVol<Scalar>(i), lambda(lambda), mu(mu)
220 template<
typename Scalar>
221 DefaultResidualElasticity_1_1<Scalar>::DefaultResidualElasticity_1_1
222 (
unsigned int i,
std::string area,
double lambda,
double mu)
223 : VectorFormVol<Scalar>(i), lambda(lambda), mu(mu)
228 template<
typename Scalar>
229 Scalar DefaultResidualElasticity_1_1<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *v,
230 Geom<double> *e, Func<Scalar> **ext)
const
232 return (2*mu + lambda) * int_dudy_dvdy<double, Scalar>(n, wt, u_ext[1], v) +
233 mu * int_dudx_dvdx<double, Scalar>(n, wt, u_ext[1], v);
236 template<
typename Scalar>
237 Ord DefaultResidualElasticity_1_1<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *v,
238 Geom<Ord> *e, Func<Ord> **ext)
const
240 return (2*mu + lambda) * int_dudy_dvdy<Ord, Ord>(n, wt, u_ext[1], v) +
241 mu * int_dudx_dvdx<Ord, Ord>(n, wt, u_ext[1], v);
244 template<
typename Scalar>
245 VectorFormVol<Scalar>* DefaultResidualElasticity_1_1<Scalar>::clone()
const
247 return new DefaultResidualElasticity_1_1<Scalar>(this->i, this->areas[0], this->lambda, this->mu);
250 template<
typename Scalar>
251 DefaultJacobianElasticity_1_1<Scalar>::DefaultJacobianElasticity_1_1
252 (
unsigned int i,
unsigned int j,
double lambda,
double mu)
253 : MatrixFormVol<Scalar>(i, j), lambda(lambda), mu(mu)
257 template<
typename Scalar>
258 DefaultJacobianElasticity_1_1<Scalar>::DefaultJacobianElasticity_1_1
259 (
unsigned int i,
unsigned int j,
std::string area,
double lambda,
double mu)
260 : MatrixFormVol<Scalar>(i, j), lambda(lambda), mu(mu)
265 template<
typename Scalar>
266 Scalar DefaultJacobianElasticity_1_1<Scalar>::value(
int n,
double *wt, Func<Scalar> *u_ext[], Func<double> *u,
267 Func<double> *v, Geom<double> *e, Func<Scalar> **ext)
const
269 return mu * int_dudx_dvdx<double, Scalar>(n, wt, u, v) +
270 (lambda + 2*mu) * int_dudy_dvdy<double, Scalar>(n, wt, u, v);
273 template<
typename Scalar>
274 Ord DefaultJacobianElasticity_1_1<Scalar>::ord(
int n,
double *wt, Func<Ord> *u_ext[], Func<Ord> *u, Func<Ord> *v,
275 Geom<Ord> *e, Func<Ord> **ext)
const
277 return mu * int_dudx_dvdx<Ord, Ord>(n, wt, u, v) +
278 (lambda + 2*mu) * int_dudy_dvdy<Ord, Ord>(n, wt, u, v);
281 template<
typename Scalar>
282 MatrixFormVol<Scalar>* DefaultJacobianElasticity_1_1<Scalar>::clone()
const
284 return new DefaultJacobianElasticity_1_1<Scalar>(this->i, this->j, this->areas[0], this->lambda, this->mu);
287 template class HERMES_API DefaultJacobianElasticity_0_0<double>;
288 template class HERMES_API DefaultJacobianElasticity_0_1<double>;
289 template class HERMES_API DefaultResidualElasticity_0_0<double>;
290 template class HERMES_API DefaultResidualElasticity_0_1<double>;
291 template class HERMES_API DefaultResidualElasticity_1_0<double>;
292 template class HERMES_API DefaultResidualElasticity_1_1<double>;
293 template class HERMES_API DefaultJacobianElasticity_1_1<double>;