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> {
150 return boost::shared_ptr<double>(shared_from_this(), &
piolaScale);
154 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
158 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
approxPAtPts);
162 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
divPAtPts);
166 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
gradPAtPts);
170 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
divSigmaAtPts);
174 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wL2AtPts);
178 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wL2DotAtPts);
182 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wL2DotDotAtPts);
186 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
191 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
196 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
201 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
206 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
rotAxisAtPts);
210 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
rotAxis0AtPts);
214 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
219 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
224 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
GAtPts);
228 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
GAtPts);
232 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matD);
236 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matInvD);
240 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matAxiatorD);
244 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matDeviatorD);
248 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wH1AtPts);
252 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
XH1AtPts);
256 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
contactL2AtPts);
260 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wGradH1AtPts);
264 return boost::shared_ptr<VectorDouble>(shared_from_this(), &
jacobianAtPts);
268 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
273 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varRotAxis);
277 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varLogStreach);
281 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varPiola);
285 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varDivPiola);
289 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varWL2);
293 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
298 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
facePiolaAtPts);
302 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
307 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
312 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
eigenVals);
348 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
349 boost::shared_ptr<PhysicalEquations> physics_ptr);
353 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
354 const double alpha_u);
359 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
360 boost::shared_ptr<ExternalStrainVec> external_strain_vec_ptr,
361 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv);
364 std::string row_field, std::string col_field,
365 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
const double alpha);
369 boost::shared_ptr<double> total_energy_ptr);
372 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
373 boost::shared_ptr<PhysicalEquations> physics_ptr);
376 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
377 boost::shared_ptr<PhysicalEquations> physics_ptr);
381 boost::shared_ptr<PhysicalEquations> physics_ptr);
394 &
v[S + 5], &
v[S + 6], &
v[S + 7], &
v[S + 8]);
406 const int A00 = nba * 0 + S0;
407 const int A01 = nba * 1 + S0;
408 const int A02 = nba * 2 + S0;
409 const int A10 = nba * 3 + S0;
410 const int A11 = nba * 4 + S0;
411 const int A12 = nba * 5 + S0;
412 const int A20 = nba * 6 + S0;
413 const int A21 = nba * 7 + S0;
414 const int A22 = nba * 8 + S0;
418 &
v[A00 + 0], &
v[A00 + 1], &
v[A00 + 2], &
v[A01 + 0], &
v[A01 + 1],
419 &
v[A01 + 2], &
v[A02 + 0], &
v[A02 + 1], &
v[A02 + 2],
421 &
v[A10 + 0], &
v[A10 + 1], &
v[A10 + 2], &
v[A11 + 0], &
v[A11 + 1],
422 &
v[A11 + 2], &
v[A12 + 0], &
v[A12 + 1], &
v[A12 + 2],
424 &
v[A20 + 0], &
v[A20 + 1], &
v[A20 + 2], &
v[A21 + 0], &
v[A21 + 1],
425 &
v[A21 + 2], &
v[A22 + 0], &
v[A22 + 1], &
v[A22 + 2]
540 #ifdef ENABLE_PYTHON_BINDING
541struct AnalyticalExprPython {
542 AnalyticalExprPython() =
default;
543 virtual ~AnalyticalExprPython() =
default;
545 MoFEMErrorCode analyticalExprInit(
const std::string py_file);
546 MoFEMErrorCode evalAnalyticalDisp(
double delta_t,
double t, np::ndarray x,
547 np::ndarray y, np::ndarray z,
548 np::ndarray nx, np::ndarray ny,
550 const std::string &block_name,
551 np::ndarray &analytical_expr);
552 MoFEMErrorCode evalAnalyticalTraction(
double delta_t,
double t, np::ndarray x,
553 np::ndarray y, np::ndarray z,
554 np::ndarray nx, np::ndarray ny,
556 const std::string &block_name,
557 np::ndarray &analytical_expr);
559 template <
typename T>
560 inline std::vector<T>
561 py_list_to_std_vector(
const boost::python::object &iterable) {
562 return std::vector<T>(boost::python::stl_input_iterator<T>(iterable),
563 boost::python::stl_input_iterator<T>());
567 bp::object mainNamespace;
568 bp::object analyticalDispFun;
569 bp::object analyticalTractionFun;
572extern boost::weak_ptr<AnalyticalExprPython> AnalyticalExprPythonWeakPtr;
const double v
phase velocity of light in medium (cm/ns)
boost::shared_ptr< MatrixDouble > MatrixPtr
std::vector< AnalyticalTractionBc > AnalyticalTractionBcVec
std::vector< TractionBc > TractionBcVec
std::vector< AnalyticalDisplacementBc > AnalyticalDisplacementBcVec
std::vector< PressureBc > PressureBcVec
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
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 getSmallWGradH1AtPts()
MatrixPtr getGradHybridDispAtPts()
MatrixPtr getMatAxiatorDPtr()
MatrixPtr getEigenValsAtPts()
MatrixDouble approxPAtPts
MatrixPtr getSmallWH1AtPts()
MatrixPtr getLogStretchDotTensorAtPts()
MatrixDouble divSigmaAtPts
MatrixPtr getContactL2AtPts()
MatrixPtr getApproxSigmaAtPts()
MatrixPtr getApproxPAtPts()
MatrixPtr getStretchTensorAtPts()
MatrixPtr getMatDeviatorDPtr()
MatrixPtr getVarRotAxisPts()
MatrixDouble hdLogStretchAtPts
MatrixPtr getVarPiolaPts()
MatrixPtr getLargeXH1AtPts()
MatrixPtr getSmallWL2DotAtPts()
MatrixPtr getDivSigmaAtPts()
MatrixDouble adjointPdUAtPts
MatrixDouble rotAxis0AtPts
MatrixDouble tractionAtPts
MatrixDouble varLogStreach
MatrixDouble logStretch2H1AtPts
MatrixPtr getGradLogStretchDotTensorAtPts()
VectorPtr getJacobianAtPts()
MatrixDouble logStretchTensorAtPts
VectorDouble jacobianAtPts
MatrixDouble rotAxisGradDotAtPts
MatrixDouble leviKirchhoffdLogStreatchAtPts
MatrixPtr getGradPAtPts()
MatrixDouble gradLogStretchDotTensorAtPts
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)