1249 {
1251
1252 if (
dAta.
tEts.find(getNumeredEntFiniteElementPtr()->getEnt()) ==
1255 }
1256
1257
1258 if (row_type != MBVERTEX)
1260
1262 if (nb_dofs == 0)
1264
1265 try {
1266
1277 for (
int dd = 0;
dd < 3;
dd++) {
1280 }
1281
1282 int nb_gauss_pts = row_data.
getN().size1();
1286
1287 int nb_active_vars = 0;
1288 for (int gg = 0; gg < nb_gauss_pts; gg++) {
1289
1290 if (gg == 0) {
1291
1293
1294 for (int nn1 = 0; nn1 < 3; nn1++) {
1297 [gg][nn1];
1298 nb_active_vars++;
1299 }
1300
1301 for (int nn1 = 0; nn1 < 3; nn1++) {
1304 nb_active_vars++;
1305 }
1306 for (int nn1 = 0; nn1 < 3; nn1++) {
1307 for (int nn2 = 0; nn2 < 3; nn2++) {
1310 nn1, nn2);
1311 nb_active_vars++;
1312 }
1313 }
1314 for (int nn1 = 0; nn1 < 3; nn1++) {
1315 for (int nn2 = 0; nn2 < 3; nn2++) {
1318 nn2);
1319 nb_active_vars++;
1321 if (nn1 == nn2) {
1323 }
1324 }
1325 }
1326 }
1328 for (int nn1 = 0; nn1 < 3; nn1++) {
1329 for (int nn2 = 0; nn2 < 3; nn2++) {
1332 nn2);
1333 nb_active_vars++;
1334 }
1335 }
1336 }
1338 detH = 1;
1341 }
1343
1347
1349
1352 auto t_invH =
1357
1361
1362 t_F(
i,
j) = t_h(
i,
k) * t_invH(
k,
j);
1363 t_G(
i,
j) = t_g(
i,
k) * t_invH(
k,
j);
1364 t_a_T(
i) = t_F(
k,
i) * t_a(
k) + t_G(
k,
i) * t_v(
k);
1366 t_a_T(
i) = -rho0 * detH;
1367
1369 for (int nn = 0; nn < 3; nn++) {
1371 }
1372 trace_off();
1373 }
1374
1375 active.resize(nb_active_vars);
1376 int aa = 0;
1377 for (int nn1 = 0; nn1 < 3; nn1++) {
1381 }
1382
1383 for (int nn1 = 0; nn1 < 3; nn1++) {
1386 }
1387 for (int nn1 = 0; nn1 < 3; nn1++) {
1388 for (int nn2 = 0; nn2 < 3; nn2++) {
1391 nn2);
1392 }
1393 }
1394 for (int nn1 = 0; nn1 < 3; nn1++) {
1395 for (int nn2 = 0; nn2 < 3; nn2++) {
1399 nn1, nn2) +
1400 1;
1401 } else {
1404 nn2);
1405 }
1406 }
1407 }
1409 for (int nn1 = 0; nn1 < 3; nn1++) {
1410 for (int nn2 = 0; nn2 < 3; nn2++) {
1413 nn2);
1414 }
1415 }
1416 }
1417
1420 if (gg > 0) {
1421 res.resize(3);
1423 r = ::function(
tAg, 3, nb_active_vars, &
active[0], &res[0]);
1424 if (r != 3) {
1426 "ADOL-C function evaluation with error r = %d", r);
1427 }
1428 }
1429 double val = getVolume() * getGaussPts()(3, gg);
1430 res *= val;
1431 } else {
1434 for (int nn1 = 0; nn1 < 3; nn1++) {
1436 }
1438 r = jacobian(
tAg, 3, nb_active_vars, &
active[0],
1440 if (r != 3) {
1442 "ADOL-C function evaluation with error");
1443 }
1444 double val = getVolume() * getGaussPts()(3, gg);
1446 }
1447 }
1448
1449 } catch (const std::exception &ex) {
1450 std::ostringstream ss;
1451 ss << "throw in method: " << ex.what() << std::endl;
1453 }
1454
1456}
#define MoFEMFunctionReturnHot(a)
Last executable line of each PETSc function used for error handling. Replaces return()
@ MOFEM_OPERATION_UNSUCCESSFUL
@ MOFEM_DATA_INCONSISTENCY
#define CHKERR
Inline error check.
#define MoFEMFunctionBeginHot
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
FTensor::Index< 'i', SPACE_DIM > i
FTensor::Index< 'j', 3 > j
FTensor::Index< 'k', 3 > k
const Tensor2_symmetric_Expr< const ddTensor0< T, Dim, i, j >, typename promote< T, double >::V, Dim, i, j > dd(const Tensor0< T * > &a, const Index< i, Dim > index1, const Index< j, Dim > index2, const Tensor1< int, Dim > &d_ijk, const Tensor1< double, Dim > &d_xyz)
ublas::matrix< T, ublas::row_major, ublas::bounded_array< T, N > > MatrixBoundedArray
MoFEMErrorCode invertTensor3by3(ublas::matrix< T, L, A > &jac_data, ublas::vector< T, A > &det_data, ublas::matrix< T, L, A > &inv_jac_data)
Calculate inverse of tensor rank 2 at integration points.
static auto determinantTensor3by3(T &t)
Calculate the determinant of a 3x3 matrix or a tensor of rank 2.
Range tEts
elements in block set
double rho0
reference density
std::vector< std::vector< double * > > jacTRowPtr
std::map< std::string, std::vector< VectorDouble > > dataAtGaussPts
std::vector< VectorDouble > valT
std::map< std::string, std::vector< MatrixDouble > > gradAtGaussPts
std::vector< MatrixDouble > jacT
VectorBoundedArray< adouble, 3 > a
MatrixBoundedArray< adouble, 9 > h
MatrixBoundedArray< adouble, 9 > g
MatrixBoundedArray< adouble, 9 > invH
MatrixBoundedArray< adouble, 9 > F
MatrixBoundedArray< adouble, 9 > H
MatrixBoundedArray< adouble, 9 > G
VectorBoundedArray< adouble, 3 > a_T
VectorBoundedArray< adouble, 3 > v
MatrixDouble & getN(const FieldApproximationBase base)
get base functions this return matrix (nb. of rows is equal to nb. of Gauss pts, nb....
const VectorInt & getIndices() const
Get global indices of degrees of freedom on entity.