v0.15.0
Loading...
Searching...
No Matches
ADOLCPlasticityLargeStrain.hpp

Operators and data structures for large strain plasticity.

Operators and data structures for large strain plasticity

/** \file ADOLCPlasticityLargeStrain.hpp
* \ingroup adoc_plasticity
* \example ADOLCPlasticityLargeStrain.hpp
*
* \brief Operators and data structures for large strain plasticity
*
* \defgroup adoc_plasticity ADOL-C plasticity
* \ingroup user_modules
* \defgroup user_modules User modules
*
**/
#include "MoFEM.hpp"
using namespace MoFEM;
namespace ADOLCPlasticity {
struct OpTransferCommonData : public ForcesAndSourcesCore::UserDataOperator {
boost::shared_ptr<MatrixDouble> mA;
boost::shared_ptr<MatrixDouble> mB;
OpTransferCommonData(boost::shared_ptr<MatrixDouble> m_a,
boost::shared_ptr<MatrixDouble> m_b)
: ForcesAndSourcesCore::UserDataOperator(NOSPACE,
UserDataOperator::OPSPACE),
mA(m_a), mB(m_b) {}
MoFEMErrorCode doWork(int side, EntityType type,
DataForcesAndSourcesCore::EntData &data) {
// Swap mA to mB
*mA = std::move(*mB);
}
};
template <int DIM, IntegrationType I, typename DomainEleOp>
MoFEM::Interface &m_field, std::string field_name, Pip &pip,
std::string block_name,
boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
boost::shared_ptr<ClosestPointProjection> cp_ptr);
template <int DIM, IntegrationType I, typename DomainEleOp>
MoFEM::Interface &m_field, std::string field_name, Pip &pip,
std::string block_name,
boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
boost::shared_ptr<ClosestPointProjection> cp_ptr) {
using namespace HenckyOps;
using P = ADOLCPlasticityIntegrators<DomainEleOp>;
auto common_hencky_ptr = boost::make_shared<HenckyOps::CommonData>();
common_hencky_ptr->matDPtr = boost::make_shared<MatrixDouble>();
common_hencky_ptr->matGradPtr = boost::make_shared<MatrixDouble>();
field_name, common_hencky_ptr->matGradPtr));
pip.push_back(new typename H::template OpCalculateEigenVals<DIM, I>(
field_name, common_hencky_ptr));
pip.push_back(new typename H::template OpCalculateLogC<DIM, I>(
field_name, common_hencky_ptr));
pip.push_back(new typename H::template OpCalculateLogC_dC<DIM, I>(
field_name, common_hencky_ptr));
pip.push_back(
new OpTransferCommonData(common_data_ptr->getGradAtGaussPtsPtr(),
common_hencky_ptr->getMatLogC()));
CHKERR cp_ptr->addMatBlockOps(m_field, pip, block_name, Sev::inform);
pip.push_back(getRawPtrOpCalculateStress<DIM, LARGE_STRAIN>(m_field, common_data_ptr,
cp_ptr, false));
pip.push_back(
new OpTransferCommonData(common_hencky_ptr->getMatHenckyStress(),
common_data_ptr->getStressMatrixPtr()));
pip.push_back(new OpTransferCommonData(common_hencky_ptr->matDPtr,
common_data_ptr->getMatTangentPtr()));
// post process stress to first piola kirchhoff stress
pip.push_back(new typename H::template OpCalculatePiolaStress<DIM, I, 1>(
field_name, common_hencky_ptr));
pip.push_back(
new OpTransferCommonData(common_data_ptr->getStressMatrixPtr(),
common_hencky_ptr->getMatFirstPiolaStress()));
};
template <int DIM, IntegrationType I, typename DomainEleOp>
MoFEM::Interface &m_field, std::string field_name, Pip &pip,
std::string block_name,
boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
boost::shared_ptr<ClosestPointProjection> cp_ptr) {
m_field, field_name, pip, block_name, common_data_ptr, cp_ptr);
};
template <int DIM, IntegrationType I, typename DomainEleOp>
MoFEM::Interface &m_field, std::string field_name, Pip &pip,
std::string block_name,
boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
boost::shared_ptr<ClosestPointProjection> cp_ptr);
template <int DIM, IntegrationType I, typename DomainEleOp>
MoFEM::Interface &m_field, std::string field_name, Pip &pip,
std::string block_name,
boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
boost::shared_ptr<ClosestPointProjection> cp_ptr) {
using namespace HenckyOps;
auto common_hencky_ptr = boost::make_shared<HenckyOps::CommonData>();
common_hencky_ptr->matDPtr = boost::make_shared<MatrixDouble>();
common_hencky_ptr->matGradPtr = boost::make_shared<MatrixDouble>();
field_name, common_hencky_ptr->matGradPtr));
pip.push_back(new typename H::template OpCalculateEigenVals<DIM, I>(
field_name, common_hencky_ptr));
pip.push_back(new typename H::template OpCalculateLogC<DIM, I>(
field_name, common_hencky_ptr));
pip.push_back(new typename H::template OpCalculateLogC_dC<DIM, I>(
field_name, common_hencky_ptr));
pip.push_back(
new OpTransferCommonData(common_data_ptr->getGradAtGaussPtsPtr(),
common_hencky_ptr->getMatLogC()));
CHKERR cp_ptr->addMatBlockOps(m_field, pip, block_name, Sev::inform);
pip.push_back(
getRawPtrOpCalculateStress<DIM ,LARGE_STRAIN>(m_field, common_data_ptr, cp_ptr, false));
pip.push_back(
new OpTransferCommonData(common_hencky_ptr->getMatHenckyStress(),
common_data_ptr->getStressMatrixPtr()));
pip.push_back(new OpTransferCommonData(common_hencky_ptr->matDPtr,
common_data_ptr->getMatTangentPtr()));
pip.push_back(new typename H::template OpCalculatePiolaStress<DIM, I, 1>(
field_name, common_hencky_ptr));
pip.push_back(new typename H::template OpHenckyTangent<DIM, I, 1>(
field_name, common_hencky_ptr));
pip.push_back(new OpTransferCommonData(common_data_ptr->getMatTangentPtr(),
common_hencky_ptr->getMatTangent()));
};
template <int DIM, IntegrationType I, typename DomainEleOp>
MoFEM::Interface &m_field, std::string field_name, Pip &pip,
std::string block_name,
boost::shared_ptr<ADOLCPlasticity::CommonData> common_data_ptr,
boost::shared_ptr<ClosestPointProjection> cp_ptr) {
m_field, field_name, pip, block_name, common_data_ptr, cp_ptr);
};
} // namespace ADOLCPlasticity
@ NOSPACE
Definition definitions.h:83
#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()
#define CHKERR
Inline error check.
MoFEMErrorCode opFactoryDomainHenckyStrainLhs(MoFEM::Interface &m_field, std::string field_name, Pip &pip, std::string block_name, boost::shared_ptr< ADOLCPlasticity::CommonData > common_data_ptr, boost::shared_ptr< ClosestPointProjection > cp_ptr)
MoFEMErrorCode opFactoryDomainHenckyStrainRhs(MoFEM::Interface &m_field, std::string field_name, Pip &pip, std::string block_name, boost::shared_ptr< ADOLCPlasticity::CommonData > common_data_ptr, boost::shared_ptr< ClosestPointProjection > cp_ptr)
ForcesAndSourcesCore::UserDataOperator * getRawPtrOpCalculateStress(MoFEM::Interface &m_field, boost::shared_ptr< CommonData > common_data_ptr, boost::shared_ptr< ClosestPointProjection > cp_ptr, bool calc_lhs)
Get opreator to calulate stress.
MoFEMErrorCode opFactoryDomainHenckyStrainRhsImpl(MoFEM::Interface &m_field, std::string field_name, Pip &pip, std::string block_name, boost::shared_ptr< ADOLCPlasticity::CommonData > common_data_ptr, boost::shared_ptr< ClosestPointProjection > cp_ptr)
MoFEMErrorCode opFactoryDomainHenckyStrainLhsImpl(MoFEM::Interface &m_field, std::string field_name, Pip &pip, std::string block_name, boost::shared_ptr< ADOLCPlasticity::CommonData > common_data_ptr, boost::shared_ptr< ClosestPointProjection > cp_ptr)
boost::ptr_deque< ForcesAndSourcesCore::UserDataOperator > Pip
PetscErrorCode MoFEMErrorCode
MoFEM/PETSc error code.
implementation of Data Operators for Forces and Sources
Definition Common.hpp:10
double H
Hardening.
Definition plastic.cpp:128
constexpr auto field_name
OpTransferCommonData(boost::shared_ptr< MatrixDouble > m_a, boost::shared_ptr< MatrixDouble > m_b)
MoFEMErrorCode doWork(int side, EntityType type, DataForcesAndSourcesCore::EntData &data)
Deprecated interface functions.
Get field gradients at integration pts for scalar field rank 0, i.e. vector field.