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);
366 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
367 boost::shared_ptr<PhysicalEquations> physics_ptr);
371 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
372 const double alpha_u);
377 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
378 boost::shared_ptr<ExternalStrainVec> external_strain_vec_ptr,
379 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv);
382 std::string row_field, std::string col_field,
383 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
const double alpha);
387 boost::shared_ptr<double> total_energy_ptr);
390 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
391 boost::shared_ptr<PhysicalEquations> physics_ptr);
394 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
395 boost::shared_ptr<PhysicalEquations> physics_ptr);
399 boost::shared_ptr<PhysicalEquations> physics_ptr);
412 &
v[S + 5], &
v[S + 6], &
v[S + 7], &
v[S + 8]);
424 const int A00 = nba * 0 + S0;
425 const int A01 = nba * 1 + S0;
426 const int A02 = nba * 2 + S0;
427 const int A10 = nba * 3 + S0;
428 const int A11 = nba * 4 + S0;
429 const int A12 = nba * 5 + S0;
430 const int A20 = nba * 6 + S0;
431 const int A21 = nba * 7 + S0;
432 const int A22 = nba * 8 + S0;
436 &
v[A00 + 0], &
v[A00 + 1], &
v[A00 + 2], &
v[A01 + 0], &
v[A01 + 1],
437 &
v[A01 + 2], &
v[A02 + 0], &
v[A02 + 1], &
v[A02 + 2],
439 &
v[A10 + 0], &
v[A10 + 1], &
v[A10 + 2], &
v[A11 + 0], &
v[A11 + 1],
440 &
v[A11 + 2], &
v[A12 + 0], &
v[A12 + 1], &
v[A12 + 2],
442 &
v[A20 + 0], &
v[A20 + 1], &
v[A20 + 2], &
v[A21 + 0], &
v[A21 + 1],
443 &
v[A21 + 2], &
v[A22 + 0], &
v[A22 + 1], &
v[A22 + 2]
558template <
typename OP_PTR>
559std::tuple<std::string, MatrixDouble>
561 const std::string block_name);
563template <
typename OP_PTR>
564std::tuple<std::string, VectorDouble>
566 const std::string block_name);
570 MatrixDouble &m_ref_coords,
571 MatrixDouble &m_ref_normals,
572 const std::string block_name);
577 MatrixDouble &m_ref_coords,
578 const std::string block_name);
580 #ifdef ENABLE_PYTHON_BINDING
581struct AnalyticalExprPython {
582 AnalyticalExprPython() =
default;
583 virtual ~AnalyticalExprPython() =
default;
585 MoFEMErrorCode analyticalExprInit(
const std::string py_file);
586 MoFEMErrorCode evalAnalyticalDisp(
double delta_t,
double t, np::ndarray x,
587 np::ndarray y, np::ndarray z,
588 np::ndarray nx, np::ndarray ny,
590 const std::string &block_name,
591 np::ndarray &analytical_expr);
592 MoFEMErrorCode evalAnalyticalTraction(
double delta_t,
double t, np::ndarray x,
593 np::ndarray y, np::ndarray z,
594 np::ndarray nx, np::ndarray ny,
596 const std::string &block_name,
597 np::ndarray &analytical_expr);
599 MoFEMErrorCode evalAnalyticalExternalStrain(
double delta_t,
double t,
600 np::ndarray x, np::ndarray y,
602 const std::string &block_name,
603 np::ndarray &analytical_expr);
604 template <
typename T>
605 inline std::vector<T>
606 py_list_to_std_vector(
const boost::python::object &iterable) {
607 return std::vector<T>(boost::python::stl_input_iterator<T>(iterable),
608 boost::python::stl_input_iterator<T>());
612 bp::object mainNamespace;
613 bp::object analyticalDispFun;
614 bp::object analyticalTractionFun;
615 bp::object analyticalExternalStrainFun;
618extern 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 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)