23constexpr auto A = AssemblyType::BLOCK_MAT;
25#ifndef __ESHELBIAN_PLASTICITY_HPP__
26 #define __ESHELBIAN_PLASTICITY_HPP__
28 #ifdef ENABLE_PYTHON_BINDING
29 #include <boost/python.hpp>
30 #include <boost/python/def.hpp>
31 #include <boost/python/numpy.hpp>
32namespace bp = boost::python;
33namespace np = boost::python::numpy;
52using EntData = EntitiesFieldData::EntData;
56using EleOnSide = PipelineManager::ElementsAndOpsByDim<SPACE_DIM>::FaceSideEle;
61struct AnalyticalExprPython;
64 :
public boost::enable_shared_from_this<DataAtIntegrationPts> {
153 return boost::shared_ptr<double>(shared_from_this(), &
piolaScale);
157 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
161 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
approxPAtPts);
165 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
divPAtPts);
169 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
gradPAtPts);
173 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
divSigmaAtPts);
177 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wL2AtPts);
181 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wL2DotAtPts);
185 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wL2DotDotAtPts);
189 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
194 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
199 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
204 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
209 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
rotAxisAtPts);
213 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
rotAxis0AtPts);
217 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
222 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
227 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
GAtPts);
231 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
GAtPts);
235 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matD);
239 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matInvD);
243 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matAxiatorD);
247 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matDeviatorD);
251 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wH1AtPts);
255 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
XH1AtPts);
259 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
contactL2AtPts);
263 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wGradH1AtPts);
267 return boost::shared_ptr<VectorDouble>(shared_from_this(), &
jacobianAtPts);
271 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
276 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varRotAxis);
280 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
285 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varLogStreach);
289 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varPiola);
293 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varDivPiola);
297 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varWL2);
301 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
306 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
311 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
facePiolaAtPts);
315 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
320 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
325 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
330 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
eigenVals);
370 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
371 boost::shared_ptr<PhysicalEquations> physics_ptr);
375 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
376 const double alpha_u);
381 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
382 boost::shared_ptr<ExternalStrainVec> external_strain_vec_ptr,
383 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv);
386 std::string row_field, std::string col_field,
387 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
const double alpha);
391 boost::shared_ptr<double> total_energy_ptr);
394 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
395 boost::shared_ptr<PhysicalEquations> physics_ptr);
398 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
399 boost::shared_ptr<PhysicalEquations> physics_ptr);
403 boost::shared_ptr<PhysicalEquations> physics_ptr);
416 &
v[S + 5], &
v[S + 6], &
v[S + 7], &
v[S + 8]);
428 const int A00 = nba * 0 + S0;
429 const int A01 = nba * 1 + S0;
430 const int A02 = nba * 2 + S0;
431 const int A10 = nba * 3 + S0;
432 const int A11 = nba * 4 + S0;
433 const int A12 = nba * 5 + S0;
434 const int A20 = nba * 6 + S0;
435 const int A21 = nba * 7 + S0;
436 const int A22 = nba * 8 + S0;
440 &
v[A00 + 0], &
v[A00 + 1], &
v[A00 + 2], &
v[A01 + 0], &
v[A01 + 1],
441 &
v[A01 + 2], &
v[A02 + 0], &
v[A02 + 1], &
v[A02 + 2],
443 &
v[A10 + 0], &
v[A10 + 1], &
v[A10 + 2], &
v[A11 + 0], &
v[A11 + 1],
444 &
v[A11 + 2], &
v[A12 + 0], &
v[A12 + 1], &
v[A12 + 2],
446 &
v[A20 + 0], &
v[A20 + 1], &
v[A20 + 2], &
v[A21 + 0], &
v[A21 + 1],
447 &
v[A21 + 2], &
v[A22 + 0], &
v[A22 + 1], &
v[A22 + 2]
562template <
typename OP_PTR>
563std::tuple<std::string, MatrixDouble>
565 const std::string block_name);
567template <
typename OP_PTR>
568std::tuple<std::string, VectorDouble>
570 const std::string block_name);
574 MatrixDouble &m_ref_coords,
575 MatrixDouble &m_ref_normals,
576 const std::string block_name);
581 MatrixDouble &m_ref_coords,
582 const std::string block_name);
584 #ifdef ENABLE_PYTHON_BINDING
585struct AnalyticalExprPython {
586 AnalyticalExprPython() =
default;
587 virtual ~AnalyticalExprPython() =
default;
589 MoFEMErrorCode analyticalExprInit(
const std::string py_file);
590 MoFEMErrorCode evalAnalyticalDisp(
double delta_t,
double t, np::ndarray x,
591 np::ndarray y, np::ndarray z,
592 np::ndarray nx, np::ndarray ny,
594 const std::string &block_name,
595 np::ndarray &analytical_expr);
596 MoFEMErrorCode evalAnalyticalTraction(
double delta_t,
double t, np::ndarray x,
597 np::ndarray y, np::ndarray z,
598 np::ndarray nx, np::ndarray ny,
600 const std::string &block_name,
601 np::ndarray &analytical_expr);
603 MoFEMErrorCode evalAnalyticalExternalStrain(
double delta_t,
double t,
604 np::ndarray x, np::ndarray y,
606 const std::string &block_name,
607 np::ndarray &analytical_expr);
608 template <
typename T>
609 inline std::vector<T>
610 py_list_to_std_vector(
const boost::python::object &iterable) {
611 return std::vector<T>(boost::python::stl_input_iterator<T>(iterable),
612 boost::python::stl_input_iterator<T>());
616 bp::object mainNamespace;
617 bp::object analyticalDispFun;
618 bp::object analyticalTractionFun;
619 bp::object analyticalExternalStrainFun;
622extern boost::weak_ptr<AnalyticalExprPython> AnalyticalExprPythonWeakPtr;
const double v
phase velocity of light in medium (cm/ns)
VectorDouble analytical_externalstrain_function(double delta_t, double t, int nb_gauss_pts, MatrixDouble &m_ref_coords, const std::string block_name)
boost::shared_ptr< MatrixDouble > MatrixPtr
std::vector< AnalyticalTractionBc > AnalyticalTractionBcVec
std::vector< TractionBc > TractionBcVec
std::tuple< std::string, VectorDouble > getAnalyticalExternalStrain(OP_PTR op_ptr, VectorDouble &analytical_expr, const std::string block_name)
std::vector< AnalyticalDisplacementBc > AnalyticalDisplacementBcVec
std::vector< PressureBc > PressureBcVec
std::tuple< std::string, MatrixDouble > getAnalyticalExpr(OP_PTR op_ptr, MatrixDouble &analytical_expr, const std::string block_name)
std::vector< Range > TractionFreeBc
std::vector< ExternalStrain > ExternalStrainVec
ForcesAndSourcesCore::UserDataOperator UserDataOperator
std::vector< BcRot > BcRotVec
std::vector< NormalDisplacementBc > NormalDisplacementBcVec
FaceElementForcesAndSourcesCore::UserDataOperator FaceUserDataOperator
PipelineManager::ElementsAndOpsByDim< SPACE_DIM >::FaceSideEle EleOnSide
MatrixDouble analytical_expr_function(double delta_t, double t, int nb_gauss_pts, MatrixDouble &m_ref_coords, MatrixDouble &m_ref_normals, const std::string block_name)
std::vector< BcDisp > BcDispVec
boost::shared_ptr< VectorDouble > VectorPtr
constexpr double t
plate stiffness
constexpr auto field_name
MatrixDouble approxSigmaAtPts
MatrixPtr getHybridDispAtPts()
MatrixDouble diffStretchTensorAtPts
MatrixPtr getBigG0AtPts()
MatrixPtr getLogStretchTensorAtPts()
VectorDouble normalPressureAtPts
MatrixDouble matDeviatorD
MatrixDouble wL2DotDotAtPts
MatrixDouble logStretchTotalTensorAtPts
MatrixDouble hdOmegaAtPts
MatrixDouble rotAxisDotAtPts
MatrixDouble gradHybridDispAtPts
MatrixDouble leviKirchhoffdOmegaAtPts
MatrixDouble leviKirchhoffPAtPts
MatrixDouble stretchTensorAtPts
MatrixPtr getSmallWL2AtPts()
MatrixPtr getFacePiolaAtPts()
MatrixDouble internalStressAtPts
MatrixPtr getInternalStressAtPts()
MatrixDouble logStretchDotTensorAtPts
MatrixPtr getRotAxisAtPts()
MatrixPtr getRotAxis0AtPts()
VectorDouble detStretchTensorAtPts
MatrixPtr getLeviKirchhoffAtPts()
MatrixPtr getSmallWL2DotDotAtPts()
MatrixDouble adjointPdUdPAtPts
MatrixPtr getRotAxisGradDotAtPts()
MatrixDouble adjointPdstretchAtPts
MatrixPtr getVarLogStreachPts()
MatrixPtr getRotAxisDotAtPts()
MatrixPtr getDivVarPiolaPts()
MatrixPtr getVarGradRotAxisPts()
MatrixPtr getSmallWGradH1AtPts()
MatrixPtr getHybridDispDotAtPts()
MatrixPtr getGradHybridDispAtPts()
MatrixPtr getMatAxiatorDPtr()
MatrixPtr getEigenValsAtPts()
MatrixDouble approxPAtPts
MatrixPtr getSmallWH1AtPts()
MatrixPtr getLogStretchDotTensorAtPts()
MatrixDouble divSigmaAtPts
MatrixPtr getContactL2AtPts()
MatrixPtr getApproxSigmaAtPts()
MatrixPtr getApproxPAtPts()
MatrixPtr getStretchTensorAtPts()
MatrixDouble hybridDispDotAtPts
MatrixPtr getMatDeviatorDPtr()
MatrixPtr getVarRotAxisPts()
MatrixDouble hdLogStretchAtPts
MatrixPtr getVarPiolaPts()
MatrixPtr getLargeXH1AtPts()
MatrixPtr getVarHybridDispAtPts()
MatrixPtr getSmallWL2DotAtPts()
MatrixPtr getDivSigmaAtPts()
MatrixDouble adjointPdUAtPts
MatrixDouble rotAxis0AtPts
MatrixDouble varHybridDispAtPts
MatrixDouble tractionAtPts
MatrixDouble varLogStreach
MatrixDouble logStretch2H1AtPts
MatrixPtr getGradLogStretchDotTensorAtPts()
VectorPtr getJacobianAtPts()
MatrixDouble logStretchTensorAtPts
VectorDouble jacobianAtPts
MatrixDouble rotAxisGradDotAtPts
MatrixDouble leviKirchhoffdLogStreatchAtPts
MatrixPtr getGradPAtPts()
MatrixDouble gradLogStretchDotTensorAtPts
MatrixDouble varGradRotAxis
MatrixDouble wGradH1AtPts
MatrixDouble leviKirchhoffAtPts
MatrixDouble faceMaterialForceAtPts
MatrixDouble adjointPdUdOmegaAtPts
MatrixDouble hybridDispAtPts
MatrixPtr getMatInvDPtr()
MatrixDouble detStretchTensorAtPts_du
MatrixDouble rotAxisAtPts
boost::shared_ptr< PhysicalEquations > physicsPtr
MatrixDouble facePiolaAtPts
MatrixDouble contactL2AtPts
virtual MoFEMErrorCode setParams(const int tag, EntityHandle ent, int gg)
virtual VolUserDataOperator * returnOpCalculateVarStretchFromStress(boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
virtual VolUserDataOperator * returnOpCalculateEnergy(boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< double > total_energy_ptr)
FTensor::Tensor3< double, 3, 3, 3 > DTensor3
PhysicalEquations()=delete
FTensor::Tensor3< FTensor::PackPtr< double *, 1 >, 3, 3, 3 > DTensor3Ptr
virtual VolUserDataOperator * returnOpSpatialPhysical(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha_u)
virtual VolUserDataOperator * returnOpSpatialPhysicalExternalStrain(const std::string &field_name, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< ExternalStrainVec > external_strain_vec_ptr, std::map< std::string, boost::shared_ptr< ScalingMethod > > smv)
FTensor::Tensor2< FTensor::PackPtr< double *, 1 >, 3, 3 > DTensor2Ptr
virtual VolUserDataOperator * returnOpCalculateStretchFromStress(boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
FTensor::Tensor1< double, 3 > DTensor1
static DTensor3Ptr get_vecTensor3(std::vector< double > &v, const int nba)
FTensor::Tensor2< adouble, 3, 3 > ATensor2
FTensor::Tensor2< double, 3, 3 > DTensor2
PhysicalEquations(const int size_active, const int size_dependent)
virtual VolUserDataOperator * returnOpSetScale(boost::shared_ptr< double > scale_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
std::vector< double > dependentVariablesPiolaDirevatives
static DTensor2Ptr get_VecTensor2(std::vector< double > &v)
FTensor::Tensor1< adouble, 3 > ATensor1
FTensor::Tensor3< adouble, 3, 3, 3 > ATensor3
virtual MoFEMErrorCode recordTape(const int tag, DTensor2Ptr *t_h)=0
FTensor::Tensor0< FTensor::PackPtr< double *, 1 > > DTensor0Ptr
virtual ~PhysicalEquations()=default
virtual VolUserDataOperator * returnOpSpatialPhysical_du_du(std::string row_field, std::string col_field, boost::shared_ptr< DataAtIntegrationPts > data_ptr, const double alpha)
std::vector< double > activeVariables
virtual UserDataOperator * returnOpJacobian(const int tag, const bool eval_rhs, const bool eval_lhs, boost::shared_ptr< DataAtIntegrationPts > data_ptr, boost::shared_ptr< PhysicalEquations > physics_ptr)
static DTensor0Ptr get_VecTensor0(std::vector< double > &v)
std::vector< double > dependentVariablesPiola
Data on single entity (This is passed as argument to DataOperator::doWork)