v0.14.0
Public Types | Public Member Functions | Private Attributes | List of all members
OpReleaseEnergy Struct Reference

#include <users_modules/eshelbian_plasticit/src/EshelbianOperators.hpp>

Inheritance diagram for OpReleaseEnergy:
[legend]
Collaboration diagram for OpReleaseEnergy:
[legend]

Public Types

using OP = VolumeElementForcesAndSourcesCore::UserDataOperator
 

Public Member Functions

 OpReleaseEnergy (boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< double > release_energy_ptr)
 
MoFEMErrorCode doWork (int side, EntityType type, EntData &data)
 

Private Attributes

boost::shared_ptr< DataAtIntegrationPtsdataAtPts
 data at integration pts More...
 
boost::shared_ptr< doublereleaseEnergyPtr
 

Detailed Description

Examples
EshelbianPlasticity.cpp.

Definition at line 577 of file EshelbianOperators.hpp.

Member Typedef Documentation

◆ OP

Definition at line 580 of file EshelbianOperators.hpp.

Constructor & Destructor Documentation

◆ OpReleaseEnergy()

OpReleaseEnergy::OpReleaseEnergy ( boost::shared_ptr< DataAtIntegrationPts data_ptr,
boost::shared_ptr< double release_energy_ptr 
)
inline

Definition at line 582 of file EshelbianOperators.hpp.

584  : OP(NOSPACE, OPSPACE), dataAtPts(data_ptr),
585  releaseEnergyPtr(release_energy_ptr) {
586  if (!releaseEnergyPtr)
588  "releaseEnergyPtr is nullptr");
589  }

Member Function Documentation

◆ doWork()

MoFEMErrorCode OpReleaseEnergy::doWork ( int  side,
EntityType  type,
EntData data 
)
Examples
EshelbianOperators.cpp.

Definition at line 2436 of file EshelbianOperators.cpp.

2437  {
2439 
2445 
2446  // sym size indices
2448  auto t_L = symm_L_tensor();
2449 
2450  const auto nb_integration_pts = getGaussPts().size2();
2451 
2452  auto t_w = getFTensor0IntegrationWeight();
2453  auto t_h = getFTensor2FromMat<3, 3>(dataAtPts->hAtPts);
2454  auto t_P = getFTensor2FromMat<3, 3>(dataAtPts->approxPAtPts);
2455 
2456  auto t_var_omega = getFTensor1FromMat<3>(dataAtPts->varRotAxis);
2457  auto t_var_log_u = getFTensor2SymmetricFromMat<3>(dataAtPts->varLogStreach);
2458  auto t_var_P = getFTensor2FromMat<3, 3>(dataAtPts->varPiola);
2459 
2460  auto t_h_domega = getFTensor3FromMat<3, 3, 3>(dataAtPts->hdOmegaAtPts);
2461  auto t_h_dlog_u =
2462  getFTensor3FromMat<3, 3, size_symm>(dataAtPts->hdLogStretchAtPts);
2463 
2464  auto t_approx_P_adjoint_log_du =
2465  getFTensor1FromMat<size_symm>(dataAtPts->adjointPdUAtPts);
2466 
2467  double var_element_energy = 0.;
2468 
2469  for (auto gg = 0; gg != nb_integration_pts; ++gg) {
2470 
2472  t_var_L_u(L) = t_L(J, K, L) * t_var_log_u(J, K);
2473  auto var_energy = t_P(i, J) * (t_h_domega(i, J, j) * t_var_omega(j) +
2474  t_h_dlog_u(i, J, L) * t_var_L_u(L));
2475  var_element_energy += t_w * var_energy;
2476  auto var_complementary = t_var_P(i, J) * t_h(i, J);
2477  var_element_energy += t_w * var_complementary;
2478 
2479  ++t_w;
2480  ++t_h;
2481  ++t_P;
2482 
2483  ++t_var_omega;
2484  ++t_var_log_u;
2485  ++t_var_P;
2486 
2487  ++t_h_domega;
2488  ++t_h_dlog_u;
2489 
2490  ++t_approx_P_adjoint_log_du;
2491  }
2492 
2493  var_element_energy *= getMeasure();
2494 
2495  auto get_tag = [&]() {
2496  auto &mob = getPtrFE()->mField.get_moab();
2497  Tag tag;
2498  double def_val[] = {0.};
2499  CHK_MOAB_THROW(mob.tag_get_handle("ReleaseEnergy", 1, MB_TYPE_DOUBLE, tag,
2500  MB_TAG_CREAT | MB_TAG_SPARSE, def_val),
2501  "create tag");
2502  return tag;
2503  };
2504 
2505  auto set_tag = [&](auto &&tag, auto &energy) {
2506  auto &mob = getPtrFE()->mField.get_moab();
2507  auto tet = getPtrFE()->getFEEntityHandle();
2508  CHK_MOAB_THROW(mob.tag_set_data(tag, &tet, 1, &energy), "set tag");
2509  };
2510 
2511  set_tag(get_tag(), var_element_energy);
2512 
2513  *releaseEnergyPtr += var_element_energy;
2514 
2516 }

