13fe::B::B(
const std::vector<std::vector<double>> &dNdx,
int dim)
14 : d_dim(dim), d_nStrain(dim == 2 ? 3 : (dim == 3 ? 6 : 1)),
15 d_nDof(dim * static_cast<int>(dNdx.size())),
16 d_data(static_cast<size_t>(d_nStrain * d_nDof), 0.) {
17 const int n =
static_cast<int>(dNdx.size());
18 for (
int a = 0; a < n; a++) {
19 const auto &dN = dNdx[a];
20 const int c =
dim * a;
21 auto set = [&](
int i,
int j,
double v) {
d_data[i *
d_nDof + j] = v; };
28 set(2, c, 0.5 * dN[1]);
29 set(2, c + 1, 0.5 * dN[0]);
33 set(3, c + 1, 0.5 * dN[2]);
34 set(3, c + 2, 0.5 * dN[1]);
35 set(4, c, 0.5 * dN[2]);
36 set(4, c + 2, 0.5 * dN[0]);
37 set(5, c, 0.5 * dN[1]);
38 set(5, c + 1, 0.5 * dN[0]);