|
| v0.14.0
|
#include <users_modules/eshelbian_plasticit/src/EshelbianPlasticity.hpp>
|
| OpSpatialPhysical_du_du (const std::string &row_field, const std::string &col_field, boost::shared_ptr< DataAtIntegrationPts > &data_ptr, const double alpha) |
|
MoFEMErrorCode | integrate (EntData &row_data, EntData &col_data) |
|
MoFEMErrorCode | integratePiola (EntData &row_data, EntData &col_data) |
|
MoFEMErrorCode | integrateHencky (EntData &row_data, EntData &col_data) |
|
MoFEMErrorCode | integratePolyconvexHencky (EntData &row_data, EntData &col_data) |
|
| OpAssembleVolume (const std::string &field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type) |
|
| OpAssembleVolume (const std::string &row_field, const std::string &col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type, const bool assemble_symmetry) |
|
| OpAssembleBasic (const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type) |
|
| OpAssembleBasic (const std::string &row_field, const std::string &col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type, const bool assemble_symmetry, ScaleOff scale_off=[]() { return 1;}) |
|
virtual MoFEMErrorCode | integrate (EntData &data) |
|
virtual MoFEMErrorCode | integrate (int row_side, EntityType row_type, EntData &data) |
|
virtual MoFEMErrorCode | assemble (EntData &data) |
|
virtual MoFEMErrorCode | assemble (int row_side, EntityType row_type, EntData &data) |
|
virtual MoFEMErrorCode | assemble (int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data) |
|
MoFEMErrorCode | doWork (int side, EntityType type, EntData &data) |
|
MoFEMErrorCode | doWork (int row_side, int col_side, EntityType row_type, EntityType col_type, EntData &row_data, EntData &col_data) |
|
Definition at line 667 of file EshelbianPlasticity.hpp.
◆ OpSpatialPhysical_du_du()
EshelbianPlasticity::OpSpatialPhysical_du_du::OpSpatialPhysical_du_du |
( |
const std::string & |
row_field, |
|
|
const std::string & |
col_field, |
|
|
boost::shared_ptr< DataAtIntegrationPts > & |
data_ptr, |
|
|
const double |
alpha |
|
) |
| |
|
inline |
◆ integrate()
◆ integrateHencky()
Definition at line 1441 of file EshelbianOperators.cpp.
1450 int nb_integration_pts = row_data.
getN().size1();
1451 int row_nb_dofs = row_data.
getIndices().size();
1452 int col_nb_dofs = col_data.
getIndices().size();
1458 &
m(
r + 0,
c + 0), &
m(
r + 0,
c + 1), &
m(
r + 0,
c + 2), &
m(
r + 0,
c + 3),
1459 &
m(
r + 0,
c + 4), &
m(
r + 0,
c + 5),
1461 &
m(
r + 1,
c + 0), &
m(
r + 1,
c + 1), &
m(
r + 1,
c + 2), &
m(
r + 1,
c + 3),
1462 &
m(
r + 1,
c + 4), &
m(
r + 1,
c + 5),
1464 &
m(
r + 2,
c + 0), &
m(
r + 2,
c + 1), &
m(
r + 2,
c + 2), &
m(
r + 2,
c + 3),
1465 &
m(
r + 2,
c + 4), &
m(
r + 2,
c + 5),
1467 &
m(
r + 3,
c + 0), &
m(
r + 3,
c + 1), &
m(
r + 3,
c + 2), &
m(
r + 3,
c + 3),
1468 &
m(
r + 3,
c + 4), &
m(
r + 3,
c + 5),
1470 &
m(
r + 4,
c + 0), &
m(
r + 4,
c + 1), &
m(
r + 4,
c + 2), &
m(
r + 4,
c + 3),
1471 &
m(
r + 4,
c + 4), &
m(
r + 4,
c + 5),
1473 &
m(
r + 5,
c + 0), &
m(
r + 5,
c + 1), &
m(
r + 5,
c + 2), &
m(
r + 5,
c + 3),
1474 &
m(
r + 5,
c + 4), &
m(
r + 5,
c + 5)
1485 auto v = getVolume();
1486 auto t_w = getFTensor0IntegrationWeight();
1488 auto t_approx_P_adjont_dstretch =
1489 getFTensor2FromMat<3, 3>(
dataAtPts->adjointPdstretchAtPts);
1490 auto t_eigen_vals = getFTensor1FromMat<3>(
dataAtPts->eigenVals);
1491 auto t_eigen_vecs = getFTensor2FromMat<3, 3>(
dataAtPts->eigenVecs);
1494 int row_nb_base_functions = row_data.
getN().size2();
1497 auto get_dP = [&]() {
1499 auto ts_a = getTSa();
1501 auto t_D = getFTensor4DdgFromMat<3, 3, 0>(
dataAtPts->matD);
1503 t_dP_tmp(
L,
J) = -(1 +
alphaU * ts_a) *
1505 ((t_D(
i,
j,
m,
n) * t_diff(
m,
n,
k,
l)) * t_L(
k,
l,
J)));
1509 auto t_approx_P_adjont_dstretch =
1510 getFTensor2FromMat<3, 3>(
dataAtPts->adjointPdstretchAtPts);
1511 auto t_eigen_vals = getFTensor1FromMat<3>(
dataAtPts->eigenVals);
1512 auto t_eigen_vecs = getFTensor2FromMat<3, 3>(
dataAtPts->eigenVecs);
1515 auto t_dP = getFTensor2FromMat<size_symm, size_symm>(
dP);
1516 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
1521 t_sym(
i,
j) = (t_approx_P_adjont_dstretch(
i,
j) ||
1522 t_approx_P_adjont_dstretch(
j,
i));
1527 t_dP(
L,
J) = t_L(
i,
j,
L) *
1528 ((t_diff2_uP2(
i,
j,
k,
l) + t_diff2_uP2(
k,
l,
i,
j)) *
1534 ++t_approx_P_adjont_dstretch;
1539 auto t_dP = getFTensor2FromMat<size_symm, size_symm>(
dP);
1540 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
1541 t_dP(
L,
J) = t_dP_tmp(
L,
J);
1546 return getFTensor2FromMat<size_symm, size_symm>(
dP);
1549 auto t_dP = get_dP();
1550 for (
int gg = 0; gg != nb_integration_pts; ++gg) {
1554 for (; rr != row_nb_dofs / 6; ++rr) {
1556 auto t_m = get_ftensor2(
K, 6 * rr, 0);
1557 for (
int cc = 0; cc != col_nb_dofs / 6; ++cc) {
1558 const double b =
a * t_row_base_fun * t_col_base_fun;
1559 t_m(
L,
J) += b * t_dP(
L,
J);
1566 for (; rr != row_nb_base_functions; ++rr) {
◆ integratePiola()
Definition at line 1744 of file EshelbianOperators.cpp.
1753 int nb_integration_pts = row_data.
getN().size1();
1754 int row_nb_dofs = row_data.
getIndices().size();
1755 int col_nb_dofs = col_data.
getIndices().size();
1761 &
m(
r + 0,
c + 0), &
m(
r + 0,
c + 1), &
m(
r + 0,
c + 2), &
m(
r + 0,
c + 3),
1762 &
m(
r + 0,
c + 4), &
m(
r + 0,
c + 5),
1764 &
m(
r + 1,
c + 0), &
m(
r + 1,
c + 1), &
m(
r + 1,
c + 2), &
m(
r + 1,
c + 3),
1765 &
m(
r + 1,
c + 4), &
m(
r + 1,
c + 5),
1767 &
m(
r + 2,
c + 0), &
m(
r + 2,
c + 1), &
m(
r + 2,
c + 2), &
m(
r + 2,
c + 3),
1768 &
m(
r + 2,
c + 4), &
m(
r + 2,
c + 5),
1770 &
m(
r + 3,
c + 0), &
m(
r + 3,
c + 1), &
m(
r + 3,
c + 2), &
m(
r + 3,
c + 3),
1771 &
m(
r + 3,
c + 4), &
m(
r + 3,
c + 5),
1773 &
m(
r + 4,
c + 0), &
m(
r + 4,
c + 1), &
m(
r + 4,
c + 2), &
m(
r + 4,
c + 3),
1774 &
m(
r + 4,
c + 4), &
m(
r + 4,
c + 5),
1776 &
m(
r + 5,
c + 0), &
m(
r + 5,
c + 1), &
m(
r + 5,
c + 2), &
m(
r + 5,
c + 3),
1777 &
m(
r + 5,
c + 4), &
m(
r + 5,
c + 5)
1788 auto v = getVolume();
1789 auto t_w = getFTensor0IntegrationWeight();
1791 auto get_dP = [&]() {
1793 auto ts_a = getTSa();
1795 auto t_P = getFTensor2FromMat<3, 3>(
dataAtPts->PAtPts);
1796 auto r_P_du = getFTensor4FromMat<3, 3, 3, 3>(
dataAtPts->P_du);
1797 auto t_approx_P_adjont_dstretch =
1798 getFTensor2FromMat<3, 3>(
dataAtPts->adjointPdstretchAtPts);
1800 getFTensor2SymmetricFromMat<3>(
dataAtPts->logStretchDotTensorAtPts);
1801 auto t_u = getFTensor2SymmetricFromMat<3>(
dataAtPts->stretchTensorAtPts);
1803 getFTensor4DdgFromMat<3, 3, 1>(
dataAtPts->diffStretchTensorAtPts);
1804 auto t_eigen_vals = getFTensor1FromMat<3>(
dataAtPts->eigenVals);
1805 auto t_eigen_vecs = getFTensor2FromMat<3, 3>(
dataAtPts->eigenVecs);
1808 auto t_dP = getFTensor2FromMat<size_symm, size_symm>(
dP);
1809 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
1812 t_deltaP(
i,
j) = t_approx_P_adjont_dstretch(
i,
j) - t_P(
i,
j);
1815 t_Ldiff_u(
i,
j,
L) = t_diff_u(
i,
j,
m,
n) * t_L(
m,
n,
L);
1817 -t_Ldiff_u(
i,
j,
L) * (r_P_du(
i,
j,
k,
l) * t_Ldiff_u(
k,
l,
J));
1820 (t_L(
i,
j,
L) * (t_diff(
i,
j,
k,
l) * t_L(
k,
l,
J)));
1824 t_deltaP_sym(
i,
j) = (t_deltaP(
i,
j) || t_deltaP(
j,
i));
1825 t_deltaP_sym(
i,
j) /= 2.0;
1829 t_dP(
L,
J) += t_L(
i,
j,
L) * (t_diff2_uP2(
i,
j,
k,
l) * t_L(
k,
l,
J));
1835 ++t_approx_P_adjont_dstretch;
1843 return getFTensor2FromMat<size_symm, size_symm>(
dP);
1846 int row_nb_base_functions = row_data.
getN().size2();
1849 auto t_dP = get_dP();
1850 for (
int gg = 0; gg != nb_integration_pts; ++gg) {
1854 for (; rr != row_nb_dofs / 6; ++rr) {
1856 auto t_m = get_ftensor2(
K, 6 * rr, 0);
1857 for (
int cc = 0; cc != col_nb_dofs / 6; ++cc) {
1858 const double b =
a * t_row_base_fun * t_col_base_fun;
1859 t_m(
L,
J) += b * t_dP(
L,
J);
1866 for (; rr != row_nb_base_functions; ++rr) {
◆ integratePolyconvexHencky()
Definition at line 1577 of file EshelbianOperators.cpp.
1586 int nb_integration_pts = row_data.
getN().size1();
1587 int row_nb_dofs = row_data.
getIndices().size();
1588 int col_nb_dofs = col_data.
getIndices().size();
1594 &
m(
r + 0,
c + 0), &
m(
r + 0,
c + 1), &
m(
r + 0,
c + 2), &
m(
r + 0,
c + 3),
1595 &
m(
r + 0,
c + 4), &
m(
r + 0,
c + 5),
1597 &
m(
r + 1,
c + 0), &
m(
r + 1,
c + 1), &
m(
r + 1,
c + 2), &
m(
r + 1,
c + 3),
1598 &
m(
r + 1,
c + 4), &
m(
r + 1,
c + 5),
1600 &
m(
r + 2,
c + 0), &
m(
r + 2,
c + 1), &
m(
r + 2,
c + 2), &
m(
r + 2,
c + 3),
1601 &
m(
r + 2,
c + 4), &
m(
r + 2,
c + 5),
1603 &
m(
r + 3,
c + 0), &
m(
r + 3,
c + 1), &
m(
r + 3,
c + 2), &
m(
r + 3,
c + 3),
1604 &
m(
r + 3,
c + 4), &
m(
r + 3,
c + 5),
1606 &
m(
r + 4,
c + 0), &
m(
r + 4,
c + 1), &
m(
r + 4,
c + 2), &
m(
r + 4,
c + 3),
1607 &
m(
r + 4,
c + 4), &
m(
r + 4,
c + 5),
1609 &
m(
r + 5,
c + 0), &
m(
r + 5,
c + 1), &
m(
r + 5,
c + 2), &
m(
r + 5,
c + 3),
1610 &
m(
r + 5,
c + 4), &
m(
r + 5,
c + 5)
1621 auto v = getVolume();
1622 auto t_w = getFTensor0IntegrationWeight();
1624 int row_nb_base_functions = row_data.
getN().size2();
1627 auto get_dP = [&]() {
1629 auto ts_a = getTSa();
1631 auto t_D = getFTensor4DdgFromMat<3, 3, 0>(
dataAtPts->matD);
1633 constexpr
double nohat_k = 1. / 4;
1634 constexpr
double hat_k = 1. / 8;
1638 constexpr
double third = boost::math::constants::third<double>();
1642 auto t_approx_P_adjont_dstretch =
1643 getFTensor2FromMat<3, 3>(
dataAtPts->adjointPdstretchAtPts);
1644 auto t_log_streach_h1 =
1645 getFTensor2SymmetricFromMat<3>(
dataAtPts->logStretchTotalTensorAtPts);
1646 auto t_eigen_vals = getFTensor1FromMat<3>(
dataAtPts->eigenVals);
1647 auto t_eigen_vecs = getFTensor2FromMat<3, 3>(
dataAtPts->eigenVecs);
1650 auto t_dP = getFTensor2FromMat<size_symm, size_symm>(
dP);
1651 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
1653 double log_det = t_log_streach_h1(
i,
i);
1654 double log_det2 = log_det * log_det;
1656 t_dev(
i,
j) = t_log_streach_h1(
i,
j) -
t_kd(
i,
j) * (
third * log_det);
1657 double dev_norm2 = t_dev(
i,
j) * t_dev(
i,
j);
1659 auto A = 2 *
mu * std::exp(nohat_k * dev_norm2);
1660 auto B =
lambda * std::exp(hat_k * log_det2) * log_det;
1664 (
A * 2 * nohat_k) * (t_dev(
k,
l) * t_diff_deviator(
k,
l,
i,
j));
1665 t_B_diff(
i,
j) = (B * 2 * hat_k) * log_det *
t_kd(
i,
j) +
1669 t_A_diff(
i,
j) * (t_dev(
m,
n) * t_diff_deviator(
m,
n,
k,
l))
1673 A * t_diff_deviator(
m,
n,
i,
j) * t_diff_deviator(
m,
n,
k,
l)
1679 t_dP(
L,
J) = -t_L(
i,
j,
L) *
1695 t_sym(
i,
j) = (t_approx_P_adjont_dstretch(
i,
j) ||
1696 t_approx_P_adjont_dstretch(
j,
i));
1701 t_dP(
L,
J) += t_L(
i,
j,
L) *
1702 ((t_diff2_uP2(
i,
j,
k,
l) + t_diff2_uP2(
k,
l,
i,
j)) *
1708 ++t_approx_P_adjont_dstretch;
1714 return getFTensor2FromMat<size_symm, size_symm>(
dP);
1717 auto t_dP = get_dP();
1718 for (
int gg = 0; gg != nb_integration_pts; ++gg) {
1722 for (; rr != row_nb_dofs / 6; ++rr) {
1724 auto t_m = get_ftensor2(
K, 6 * rr, 0);
1725 for (
int cc = 0; cc != col_nb_dofs / 6; ++cc) {
1726 const double b =
a * t_row_base_fun * t_col_base_fun;
1727 t_m(
L,
J) += b * t_dP(
L,
J);
1734 for (; rr != row_nb_base_functions; ++rr) {
◆ alphaU
const double EshelbianPlasticity::OpSpatialPhysical_du_du::alphaU |
◆ dP
MatrixDouble EshelbianPlasticity::OpSpatialPhysical_du_du::dP |
|
private |
◆ polyConvex
PetscBool EshelbianPlasticity::OpSpatialPhysical_du_du::polyConvex = PETSC_FALSE |
|
private |
The documentation for this struct was generated from the following files:
#define CHK_MOAB_THROW(err, msg)
Check error code of MoAB function and throw MoFEM exception.
constexpr static auto size_symm
static boost::function< double(const double)> dd_f
MoFEMErrorCode integrateHencky(EntData &row_data, EntData &col_data)
UBlasMatrix< double > MatrixDouble
FTensor::Index< 'J', DIM1 > J
static boost::function< double(const double)> d_f
MoFEMErrorCode integratePolyconvexHencky(EntData &row_data, EntData &col_data)
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.
const double c
speed of light (cm/ns)
#define CHKERR
Inline error check.
static enum StretchSelector stretchSelector
static boost::function< double(const double)> f
const VectorInt & getIndices() const
Get global indices of dofs on entity.
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
auto diff_deviator(FTensor::Ddg< double, 3, 3 > &&t_diff_stress)
FTensor::Index< 'i', SPACE_DIM > i
const double v
phase velocity of light in medium (cm/ns)
MatrixDouble & getN(const FieldApproximationBase base)
get base functions this return matrix (nb. of rows is equal to nb. of Gauss pts, nb....
FTensor::Index< 'j', 3 > j
FTensor::Ddg< double, 3, 3 > getDiffDiffMat(Val< double, 3 > &t_val, Vec< double, 3 > &t_vec, Fun< double > f, Fun< double > d_f, Fun< double > dd_f, FTensor::Tensor2< double, 3, 3 > &t_S, const int nb)
FTensor::Index< 'm', 3 > m
Kronecker Delta class symmetric.
MoFEMErrorCode integratePiola(EntData &row_data, EntData &col_data)
OpAssembleVolume(const std::string &field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type)
FTensor::Index< 'k', 3 > k
MatrixDouble K
local tangent matrix
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
FTensor::Index< 'l', 3 > l
PetscErrorCode PetscOptionsGetBool(PetscOptions *, const char pre[], const char name[], PetscBool *bval, PetscBool *set)