Member Data Documentation

◆ dataAtPts

boost::shared_ptr<DataAtIntegrationPts> OpReleaseEnergy::dataAtPts
private

data at integration pts

Definition at line 595 of file EshelbianOperators.hpp.

◆ releaseEnergyPtr

boost::shared_ptr<double> OpReleaseEnergy::releaseEnergyPtr
private

Definition at line 596 of file EshelbianOperators.hpp.


The documentation for this struct was generated from the following files:
NOSPACE
@ NOSPACE
Definition: definitions.h:83
CHK_MOAB_THROW
#define CHK_MOAB_THROW(err, msg)
Check error code of MoAB function and throw MoFEM exception.
Definition: definitions.h:589
MoFEM::K
VectorDouble K
Definition: Projection10NodeCoordsOnField.cpp:125
OpReleaseEnergy::dataAtPts
boost::shared_ptr< DataAtIntegrationPts > dataAtPts
data at integration pts
Definition: EshelbianOperators.hpp:595
OpReleaseEnergy::releaseEnergyPtr
boost::shared_ptr< double > releaseEnergyPtr
Definition: EshelbianOperators.hpp:596
FTensor::Tensor1
Definition: Tensor1_value.hpp:8
CHK_THROW_MESSAGE
#define CHK_THROW_MESSAGE(err, msg)
Check and throw MoFEM exception.
Definition: definitions.h:609
J
FTensor::Index< 'J', DIM1 > J
Definition: level_set.cpp:30
FTENSOR_INDEX
#define FTENSOR_INDEX(DIM, I)
Definition: Templates.hpp:2013
I
constexpr IntegrationType I
Definition: operators_tests.cpp:31
SPACE_DIM
constexpr int SPACE_DIM
Definition: child_and_parent.cpp:16
MoFEM::L
VectorDouble L
Definition: Projection10NodeCoordsOnField.cpp:124
size_symm
constexpr auto size_symm
Definition: plastic.cpp:42
i
FTensor::Index< 'i', SPACE_DIM > i
Definition: hcurl_divergence_operator_2d.cpp:27
PlasticOps::symm_L_tensor
auto symm_L_tensor(FTensor::Number< DIM >)
Definition: PlasticOpsGeneric.hpp:21
OpReleaseEnergy::OP
VolumeElementForcesAndSourcesCore::UserDataOperator OP
Definition: EshelbianOperators.hpp:580
j
FTensor::Index< 'j', 3 > j
Definition: matrix_function.cpp:19
MOFEM_DATA_INCONSISTENCY
@ MOFEM_DATA_INCONSISTENCY
Definition: definitions.h:31
MoFEMFunctionReturn
#define MoFEMFunctionReturn(a)
Last executable line of each PETSc function used for error handling. Replaces return()
Definition: definitions.h:429
MoFEMFunctionBegin
#define MoFEMFunctionBegin
First executable line of each MoFEM function, used for error handling. Final line of MoFEM functions ...
Definition: definitions.h:359