62 for(
int i=0; i<npts; i++)
63 printf(
" ( %g %g %g ) \n", pts[i].x, pts[i].y, pts[i].z);
105 int direction = index%3;
108 updated_pts[pid].
x += eps;
110 else if(direction == 1)
112 updated_pts[pid].
y += eps;
114 else if(direction == 2)
116 updated_pts[pid].
z += eps;
120 log_msg(0, 0, 0,
"Point Update doesn't work");
138 for(
size_t k = 0; k < 9; k++){
156 double time = tm.
time + param_globals::dt;
159 switch (param_globals::Ta.type) {
161 S_act_ff = param_globals::Ta.strength * time / param_globals::tend;
164 printf(
"Tanh model not yet implemented");
167 printf(
"double hill model not yet implemented");
170 printf(
"External active tension model input not yet implemented");
173 printf(
"Please choose an existing active tension model");
178 Piola_Kirchhoff_1_stress[0] += deformation_gradient[0] * S_act_ff * K_ff;
179 Piola_Kirchhoff_1_stress[1] += deformation_gradient[1] * S_act_ff * K_ff;
180 Piola_Kirchhoff_1_stress[2] += deformation_gradient[2] * S_act_ff * K_ff;
207 Basic_constitutive_model * constitutive_model;
215 if(fib.
x * fib.
x < 0.9)
217 helper_dir = {1, 0, 0};
221 helper_dir = {0, 1, 0};
223 she =
cross(fib, helper_dir);
244 for(
int iidx=0; iidx < nint; iidx++)
256 double QFQT[9], QiFQT[9];
257 QFQT[0] = fib.
x * (fib.
x * F[0] + fib.
y * F[3] + fib.
z * F[6]) + fib.
y * (fib.
x * F[1] + fib.
y * F[4] + fib.
z * F[7]) + fib.
z * (fib.
x * F[2] + fib.
y * F[5] + fib.
z * F[8]);
258 QFQT[1] = she.x * (fib.
x * F[0] + fib.
y * F[3] + fib.
z * F[6]) + she.y * (fib.
x * F[1] + fib.
y * F[4] + fib.
z * F[7]) + she.z * (fib.
x * F[2] + fib.
y * F[5] + fib.
z * F[8]);
259 QFQT[2] = nor.
x * (fib.
x * F[0] + fib.
y * F[3] + fib.
z * F[6]) + nor.
y * (fib.
x * F[1] + fib.
y * F[4] + fib.
z * F[7]) + nor.
z * (fib.
x * F[2] + fib.
y * F[5] + fib.
z * F[8]);
260 QFQT[3] = fib.
x * (she.x * F[0] + she.y * F[3] + she.z * F[6]) + fib.
y * (she.x * F[1] + she.y * F[4] + she.z * F[7]) + fib.
z * (she.x * F[2] + she.y * F[5] + she.z * F[8]);
261 QFQT[4] = she.x * (she.x * F[0] + she.y * F[3] + she.z * F[6]) + she.y * (she.x * F[1] + she.y * F[4] + she.z * F[7]) + she.z * (she.x * F[2] + she.y * F[5] + she.z * F[8]);
262 QFQT[5] = nor.
x * (she.x * F[0] + she.y * F[3] + she.z * F[6]) + nor.
y * (she.x * F[1] + she.y * F[4] + she.z * F[7]) + nor.
z * (she.x * F[2] + she.y * F[5] + she.z * F[8]);
263 QFQT[6] = fib.
x * (nor.
x * F[0] + nor.
y * F[3] + nor.
z * F[6]) + fib.
y * (nor.
x * F[1] + nor.
y * F[4] + nor.
z * F[7]) + fib.
z * (nor.
x * F[2] + nor.
y * F[5] + nor.
z * F[8]);
264 QFQT[7] = she.x * (nor.
x * F[0] + nor.
y * F[3] + nor.
z * F[6]) + she.y * (nor.
x * F[1] + nor.
y * F[4] + nor.
z * F[7]) + she.z * (nor.
x * F[2] + nor.
y * F[5] + nor.
z * F[8]);
265 QFQT[8] = nor.
x * (nor.
x * F[0] + nor.
y * F[3] + nor.
z * F[6]) + nor.
y * (nor.
x * F[1] + nor.
y * F[4] + nor.
z * F[7]) + nor.
z * (nor.
x * F[2] + nor.
y * F[5] + nor.
z * F[8]);
267 QiFQT[0] = fib.
x * (fib.
x * iF[0] + fib.
y * iF[3] + fib.
z * iF[6]) + fib.
y * (fib.
x * iF[1] + fib.
y * iF[4] + fib.
z * iF[7]) + fib.
z * (fib.
x * iF[2] + fib.
y * iF[5] + fib.
z * iF[8]);
268 QiFQT[1] = she.x * (fib.
x * iF[0] + fib.
y * iF[3] + fib.
z * iF[6]) + she.y * (fib.
x * iF[1] + fib.
y * iF[4] + fib.
z * iF[7]) + she.z * (fib.
x * iF[2] + fib.
y * iF[5] + fib.
z * iF[8]);
269 QiFQT[2] = nor.
x * (fib.
x * iF[0] + fib.
y * iF[3] + fib.
z * iF[6]) + nor.
y * (fib.
x * iF[1] + fib.
y * iF[4] + fib.
z * iF[7]) + nor.
z * (fib.
x * iF[2] + fib.
y * iF[5] + fib.
z * iF[8]);
270 QiFQT[3] = fib.
x * (she.x * iF[0] + she.y * iF[3] + she.z * iF[6]) + fib.
y * (she.x * iF[1] + she.y * iF[4] + she.z * iF[7]) + fib.
z * (she.x * iF[2] + she.y * iF[5] + she.z * iF[8]);
271 QiFQT[4] = she.x * (she.x * iF[0] + she.y * iF[3] + she.z * iF[6]) + she.y * (she.x * iF[1] + she.y * iF[4] + she.z * iF[7]) + she.z * (she.x * iF[2] + she.y * iF[5] + she.z * iF[8]);
272 QiFQT[5] = nor.
x * (she.x * iF[0] + she.y * iF[3] + she.z * iF[6]) + nor.
y * (she.x * iF[1] + she.y * iF[4] + she.z * iF[7]) + nor.
z * (she.x * iF[2] + she.y * iF[5] + she.z * iF[8]);
273 QiFQT[6] = fib.
x * (nor.
x * iF[0] + nor.
y * iF[3] + nor.
z * iF[6]) + fib.
y * (nor.
x * iF[1] + nor.
y * iF[4] + nor.
z * iF[7]) + fib.
z * (nor.
x * iF[2] + nor.
y * iF[5] + nor.
z * iF[8]);
274 QiFQT[7] = she.x * (nor.
x * iF[0] + nor.
y * iF[3] + nor.
z * iF[6]) + she.y * (nor.
x * iF[1] + nor.
y * iF[4] + nor.
z * iF[7]) + she.z * (nor.
x * iF[2] + nor.
y * iF[5] + nor.
z * iF[8]);
275 QiFQT[8] = nor.
x * (nor.
x * iF[0] + nor.
y * iF[3] + nor.
z * iF[6]) + nor.
y * (nor.
x * iF[1] + nor.
y * iF[4] + nor.
z * iF[7]) + nor.
z * (nor.
x * iF[2] + nor.
y * iF[5] + nor.
z * iF[8]);
277 constitutive_model->calc_PK1_stress(QiFQT, QFQT, detF, S_PK1);
279 if(param_globals::Ta.strength != 0)
284 S_PK1_xyz[0] = fib.
x * (fib.
x * S_PK1[0] + she.x * S_PK1[3] + nor.
x * S_PK1[6]) + she.x * (fib.
x * S_PK1[1] + she.x * S_PK1[4] + nor.
x * S_PK1[7]) + nor.
x * (fib.
x * S_PK1[2] + she.x * S_PK1[5] + nor.
x * S_PK1[8]);
285 S_PK1_xyz[1] = fib.
y * (fib.
x * S_PK1[0] + she.x * S_PK1[3] + nor.
x * S_PK1[6]) + she.y * (fib.
x * S_PK1[1] + she.x * S_PK1[4] + nor.
x * S_PK1[7]) + nor.
y * (fib.
x * S_PK1[2] + she.x * S_PK1[5] + nor.
x * S_PK1[8]);
286 S_PK1_xyz[2] = fib.
z * (fib.
x * S_PK1[0] + she.x * S_PK1[3] + nor.
x * S_PK1[6]) + she.z * (fib.
x * S_PK1[1] + she.x * S_PK1[4] + nor.
x * S_PK1[7]) + nor.
z * (fib.
x * S_PK1[2] + she.x * S_PK1[5] + nor.
x * S_PK1[8]);
287 S_PK1_xyz[3] = fib.
x * (fib.
y * S_PK1[0] + she.y * S_PK1[3] + nor.
y * S_PK1[6]) + she.x * (fib.
y * S_PK1[1] + she.y * S_PK1[4] + nor.
y * S_PK1[7]) + nor.
x * (fib.
y * S_PK1[2] + she.y * S_PK1[5] + nor.
y * S_PK1[8]);
288 S_PK1_xyz[4] = fib.
y * (fib.
y * S_PK1[0] + she.y * S_PK1[3] + nor.
y * S_PK1[6]) + she.y * (fib.
y * S_PK1[1] + she.y * S_PK1[4] + nor.
y * S_PK1[7]) + nor.
y * (fib.
y * S_PK1[2] + she.y * S_PK1[5] + nor.
y * S_PK1[8]);
289 S_PK1_xyz[5] = fib.
z * (fib.
y * S_PK1[0] + she.y * S_PK1[3] + nor.
y * S_PK1[6]) + she.z * (fib.
y * S_PK1[1] + she.y * S_PK1[4] + nor.
y * S_PK1[7]) + nor.
z * (fib.
y * S_PK1[2] + she.y * S_PK1[5] + nor.
y * S_PK1[8]);
290 S_PK1_xyz[6] = fib.
x * (fib.
z * S_PK1[0] + she.z * S_PK1[3] + nor.
z * S_PK1[6]) + she.x * (fib.
z * S_PK1[1] + she.z * S_PK1[4] + nor.
z * S_PK1[7]) + nor.
x * (fib.
z * S_PK1[2] + she.z * S_PK1[5] + nor.
z * S_PK1[8]);
291 S_PK1_xyz[7] = fib.
y * (fib.
z * S_PK1[0] + she.z * S_PK1[3] + nor.
z * S_PK1[6]) + she.y * (fib.
z * S_PK1[1] + she.z * S_PK1[4] + nor.
z * S_PK1[7]) + nor.
y * (fib.
z * S_PK1[2] + she.z * S_PK1[5] + nor.
z * S_PK1[8]);
292 S_PK1_xyz[8] = fib.
z * (fib.
z * S_PK1[0] + she.z * S_PK1[3] + nor.
z * S_PK1[6]) + she.z * (fib.
z * S_PK1[1] + she.z * S_PK1[4] + nor.
z * S_PK1[7]) + nor.
z * (fib.
z * S_PK1[2] + she.z * S_PK1[5] + nor.
z * S_PK1[8]);
295 double dv = w[iidx] * detJ;
298 for(std::size_t a=0; a < nnodes; a++)
301 double sax = gshape[1][a], say = gshape[2][a], saz = gshape[3][a];
302 for(std::size_t k=0; k < dpn_ele; k++)
304 buff[dpn_ele*a + k] += dv * (S_PK1_xyz[k] * sax
305 + S_PK1_xyz[k + 3] * say
306 + S_PK1_xyz[k + 6] * saz);
327 dpn(row_dpn, col_dpn);
338 Basic_constitutive_model * constitutive_model;
345 fib = {1.0, 0.0, 0.0};
349 if (!has_sheet && is_perp)
352 if(fib.
x * fib.
x < 0.9)
354 helper_dir = {1.0, 0.0, 0.0};
358 helper_dir = {0.0, 1.0, 0.0};
360 she =
cross(fib, helper_dir);
367 double epsilon = 1e-9;
377 buff.
assign(row_dpn * ndof, col_dpn * ndof, 0.0);
385 for (std::size_t i = 0; i < nnodes * row_dpn; i++) {
387 for (std::size_t iidx = 0; iidx < nint; iidx++) {
407 double QFpQT[9], QiFpQT[9], QFnQT[9], QiFnQT[9];
408 QFpQT[0] = fib.
x * (fib.
x * F_p[0] + fib.
y * F_p[3] + fib.
z * F_p[6]) + fib.
y * (fib.
x * F_p[1] + fib.
y * F_p[4] + fib.
z * F_p[7]) + fib.
z * (fib.
x * F_p[2] + fib.
y * F_p[5] + fib.
z * F_p[8]);
409 QFpQT[1] = she.x * (fib.
x * F_p[0] + fib.
y * F_p[3] + fib.
z * F_p[6]) + she.y * (fib.
x * F_p[1] + fib.
y * F_p[4] + fib.
z * F_p[7]) + she.z * (fib.
x * F_p[2] + fib.
y * F_p[5] + fib.
z * F_p[8]);
410 QFpQT[2] = nor.
x * (fib.
x * F_p[0] + fib.
y * F_p[3] + fib.
z * F_p[6]) + nor.
y * (fib.
x * F_p[1] + fib.
y * F_p[4] + fib.
z * F_p[7]) + nor.
z * (fib.
x * F_p[2] + fib.
y * F_p[5] + fib.
z * F_p[8]);
411 QFpQT[3] = fib.
x * (she.x * F_p[0] + she.y * F_p[3] + she.z * F_p[6]) + fib.
y * (she.x * F_p[1] + she.y * F_p[4] + she.z * F_p[7]) + fib.
z * (she.x * F_p[2] + she.y * F_p[5] + she.z * F_p[8]);
412 QFpQT[4] = she.x * (she.x * F_p[0] + she.y * F_p[3] + she.z * F_p[6]) + she.y * (she.x * F_p[1] + she.y * F_p[4] + she.z * F_p[7]) + she.z * (she.x * F_p[2] + she.y * F_p[5] + she.z * F_p[8]);
413 QFpQT[5] = nor.
x * (she.x * F_p[0] + she.y * F_p[3] + she.z * F_p[6]) + nor.
y * (she.x * F_p[1] + she.y * F_p[4] + she.z * F_p[7]) + nor.
z * (she.x * F_p[2] + she.y * F_p[5] + she.z * F_p[8]);
414 QFpQT[6] = fib.
x * (nor.
x * F_p[0] + nor.
y * F_p[3] + nor.
z * F_p[6]) + fib.
y * (nor.
x * F_p[1] + nor.
y * F_p[4] + nor.
z * F_p[7]) + fib.
z * (nor.
x * F_p[2] + nor.
y * F_p[5] + nor.
z * F_p[8]);
415 QFpQT[7] = she.x * (nor.
x * F_p[0] + nor.
y * F_p[3] + nor.
z * F_p[6]) + she.y * (nor.
x * F_p[1] + nor.
y * F_p[4] + nor.
z * F_p[7]) + she.z * (nor.
x * F_p[2] + nor.
y * F_p[5] + nor.
z * F_p[8]);
416 QFpQT[8] = nor.
x * (nor.
x * F_p[0] + nor.
y * F_p[3] + nor.
z * F_p[6]) + nor.
y * (nor.
x * F_p[1] + nor.
y * F_p[4] + nor.
z * F_p[7]) + nor.
z * (nor.
x * F_p[2] + nor.
y * F_p[5] + nor.
z * F_p[8]);
418 QiFpQT[0] = fib.
x * (fib.
x * iF_p[0] + fib.
y * iF_p[3] + fib.
z * iF_p[6]) + fib.
y * (fib.
x * iF_p[1] + fib.
y * iF_p[4] + fib.
z * iF_p[7]) + fib.
z * (fib.
x * iF_p[2] + fib.
y * iF_p[5] + fib.
z * iF_p[8]);
419 QiFpQT[1] = she.x * (fib.
x * iF_p[0] + fib.
y * iF_p[3] + fib.
z * iF_p[6]) + she.y * (fib.
x * iF_p[1] + fib.
y * iF_p[4] + fib.
z * iF_p[7]) + she.z * (fib.
x * iF_p[2] + fib.
y * iF_p[5] + fib.
z * iF_p[8]);
420 QiFpQT[2] = nor.
x * (fib.
x * iF_p[0] + fib.
y * iF_p[3] + fib.
z * iF_p[6]) + nor.
y * (fib.
x * iF_p[1] + fib.
y * iF_p[4] + fib.
z * iF_p[7]) + nor.
z * (fib.
x * iF_p[2] + fib.
y * iF_p[5] + fib.
z * iF_p[8]);
421 QiFpQT[3] = fib.
x * (she.x * iF_p[0] + she.y * iF_p[3] + she.z * iF_p[6]) + fib.
y * (she.x * iF_p[1] + she.y * iF_p[4] + she.z * iF_p[7]) + fib.
z * (she.x * iF_p[2] + she.y * iF_p[5] + she.z * iF_p[8]);
422 QiFpQT[4] = she.x * (she.x * iF_p[0] + she.y * iF_p[3] + she.z * iF_p[6]) + she.y * (she.x * iF_p[1] + she.y * iF_p[4] + she.z * iF_p[7]) + she.z * (she.x * iF_p[2] + she.y * iF_p[5] + she.z * iF_p[8]);
423 QiFpQT[5] = nor.
x * (she.x * iF_p[0] + she.y * iF_p[3] + she.z * iF_p[6]) + nor.
y * (she.x * iF_p[1] + she.y * iF_p[4] + she.z * iF_p[7]) + nor.
z * (she.x * iF_p[2] + she.y * iF_p[5] + she.z * iF_p[8]);
424 QiFpQT[6] = fib.
x * (nor.
x * iF_p[0] + nor.
y * iF_p[3] + nor.
z * iF_p[6]) + fib.
y * (nor.
x * iF_p[1] + nor.
y * iF_p[4] + nor.
z * iF_p[7]) + fib.
z * (nor.
x * iF_p[2] + nor.
y * iF_p[5] + nor.
z * iF_p[8]);
425 QiFpQT[7] = she.x * (nor.
x * iF_p[0] + nor.
y * iF_p[3] + nor.
z * iF_p[6]) + she.y * (nor.
x * iF_p[1] + nor.
y * iF_p[4] + nor.
z * iF_p[7]) + she.z * (nor.
x * iF_p[2] + nor.
y * iF_p[5] + nor.
z * iF_p[8]);
426 QiFpQT[8] = nor.
x * (nor.
x * iF_p[0] + nor.
y * iF_p[3] + nor.
z * iF_p[6]) + nor.
y * (nor.
x * iF_p[1] + nor.
y * iF_p[4] + nor.
z * iF_p[7]) + nor.
z * (nor.
x * iF_p[2] + nor.
y * iF_p[5] + nor.
z * iF_p[8]);
428 QFnQT[0] = fib.
x * (fib.
x * F_n[0] + fib.
y * F_n[3] + fib.
z * F_n[6]) + fib.
y * (fib.
x * F_n[1] + fib.
y * F_n[4] + fib.
z * F_n[7]) + fib.
z * (fib.
x * F_n[2] + fib.
y * F_n[5] + fib.
z * F_n[8]);
429 QFnQT[1] = she.x * (fib.
x * F_n[0] + fib.
y * F_n[3] + fib.
z * F_n[6]) + she.y * (fib.
x * F_n[1] + fib.
y * F_n[4] + fib.
z * F_n[7]) + she.z * (fib.
x * F_n[2] + fib.
y * F_n[5] + fib.
z * F_n[8]);
430 QFnQT[2] = nor.
x * (fib.
x * F_n[0] + fib.
y * F_n[3] + fib.
z * F_n[6]) + nor.
y * (fib.
x * F_n[1] + fib.
y * F_n[4] + fib.
z * F_n[7]) + nor.
z * (fib.
x * F_n[2] + fib.
y * F_n[5] + fib.
z * F_n[8]);
431 QFnQT[3] = fib.
x * (she.x * F_n[0] + she.y * F_n[3] + she.z * F_n[6]) + fib.
y * (she.x * F_n[1] + she.y * F_n[4] + she.z * F_n[7]) + fib.
z * (she.x * F_n[2] + she.y * F_n[5] + she.z * F_n[8]);
432 QFnQT[4] = she.x * (she.x * F_n[0] + she.y * F_n[3] + she.z * F_n[6]) + she.y * (she.x * F_n[1] + she.y * F_n[4] + she.z * F_n[7]) + she.z * (she.x * F_n[2] + she.y * F_n[5] + she.z * F_n[8]);
433 QFnQT[5] = nor.
x * (she.x * F_n[0] + she.y * F_n[3] + she.z * F_n[6]) + nor.
y * (she.x * F_n[1] + she.y * F_n[4] + she.z * F_n[7]) + nor.
z * (she.x * F_n[2] + she.y * F_n[5] + she.z * F_n[8]);
434 QFnQT[6] = fib.
x * (nor.
x * F_n[0] + nor.
y * F_n[3] + nor.
z * F_n[6]) + fib.
y * (nor.
x * F_n[1] + nor.
y * F_n[4] + nor.
z * F_n[7]) + fib.
z * (nor.
x * F_n[2] + nor.
y * F_n[5] + nor.
z * F_n[8]);
435 QFnQT[7] = she.x * (nor.
x * F_n[0] + nor.
y * F_n[3] + nor.
z * F_n[6]) + she.y * (nor.
x * F_n[1] + nor.
y * F_n[4] + nor.
z * F_n[7]) + she.z * (nor.
x * F_n[2] + nor.
y * F_n[5] + nor.
z * F_n[8]);
436 QFnQT[8] = nor.
x * (nor.
x * F_n[0] + nor.
y * F_n[3] + nor.
z * F_n[6]) + nor.
y * (nor.
x * F_n[1] + nor.
y * F_n[4] + nor.
z * F_n[7]) + nor.
z * (nor.
x * F_n[2] + nor.
y * F_n[5] + nor.
z * F_n[8]);
438 QiFnQT[0] = fib.
x * (fib.
x * iF_n[0] + fib.
y * iF_n[3] + fib.
z * iF_n[6]) + fib.
y * (fib.
x * iF_n[1] + fib.
y * iF_n[4] + fib.
z * iF_n[7]) + fib.
z * (fib.
x * iF_n[2] + fib.
y * iF_n[5] + fib.
z * iF_n[8]);
439 QiFnQT[1] = she.x * (fib.
x * iF_n[0] + fib.
y * iF_n[3] + fib.
z * iF_n[6]) + she.y * (fib.
x * iF_n[1] + fib.
y * iF_n[4] + fib.
z * iF_n[7]) + she.z * (fib.
x * iF_n[2] + fib.
y * iF_n[5] + fib.
z * iF_n[8]);
440 QiFnQT[2] = nor.
x * (fib.
x * iF_n[0] + fib.
y * iF_n[3] + fib.
z * iF_n[6]) + nor.
y * (fib.
x * iF_n[1] + fib.
y * iF_n[4] + fib.
z * iF_n[7]) + nor.
z * (fib.
x * iF_n[2] + fib.
y * iF_n[5] + fib.
z * iF_n[8]);
441 QiFnQT[3] = fib.
x * (she.x * iF_n[0] + she.y * iF_n[3] + she.z * iF_n[6]) + fib.
y * (she.x * iF_n[1] + she.y * iF_n[4] + she.z * iF_n[7]) + fib.
z * (she.x * iF_n[2] + she.y * iF_n[5] + she.z * iF_n[8]);
442 QiFnQT[4] = she.x * (she.x * iF_n[0] + she.y * iF_n[3] + she.z * iF_n[6]) + she.y * (she.x * iF_n[1] + she.y * iF_n[4] + she.z * iF_n[7]) + she.z * (she.x * iF_n[2] + she.y * iF_n[5] + she.z * iF_n[8]);
443 QiFnQT[5] = nor.
x * (she.x * iF_n[0] + she.y * iF_n[3] + she.z * iF_n[6]) + nor.
y * (she.x * iF_n[1] + she.y * iF_n[4] + she.z * iF_n[7]) + nor.
z * (she.x * iF_n[2] + she.y * iF_n[5] + she.z * iF_n[8]);
444 QiFnQT[6] = fib.
x * (nor.
x * iF_n[0] + nor.
y * iF_n[3] + nor.
z * iF_n[6]) + fib.
y * (nor.
x * iF_n[1] + nor.
y * iF_n[4] + nor.
z * iF_n[7]) + fib.
z * (nor.
x * iF_n[2] + nor.
y * iF_n[5] + nor.
z * iF_n[8]);
445 QiFnQT[7] = she.x * (nor.
x * iF_n[0] + nor.
y * iF_n[3] + nor.
z * iF_n[6]) + she.y * (nor.
x * iF_n[1] + nor.
y * iF_n[4] + nor.
z * iF_n[7]) + she.z * (nor.
x * iF_n[2] + nor.
y * iF_n[5] + nor.
z * iF_n[8]);
446 QiFnQT[8] = nor.
x * (nor.
x * iF_n[0] + nor.
y * iF_n[3] + nor.
z * iF_n[6]) + nor.
y * (nor.
x * iF_n[1] + nor.
y * iF_n[4] + nor.
z * iF_n[7]) + nor.
z * (nor.
x * iF_n[2] + nor.
y * iF_n[5] + nor.
z * iF_n[8]);
448 constitutive_model->calc_PK1_stress(QiFpQT, QFpQT, detF_p, S_PK1_p);
449 constitutive_model->calc_PK1_stress(QiFnQT, QFnQT, detF_n, S_PK1_n);
451 if(param_globals::Ta.strength != 0)
457 double S_PK1_p_xyz[9], S_PK1_n_xyz[9];
458 S_PK1_p_xyz[0] = fib.
x * (fib.
x * S_PK1_p[0] + she.x * S_PK1_p[3] + nor.
x * S_PK1_p[6]) + she.x * (fib.
x * S_PK1_p[1] + she.x * S_PK1_p[4] + nor.
x * S_PK1_p[7]) + nor.
x * (fib.
x * S_PK1_p[2] + she.x * S_PK1_p[5] + nor.
x * S_PK1_p[8]);
459 S_PK1_p_xyz[1] = fib.
y * (fib.
x * S_PK1_p[0] + she.x * S_PK1_p[3] + nor.
x * S_PK1_p[6]) + she.y * (fib.
x * S_PK1_p[1] + she.x * S_PK1_p[4] + nor.
x * S_PK1_p[7]) + nor.
y * (fib.
x * S_PK1_p[2] + she.x * S_PK1_p[5] + nor.
x * S_PK1_p[8]);
460 S_PK1_p_xyz[2] = fib.
z * (fib.
x * S_PK1_p[0] + she.x * S_PK1_p[3] + nor.
x * S_PK1_p[6]) + she.z * (fib.
x * S_PK1_p[1] + she.x * S_PK1_p[4] + nor.
x * S_PK1_p[7]) + nor.
z * (fib.
x * S_PK1_p[2] + she.x * S_PK1_p[5] + nor.
x * S_PK1_p[8]);
461 S_PK1_p_xyz[3] = fib.
x * (fib.
y * S_PK1_p[0] + she.y * S_PK1_p[3] + nor.
y * S_PK1_p[6]) + she.x * (fib.
y * S_PK1_p[1] + she.y * S_PK1_p[4] + nor.
y * S_PK1_p[7]) + nor.
x * (fib.
y * S_PK1_p[2] + she.y * S_PK1_p[5] + nor.
y * S_PK1_p[8]);
462 S_PK1_p_xyz[4] = fib.
y * (fib.
y * S_PK1_p[0] + she.y * S_PK1_p[3] + nor.
y * S_PK1_p[6]) + she.y * (fib.
y * S_PK1_p[1] + she.y * S_PK1_p[4] + nor.
y * S_PK1_p[7]) + nor.
y * (fib.
y * S_PK1_p[2] + she.y * S_PK1_p[5] + nor.
y * S_PK1_p[8]);
463 S_PK1_p_xyz[5] = fib.
z * (fib.
y * S_PK1_p[0] + she.y * S_PK1_p[3] + nor.
y * S_PK1_p[6]) + she.z * (fib.
y * S_PK1_p[1] + she.y * S_PK1_p[4] + nor.
y * S_PK1_p[7]) + nor.
z * (fib.
y * S_PK1_p[2] + she.y * S_PK1_p[5] + nor.
y * S_PK1_p[8]);
464 S_PK1_p_xyz[6] = fib.
x * (fib.
z * S_PK1_p[0] + she.z * S_PK1_p[3] + nor.
z * S_PK1_p[6]) + she.x * (fib.
z * S_PK1_p[1] + she.z * S_PK1_p[4] + nor.
z * S_PK1_p[7]) + nor.
x * (fib.
z * S_PK1_p[2] + she.z * S_PK1_p[5] + nor.
z * S_PK1_p[8]);
465 S_PK1_p_xyz[7] = fib.
y * (fib.
z * S_PK1_p[0] + she.z * S_PK1_p[3] + nor.
z * S_PK1_p[6]) + she.y * (fib.
z * S_PK1_p[1] + she.z * S_PK1_p[4] + nor.
z * S_PK1_p[7]) + nor.
y * (fib.
z * S_PK1_p[2] + she.z * S_PK1_p[5] + nor.
z * S_PK1_p[8]);
466 S_PK1_p_xyz[8] = fib.
z * (fib.
z * S_PK1_p[0] + she.z * S_PK1_p[3] + nor.
z * S_PK1_p[6]) + she.z * (fib.
z * S_PK1_p[1] + she.z * S_PK1_p[4] + nor.
z * S_PK1_p[7]) + nor.
z * (fib.
z * S_PK1_p[2] + she.z * S_PK1_p[5] + nor.
z * S_PK1_p[8]);
468 S_PK1_n_xyz[0] = fib.
x * (fib.
x * S_PK1_n[0] + she.x * S_PK1_n[3] + nor.
x * S_PK1_n[6]) + she.x * (fib.
x * S_PK1_n[1] + she.x * S_PK1_n[4] + nor.
x * S_PK1_n[7]) + nor.
x * (fib.
x * S_PK1_n[2] + she.x * S_PK1_n[5] + nor.
x * S_PK1_n[8]);
469 S_PK1_n_xyz[1] = fib.
y * (fib.
x * S_PK1_n[0] + she.x * S_PK1_n[3] + nor.
x * S_PK1_n[6]) + she.y * (fib.
x * S_PK1_n[1] + she.x * S_PK1_n[4] + nor.
x * S_PK1_n[7]) + nor.
y * (fib.
x * S_PK1_n[2] + she.x * S_PK1_n[5] + nor.
x * S_PK1_n[8]);
470 S_PK1_n_xyz[2] = fib.
z * (fib.
x * S_PK1_n[0] + she.x * S_PK1_n[3] + nor.
x * S_PK1_n[6]) + she.z * (fib.
x * S_PK1_n[1] + she.x * S_PK1_n[4] + nor.
x * S_PK1_n[7]) + nor.
z * (fib.
x * S_PK1_n[2] + she.x * S_PK1_n[5] + nor.
x * S_PK1_n[8]);
471 S_PK1_n_xyz[3] = fib.
x * (fib.
y * S_PK1_n[0] + she.y * S_PK1_n[3] + nor.
y * S_PK1_n[6]) + she.x * (fib.
y * S_PK1_n[1] + she.y * S_PK1_n[4] + nor.
y * S_PK1_n[7]) + nor.
x * (fib.
y * S_PK1_n[2] + she.y * S_PK1_n[5] + nor.
y * S_PK1_n[8]);
472 S_PK1_n_xyz[4] = fib.
y * (fib.
y * S_PK1_n[0] + she.y * S_PK1_n[3] + nor.
y * S_PK1_n[6]) + she.y * (fib.
y * S_PK1_n[1] + she.y * S_PK1_n[4] + nor.
y * S_PK1_n[7]) + nor.
y * (fib.
y * S_PK1_n[2] + she.y * S_PK1_n[5] + nor.
y * S_PK1_n[8]);
473 S_PK1_n_xyz[5] = fib.
z * (fib.
y * S_PK1_n[0] + she.y * S_PK1_n[3] + nor.
y * S_PK1_n[6]) + she.z * (fib.
y * S_PK1_n[1] + she.y * S_PK1_n[4] + nor.
y * S_PK1_n[7]) + nor.
z * (fib.
y * S_PK1_n[2] + she.y * S_PK1_n[5] + nor.
y * S_PK1_n[8]);
474 S_PK1_n_xyz[6] = fib.
x * (fib.
z * S_PK1_n[0] + she.z * S_PK1_n[3] + nor.
z * S_PK1_n[6]) + she.x * (fib.
z * S_PK1_n[1] + she.z * S_PK1_n[4] + nor.
z * S_PK1_n[7]) + nor.
x * (fib.
z * S_PK1_n[2] + she.z * S_PK1_n[5] + nor.
z * S_PK1_n[8]);
475 S_PK1_n_xyz[7] = fib.
y * (fib.
z * S_PK1_n[0] + she.z * S_PK1_n[3] + nor.
z * S_PK1_n[6]) + she.y * (fib.
z * S_PK1_n[1] + she.z * S_PK1_n[4] + nor.
z * S_PK1_n[7]) + nor.
y * (fib.
z * S_PK1_n[2] + she.z * S_PK1_n[5] + nor.
z * S_PK1_n[8]);
476 S_PK1_n_xyz[8] = fib.
z * (fib.
z * S_PK1_n[0] + she.z * S_PK1_n[3] + nor.
z * S_PK1_n[6]) + she.z * (fib.
z * S_PK1_n[1] + she.z * S_PK1_n[4] + nor.
z * S_PK1_n[7]) + nor.
z * (fib.
z * S_PK1_n[2] + she.z * S_PK1_n[5] + nor.
z * S_PK1_n[8]);
479 double dv = w[iidx] * detJ;
482 for (std::size_t a = 0; a < nnodes; a++)
484 double sax = gshape[1][a], say = gshape[2][a], saz = gshape[3][a];
485 for(std::size_t k = 0; k < col_dpn; k++)
487 buff[i][3 * a + k] += dv/(2 * epsilon) * ((S_PK1_p_xyz[k] - S_PK1_n_xyz[k]) * sax
488 + (S_PK1_p_xyz[k + 3] - S_PK1_n_xyz[k + 3]) * say
489 + (S_PK1_p_xyz[k + 6] - S_PK1_n_xyz[k + 6]) * saz);
496 printf(
"\n vol: %g \n\n", vol);
497 buff.
disp(
"Element Matrix:");
515 buff.
assign(ndof, ndof, 0.0);
524 for(
int iidx=0; iidx < nint; iidx++)
532 double dx = w[iidx] * detj;
534 for (
int k = 0; k < ndof; k++) {
535 double sk = shape[0][k];
536 for (
int l = 0; l < ndof; l++) {
537 double sl = shape[0][l];
538 buff[k][l] += sk * sl * dx;
#define SF_MAX_ELEM_NODES
max #nodes defining an element
void assign(const dmat< S > &m)
copy a mtrix.
void set_size(const short irows, const short icols)
set the matrix dimensions
void disp(const char *name)
Comfort class. Provides getter functions to access the mesh member variables more comfortably.
Point fiber() const
Get element fiber direction.
void integration_points(const short order, Point *ip, double *w, int &nint) const
elem_t type() const
Getter function for the element type.
size_t element_index() const
Get currently selected element index.
bool has_sheet() const
Check if a sheet direction is present.
T num_nodes() const
Getter function for the number of nodes.
Point sheet() const
Get element sheet direction.
void zero_buff(double *buff, mesh_int_t nrows)
size_t size() const
The current size of the vector.
void operator()(const SF::element_view< mesh_int_t, mesh_real_t > &elem, double *buff)
Calculate internal force vector for a given element at each node.
void dpn(mesh_int_t &dpn)
return (by reference) the row and column dimensions
void dpn(mesh_int_t &row_dpn, mesh_int_t &col_dpn)
ACHTUNG: HIER AENDERUNG VON MIR.
void operator()(const SF::element_view< mesh_int_t, mesh_real_t > &elem, SF::dmat< double > &buff)
compute the element matrix for a given element.
void operator()(const SF::element_view< mesh_int_t, mesh_real_t > &elem, SF::dmat< double > &buff)
Calculate mech stiffness matrix for a given element at each node.
void dpn(mesh_int_t &row_dpn, mesh_int_t &col_dpn)
ACHTUNG: HIER AENDERUNG VON MIR.
centralize time managment and output triggering
#define EP_MAX_LPOINTS
maximum supported number of points in a local element
#define EP_MAX_IPOINTS
maximum supported number of integration points
void get_transformed_pts(const element_view< T, S > &view, Point *loc_pts, Point &trsf_fibre)
void invert_3x3(S *ele, S &det)
void shape_deriv(const double *iJ, const dmat< double > &rshape, const int ndof, dmat< double > &shape)
Compute shape derivatives for an element, based on the shape derivatives of the associated reference ...
double inner_prod(const Point &a, const Point &b)
void jacobian_matrix(const dmat< double > &rshape, const int npts, const Point *pts, double *J)
Compute Jacobian matrix from the real element to the reference element.
void get_transformed_upd_pts(const element_view< T, S > &view, Point *loc_pts, Point &trsf_fibre)
ACHTUNG: DAS WURDE VON MIR HINZUGEFÜGT.
void reference_shape(const elem_t type, const Point ip, dmat< double > &rshape)
Compute shape function and its derivatives on a reference element.
void invert_jacobian_matrix(const elem_t type, double *J, double &detJ)
timer_manager * tm_manager
a manager for the various physics timers
vec3< V > normalize(vec3< V > a)
Basic_constitutive_model * constitutive_model_setup(mechMat_t type, double *parameter_list)
vec3< V > cross(const vec3< V > &a, const vec3< V > &b)
void print_points(SF::Point *pts, int npts)
void log_msg(FILE_SPEC out, int level, unsigned char flag, const char *fmt,...)
int get_preferred_int_order(SF::elem_t &etype, int mat_type)
void apply_active_tension(double *deformation_gradient, double *Piola_Kirchhoff_1_stress)
Apply active tension.
void calc_deformation_gradient(const SF::element_view< mesh_int_t, mesh_real_t > &elem, int ipt, double *F, double *iF, double &detF, int index, double eps)
Calculate deformation gradient at a given integration point.
SF::vector< RegionSpecs > regions
array with region params
SF::vector< int > regionIDs
elemental region IDs (multiple tags are grouped in one region)
region based variations of arbitrary material parameters
physMaterial * material
material parameter description
mechMat_t mat_t
choose material model
physMat_t material_type
ID of physics material.