24 GradientVectorType
const& grad_u,
26 const bool is_axially_symmetric)
28 static_assert(0 < DisplacementDim && DisplacementDim <= 3,
29 "NonLinearBMatrix::computeBMatrix: DisplacementDim must be "
32 BMatrixType B = BMatrixType::Zero(
34 NPOINTS * DisplacementDim);
36 switch (DisplacementDim)
39 for (
int i = 0; i < NPOINTS; ++i)
41 B(0, i) = dNdx(0, i) * grad_u[0];
42 B(1, i) = dNdx(1, i) * grad_u[1];
43 B(2, i) = dNdx(2, i) * grad_u[2];
45 B(0, NPOINTS + i) = dNdx(0, i) * grad_u[3];
46 B(1, NPOINTS + i) = dNdx(1, i) * grad_u[4];
47 B(2, NPOINTS + i) = dNdx(2, i) * grad_u[5];
49 B(0, 2 * NPOINTS + i) = dNdx(0, i) * grad_u[6];
50 B(1, 2 * NPOINTS + i) = dNdx(1, i) * grad_u[7];
51 B(2, 2 * NPOINTS + i) = dNdx(2, i) * grad_u[8];
53 B(3, i) = (dNdx(1, i) * grad_u[0] + dNdx(0, i) * grad_u[1]) /
55 B(4, i) = (dNdx(2, i) * grad_u[1] + dNdx(1, i) * grad_u[2]) /
57 B(5, i) = (dNdx(2, i) * grad_u[0] + dNdx(0, i) * grad_u[2]) /
61 (dNdx(1, i) * grad_u[3] + dNdx(0, i) * grad_u[4]) /
64 (dNdx(2, i) * grad_u[4] + dNdx(1, i) * grad_u[5]) /
67 (dNdx(2, i) * grad_u[3] + dNdx(0, i) * grad_u[5]) /
70 B(3, 2 * NPOINTS + i) =
71 (dNdx(1, i) * grad_u[6] + dNdx(0, i) * grad_u[7]) /
73 B(4, 2 * NPOINTS + i) =
74 (dNdx(2, i) * grad_u[7] + dNdx(1, i) * grad_u[8]) /
76 B(5, 2 * NPOINTS + i) =
77 (dNdx(2, i) * grad_u[6] + dNdx(0, i) * grad_u[8]) /
82 for (
int i = 0; i < NPOINTS; ++i)
84 B(0, i) = dNdx(0, i) * grad_u[0];
85 B(1, i) = dNdx(1, i) * grad_u[1];
88 B(0, NPOINTS + i) = dNdx(0, i) * grad_u[2];
89 B(1, NPOINTS + i) = dNdx(1, i) * grad_u[3];
92 B(3, i) = (dNdx(1, i) * grad_u[0] + dNdx(0, i) * grad_u[1]) /
95 (dNdx(1, i) * grad_u[2] + dNdx(0, i) * grad_u[3]) /
98 if (is_axially_symmetric)
100 for (
int i = 0; i < NPOINTS; ++i)
102 B(2, i) = grad_u[4] * N[i] / radius;