547 {
548 double cc1, cc2, cc3, sfd1, sfd2, sfd3, dN_dx1, dN_dx2, dN_dx3, f1, f2, f3;
549 double jac_det;
550 double a_inv[][dim_] = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}};
551 double force[][dim_] = {
552 {0.0, 0.0, 0.0},
553 {0.0, 0.0, 0.0},
554 {0.0, 0.0, 0.0},
555 {0.0, 0.0, 0.0},
556 {0.0, 0.0, 0.0},
557 {0.0, 0.0, 0.0},
558 {0.0, 0.0, 0.0},
559 {0.0, 0.0, 0.0}};
560 constexpr int dim_nodes = dim_ * num_nodes_;
561
562 for (int int_pt = 0; int_pt < num_int_pts_; int_pt++) {
563
564 double a[][dim_] = {{0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}, {0.0, 0.0, 0.0}};
565
566 for (int n = 0; n < num_nodes_; n++) {
567 cc1 = node_reference_coords(n, 0) + node_displacements(n, 0);
568 cc2 = node_reference_coords(n, 1) + node_displacements(n, 1);
569 cc3 = node_reference_coords(n, 2) + node_displacements(n, 2);
570 sfd1 = shape_fcn_deriv_[dim_nodes * int_pt + dim_ * n];
571 sfd2 = shape_fcn_deriv_[dim_nodes * int_pt + dim_ * n + 1];
572 sfd3 = shape_fcn_deriv_[dim_nodes * int_pt + dim_ * n + 2];
573 a[0][0] += cc1 * sfd1;
574 a[0][1] += cc1 * sfd2;
575 a[0][2] += cc1 * sfd3;
576 a[1][0] += cc2 * sfd1;
577 a[1][1] += cc2 * sfd2;
578 a[1][2] += cc2 * sfd3;
579 a[2][0] += cc3 * sfd1;
580 a[2][1] += cc3 * sfd2;
581 a[2][2] += cc3 * sfd3;
582 }
583
585
586 for (int node = 0; node < num_nodes_; node++) {
587 dN_dx1 = shape_fcn_deriv_[int_pt * dim_nodes + dim_ * node] * a_inv[0][0] +
588 shape_fcn_deriv_[int_pt * dim_nodes + dim_ * node + 1] * a_inv[1][0] +
589 shape_fcn_deriv_[int_pt * dim_nodes + dim_ * node + 2] * a_inv[2][0];
590
591 dN_dx2 = shape_fcn_deriv_[int_pt * dim_nodes + dim_ * node] * a_inv[0][1] +
592 shape_fcn_deriv_[int_pt * dim_nodes + dim_ * node + 1] * a_inv[1][1] +
593 shape_fcn_deriv_[int_pt * dim_nodes + dim_ * node + 2] * a_inv[2][1];
594
595 dN_dx3 = shape_fcn_deriv_[int_pt * dim_nodes + dim_ * node] * a_inv[0][2] +
596 shape_fcn_deriv_[int_pt * dim_nodes + dim_ * node + 1] * a_inv[1][2] +
597 shape_fcn_deriv_[int_pt * dim_nodes + dim_ * node + 2] * a_inv[2][2];
598
599 f1 = dN_dx1 * int_pt_stresses(int_pt,
K_S_XX_) + dN_dx2 * int_pt_stresses(int_pt,
K_S_YX_) +
600 dN_dx3 * int_pt_stresses(int_pt,
K_S_ZX_);
601
602 f2 = dN_dx1 * int_pt_stresses(int_pt,
K_S_XY_) + dN_dx2 * int_pt_stresses(int_pt,
K_S_YY_) +
603 dN_dx3 * int_pt_stresses(int_pt,
K_S_ZY_);
604
605 f3 = dN_dx1 * int_pt_stresses(int_pt,
K_S_XZ_) + dN_dx2 * int_pt_stresses(int_pt,
K_S_YZ_) +
606 dN_dx3 * int_pt_stresses(int_pt,
K_S_ZZ_);
607
608 f1 *= jac_det * int_wts_[int_pt];
609 f2 *= jac_det * int_wts_[int_pt];
610 f3 *= jac_det * int_wts_[int_pt];
611
612
613
614 force[node][0] -= f1;
615 force[node][1] -= f2;
616 force[node][2] -= f3;
617 }
618 }
619
620 for (int node = 0; node < num_nodes_; node++) {
621 node_forces(node, 0) = force[node][0];
622 node_forces(node, 1) = force[node][1];
623 node_forces(node, 2) = force[node][2];
624 }
625 }
const int K_S_ZX_
Definition nimble_element.h:208
const int K_S_YZ_
Definition nimble_element.h:207
const int K_S_XZ_
Definition nimble_element.h:211
const int K_S_YY_
Definition nimble_element.h:204
const int K_S_XY_
Definition nimble_element.h:206
const int K_S_ZY_
Definition nimble_element.h:210
const int K_S_YX_
Definition nimble_element.h:209
const int K_S_ZZ_
Definition nimble_element.h:205
const int K_S_XX_
Definition nimble_element.h:203