|
| v0.14.0
|
|
| OpSpatialPhysical_du_du (std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha) |
|
MoFEMErrorCode | integrate (EntData &row_data, EntData &col_data) |
|
| OpAssembleVolume (const std::string &field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const char type) |
|
| OpAssembleVolume (std::string row_field, 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 (std::string row_field, 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 76 of file HMHNeohookean.cpp.
◆ OpSpatialPhysical_du_du()
EshelbianPlasticity::HMHNeohookean::OpSpatialPhysical_du_du::OpSpatialPhysical_du_du |
( |
std::string |
row_field, |
|
|
std::string |
col_field, |
|
|
boost::shared_ptr< DataAtIntegrationPts > |
data_ptr, |
|
|
const double |
alpha |
|
) |
| |
◆ integrate()
MoFEMErrorCode EshelbianPlasticity::HMHNeohookean::OpSpatialPhysical_du_du::integrate |
( |
EntData & |
row_data, |
|
|
EntData & |
col_data |
|
) |
| |
|
virtual |
Reimplemented from EshelbianPlasticity::OpAssembleBasic< VolUserDataOperator >.
Definition at line 239 of file HMHNeohookean.cpp.
243 auto neohookean_ptr =
244 boost::dynamic_pointer_cast<HMHNeohookean>(
dataAtPts->physicsPtr);
245 if (!neohookean_ptr) {
247 "Pointer to HMHNeohookean is null");
253 "Stretch selector is not equal to LOG");
257 "Exponent base is not equal to exp(1)");
262 const auto c10 = neohookean_ptr->c10;
263 const auto lambda = neohookean_ptr->K;
274 int nb_integration_pts = row_data.
getN().size1();
275 int row_nb_dofs = row_data.
getIndices().size();
276 int col_nb_dofs = col_data.
getIndices().size();
282 &
m(
r + 0,
c + 0), &
m(
r + 0,
c + 1), &
m(
r + 0,
c + 2), &
m(
r + 0,
c + 3),
283 &
m(
r + 0,
c + 4), &
m(
r + 0,
c + 5),
285 &
m(
r + 1,
c + 0), &
m(
r + 1,
c + 1), &
m(
r + 1,
c + 2), &
m(
r + 1,
c + 3),
286 &
m(
r + 1,
c + 4), &
m(
r + 1,
c + 5),
288 &
m(
r + 2,
c + 0), &
m(
r + 2,
c + 1), &
m(
r + 2,
c + 2), &
m(
r + 2,
c + 3),
289 &
m(
r + 2,
c + 4), &
m(
r + 2,
c + 5),
291 &
m(
r + 3,
c + 0), &
m(
r + 3,
c + 1), &
m(
r + 3,
c + 2), &
m(
r + 3,
c + 3),
292 &
m(
r + 3,
c + 4), &
m(
r + 3,
c + 5),
294 &
m(
r + 4,
c + 0), &
m(
r + 4,
c + 1), &
m(
r + 4,
c + 2), &
m(
r + 4,
c + 3),
295 &
m(
r + 4,
c + 4), &
m(
r + 4,
c + 5),
297 &
m(
r + 5,
c + 0), &
m(
r + 5,
c + 1), &
m(
r + 5,
c + 2), &
m(
r + 5,
c + 3),
298 &
m(
r + 5,
c + 4), &
m(
r + 5,
c + 5)
310 auto v = getVolume();
311 auto ts_a = getTSa();
312 auto t_w = getFTensor0IntegrationWeight();
314 int row_nb_base_functions = row_data.
getN().size2();
317 auto t_grad_h1 = getFTensor2FromMat<3, 3>(
dataAtPts->wGradH1AtPts);
319 getFTensor4DdgFromMat<3, 3, 1>(
dataAtPts->diffStretchTensorAtPts);
321 getFTensor2SymmetricFromMat<3>(
dataAtPts->logStretchTotalTensorAtPts);
322 auto t_u = getFTensor2SymmetricFromMat<3>(
dataAtPts->stretchTensorAtPts);
323 auto t_approx_P_adjont_dstretch =
324 getFTensor2FromMat<3, 3>(
dataAtPts->adjointPdstretchAtPts);
325 auto t_eigen_vals = getFTensor1FromMat<3>(
dataAtPts->eigenVals);
326 auto t_eigen_vecs = getFTensor2FromMat<3, 3>(
dataAtPts->eigenVecs);
329 auto t_P = getFTensor2FromMat<3, 3>(
dataAtPts->PAtPts);
330 auto r_P_du = getFTensor4FromMat<3, 3, 3, 3>(
dataAtPts->P_du);
332 for (
int gg = 0; gg != nb_integration_pts; ++gg) {
342 t_Ldiff_u(
i,
j,
L) = t_diff_u(
i,
j,
k,
l) * t_L(
k,
l,
L);
346 t_Ldiff_u(
i,
j,
L) = (t_diff_u(
i,
m,
k,
l) * t_h1(
m,
j)) * t_L(
k,
l,
L);
349 t_Ldiff_u(
i,
j,
L) = t_diff_u(
i,
j,
k,
l) * t_L(
k,
l,
L);
355 const double tr = t_total_log_u(
i,
j) * t_kd_sym(
i,
j);
363 t_dP(
L,
J) = (-2.0 *
c10) * (t_Ldiff_u(
i,
j,
L) * t_Ldiff_u(
i,
j,
J));
364 t_dP(
L,
J) -= (t_L(
i,
j,
L) *
t_kd(
i,
j)) * Simga_J_dtr(
J);
369 t_Sigma_u(
i,
j) = 2.0 *
c10 * (t_u(
i,
m) * t_h1(
m,
j));
374 t_approx_P_adjont_dstretch(
i,
j) - t_h1(
j,
n) * t_Sigma_u(
i,
n);
375 ++t_approx_P_adjont_dstretch;
379 t_deltaP_sym(
i,
j) = (t_deltaP(
i,
j) || t_deltaP(
j,
i));
380 t_deltaP_sym(
i,
j) /= 2.0;
384 t_dP(
L,
J) += t_L(
i,
j,
L) * (t_diff2_uP2(
i,
j,
k,
l) * t_L(
k,
l,
J));
390 for (; rr != row_nb_dofs /
size_symm; ++rr) {
392 auto t_m = get_ftensor2(
K, 6 * rr, 0);
393 for (
int cc = 0; cc != col_nb_dofs /
size_symm; ++cc) {
394 double b =
a * t_row_base_fun * t_col_base_fun;
395 t_m(
L,
J) += b * t_dP(
L,
J);
402 for (; rr != row_nb_base_functions; ++rr) {
◆ alphaU
const double EshelbianPlasticity::HMHNeohookean::OpSpatialPhysical_du_du::alphaU |
|
private |
The documentation for this struct was generated from the following file:
constexpr static auto size_symm
static boost::function< double(const double)> dd_f
static double exponentBase
UBlasMatrix< double > MatrixDouble
FTensor::Index< 'J', DIM1 > J
static boost::function< double(const double)> d_f
#define FTENSOR_INDEX(DIM, I)
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > getFTensor0N(const FieldApproximationBase base)
Get base function as Tensor0.
const double c
speed of light (cm/ns)
static enum RotSelector gradApproximator
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
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)
@ MOFEM_DATA_INCONSISTENCY
FTensor::Index< 'm', 3 > m
Kronecker Delta class symmetric.
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