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;
39 using CachePhi = boost::tuple<int, int, MatrixDouble>;
45 BaseFunctionUnknownInterface **iface)
const;
46 MoFEMErrorCode
getValue(MatrixDouble &pts,
47 boost::shared_ptr<BaseFunctionCtx> ctx_ptr);
71using EntData = EntitiesFieldData::EntData;
75using EleOnSide = PipelineManager::ElementsAndOpsByDim<SPACE_DIM>::FaceSideEle;
80struct AnalyticalExprPython;
83 :
public boost::enable_shared_from_this<DataAtIntegrationPts> {
169 return boost::shared_ptr<double>(shared_from_this(), &
piolaScale);
173 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
177 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
approxPAtPts);
181 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
divPAtPts);
185 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
gradPAtPts);
189 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
divSigmaAtPts);
193 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wL2AtPts);
197 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wL2DotAtPts);
201 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wL2DotDotAtPts);
205 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
210 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
215 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
220 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
225 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
rotAxisAtPts);
229 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
rotAxis0AtPts);
233 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
238 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
243 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
GAtPts);
247 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
GAtPts);
251 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matD);
255 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matInvD);
259 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matAxiatorD);
263 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
matDeviatorD);
267 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wH1AtPts);
271 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
XH1AtPts);
275 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
contactL2AtPts);
279 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
wGradH1AtPts);
283 return boost::shared_ptr<VectorDouble>(shared_from_this(), &
jacobianAtPts);
287 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
292 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varRotAxis);
296 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varLogStreach);
300 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varPiola);
304 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varDivPiola);
308 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
varWL2);
312 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
317 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
facePiolaAtPts);
321 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
326 return boost::shared_ptr<MatrixDouble>(shared_from_this(),
331 return boost::shared_ptr<MatrixDouble>(shared_from_this(), &
eigenVals);
367 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
368 boost::shared_ptr<PhysicalEquations> physics_ptr);
372 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
373 const double alpha_u);
378 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
379 boost::shared_ptr<ExternalStrainVec> external_strain_vec_ptr,
380 std::map<std::string, boost::shared_ptr<ScalingMethod>> smv);
383 std::string row_field, std::string col_field,
384 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
const double alpha);
388 boost::shared_ptr<double> total_energy_ptr);
391 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
392 boost::shared_ptr<PhysicalEquations> physics_ptr);
395 boost::shared_ptr<DataAtIntegrationPts> data_ptr,
396 boost::shared_ptr<PhysicalEquations> physics_ptr);
400 boost::shared_ptr<PhysicalEquations> physics_ptr);
413 &
v[S + 5], &
v[S + 6], &
v[S + 7], &
v[S + 8]);
425 const int A00 = nba * 0 + S0;
426 const int A01 = nba * 1 + S0;
427 const int A02 = nba * 2 + S0;
428 const int A10 = nba * 3 + S0;
429 const int A11 = nba * 4 + S0;
430 const int A12 = nba * 5 + S0;
431 const int A20 = nba * 6 + S0;
432 const int A21 = nba * 7 + S0;
433 const int A22 = nba * 8 + S0;
437 &
v[A00 + 0], &
v[A00 + 1], &
v[A00 + 2], &
v[A01 + 0], &
v[A01 + 1],
438 &
v[A01 + 2], &
v[A02 + 0], &
v[A02 + 1], &
v[A02 + 2],
440 &
v[A10 + 0], &
v[A10 + 1], &
v[A10 + 2], &
v[A11 + 0], &
v[A11 + 1],
441 &
v[A11 + 2], &
v[A12 + 0], &
v[A12 + 1], &
v[A12 + 2],
443 &
v[A20 + 0], &
v[A20 + 1], &
v[A20 + 2], &
v[A21 + 0], &
v[A21 + 1],
444 &
v[A21 + 2], &
v[A22 + 0], &
v[A22 + 1], &
v[A22 + 2]
559 #ifdef ENABLE_PYTHON_BINDING
560struct AnalyticalExprPython {
561 AnalyticalExprPython() =
default;
562 virtual ~AnalyticalExprPython() =
default;
564 MoFEMErrorCode analyticalExprInit(
const std::string py_file);
565 MoFEMErrorCode evalAnalyticalDisp(
double delta_t,
double t, np::ndarray x,
566 np::ndarray y, np::ndarray z,
567 np::ndarray nx, np::ndarray ny,
569 const std::string &block_name,
570 np::ndarray &analytical_expr);
571 MoFEMErrorCode evalAnalyticalTraction(
double delta_t,
double t, np::ndarray x,
572 np::ndarray y, np::ndarray z,
573 np::ndarray nx, np::ndarray ny,
575 const std::string &block_name,
576 np::ndarray &analytical_expr);
578 template <
typename T>
579 inline std::vector<T>
580 py_list_to_std_vector(
const boost::python::object &iterable) {
581 return std::vector<T>(boost::python::stl_input_iterator<T>(iterable),
582 boost::python::stl_input_iterator<T>());
586 bp::object mainNamespace;
587 bp::object analyticalDispFun;
588 bp::object analyticalTractionFun;
591extern 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
MoFEMErrorCode getValueHdivForCGGBubble(MatrixDouble &pts)
MoFEMErrorCode getValue(MatrixDouble &pts, boost::shared_ptr< BaseFunctionCtx > ctx_ptr)
~CGGUserPolynomialBase()=default
boost::tuple< int, int, MatrixDouble > CachePhi
boost::shared_ptr< CachePhi > cachePhiPtr
MoFEMErrorCode query_interface(boost::typeindex::type_index type_index, BaseFunctionUnknownInterface **iface) const
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)