10 const std::string row_field_name,
const std::string col_field_name,
11 boost::shared_ptr<CommonData> common_data_ptr,
12 boost::shared_ptr<MatrixDouble> m_D_ptr)
15 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {
22 &mat(2 * rr + 0, 0), &mat(2 * rr + 0, 1), &mat(2 * rr + 0, 2),
23 &mat(2 * rr + 1, 0), &mat(2 * rr + 1, 1), &mat(2 * rr + 1, 2)};
29 &mat(3 * rr + 0, 0), &mat(3 * rr + 0, 1), &mat(3 * rr + 0, 2),
30 &mat(3 * rr + 0, 3), &mat(3 * rr + 0, 4), &mat(3 * rr + 0, 5),
32 &mat(3 * rr + 1, 0), &mat(3 * rr + 1, 1), &mat(3 * rr + 1, 2),
33 &mat(3 * rr + 1, 3), &mat(3 * rr + 1, 4), &mat(3 * rr + 1, 5),
35 &mat(3 * rr + 2, 0), &mat(3 * rr + 2, 1), &mat(3 * rr + 2, 2),
36 &mat(3 * rr + 2, 3), &mat(3 * rr + 2, 4), &mat(3 * rr + 2, 5)};
40 EntitiesFieldData::EntData &row_data,
41 EntitiesFieldData::EntData &col_data) {
46 const size_t nb_integration_pts = row_data.getN().size1();
47 const size_t nb_row_base_functions = row_data.getN().size2();
49 auto t_D = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM, 0>(*
mDPtr);
53 t_DL(
i,
j,
L) = t_D(
i,
j,
k,
l) * t_L(
k,
l,
L);
55 auto t_w = getFTensor0IntegrationWeight();
56 auto t_row_diff_base = row_data.getFTensor1DiffN<
SPACE_DIM>();
57 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
58 double alpha = getMeasure() * t_w;
68 t_tmp(
i,
L) = (t_DL(
i,
j,
L)) * (alpha * t_row_diff_base(
j));
70 auto t_col_base = col_data.getFTensor0N(gg, 0);
73 t_mat(
i,
L) -= (t_col_base * t_tmp(
i,
L));
82 for (; rr < nb_row_base_functions; ++rr)
91 const std::string row_field_name,
const std::string col_field_name,
92 boost::shared_ptr<CommonData> common_data_ptr,
93 boost::shared_ptr<MatrixDouble> m_D_ptr)
96 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {
102 EntitiesFieldData::EntData &col_data) {
107 const size_t nb_integration_pts = getGaussPts().size2();
108 const size_t nb_row_base_functions = row_data.getN().size2();
110 auto t_res_flow_dstrain = getFTensor4DdgFromMat<SPACE_DIM, SPACE_DIM>(
114 ++t_res_flow_dstrain;
123 auto t_w = getFTensor0IntegrationWeight();
124 auto t_row_base = row_data.getFTensor0N();
125 for (
size_t gg = 0; gg != nb_integration_pts; ++gg) {
127 double alpha = getMeasure() * t_w;
130 t_res_tens(
L,
i,
j) =
131 alpha * ((t_L(
m,
n,
L) * (t_res_flow_dstrain(
m,
n,
k,
l))) *
132 t_diff_grad(
k,
l,
i,
j));
139 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
141 t_mat(
L,
l) += t_row_base * (t_res_tens(
L,
l,
k) * t_col_diff_base(
k));
148 for (; rr < nb_row_base_functions; ++rr)
156 const std::string row_field_name,
const std::string col_field_name,
157 boost::shared_ptr<CommonData> common_data_ptr,
158 boost::shared_ptr<MatrixDouble> m_D_ptr)
161 commonDataPtr(common_data_ptr), mDPtr(m_D_ptr) {
167 EntitiesFieldData::EntData &col_data) {
172 const auto nb_integration_pts = getGaussPts().size2();
173 const auto nb_row_base_functions = row_data.getN().size2();
176 getFTensor2SymmetricFromMat<SPACE_DIM>(
commonDataPtr->resCdStrain);
183 auto get_mat_scalar_dvector = [&]() {
192 auto t_w = getFTensor0IntegrationWeight();
193 auto t_row_base = row_data.getFTensor0N();
194 for (
auto gg = 0; gg != nb_integration_pts; ++gg) {
195 double alpha = getMeasure() * t_w;
200 ((t_c_dstrain(
k,
l)) * t_diff_grad_symmetrise(
k,
l,
i,
j));
203 auto t_mat = get_mat_scalar_dvector();
206 const double row_base = alpha * t_row_base;
207 auto t_col_diff_base = col_data.getFTensor1DiffN<
SPACE_DIM>(gg, 0);
209 t_mat(
i) += row_base * (t_res_mat(
i,
j) * t_col_diff_base(
j));
215 for (; rr != nb_row_base_functions; ++rr)
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
FTensor::Index< 'j', SPACE_DIM > j
FTensor::Index< 'L', size_symm > L
FTensor::Index< 'l', SPACE_DIM > l
FTensor::Index< 'k', SPACE_DIM > k
FTensor::Index< 'i', SPACE_DIM > i
[Common data]
FTensor::Index< 'm', SPACE_DIM > m
static FTensor::Tensor2< FTensor::PackPtr< double *, 3 >, 2, 3 > get_mat_vector_dtensor_sym(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
FTensor::Index< 'n', SPACE_DIM > n
static auto get_mat_tensor_sym_dvector(size_t rr, MatrixDouble &mat, FTensor::Number< 2 >)
[Lambda functions]
int nbRows
number of dofs on rows
MatrixDouble locMat
local entity block matrix
int nbCols
number if dof on column
OpCalculateConstraintsLhs_dU(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
boost::shared_ptr< CommonData > commonDataPtr
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
OpCalculatePlasticFlowLhs_dU(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
boost::shared_ptr< CommonData > commonDataPtr
OpCalculatePlasticInternalForceLhs_dEP(const std::string row_field_name, const std::string col_field_name, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< MatrixDouble > m_D_ptr)
MoFEMErrorCode iNtegrate(EntitiesFieldData::EntData &row_data, EntitiesFieldData::EntData &col_data)
boost::shared_ptr< MatrixDouble > mDPtr