Mechanics of Defect Evolution Library
Loading...
Searching...
No Matches
EllipsoidalInclusion.h
Go to the documentation of this file.
1/* This file is part of MoDELib, the Mechanics Of Defects Evolution Library.
2 * MoDELib is distributed without any warranty under the
3 * GNU General Public License (GPL) v2 <http://www.gnu.org/licenses/>.
4 */
5#ifndef model_EllipsoidalInclusion_H_
6#define model_EllipsoidalInclusion_H_
7
8#include <memory>
9#include <Eigen/Dense>
11
12namespace model
13{
14 template <int dim> class EllipsoidalInclusion : public EshelbyInclusionBase<dim>
15 {
16 static_assert(dim == 3, "EllipsoidalInclusion requires dim=3");
17 typedef Eigen::Matrix<double, dim, dim> MatrixDim;
18 typedef Eigen::Matrix<double, dim, 1> VectorDim;
19 typedef Eigen::Matrix<double, 12, 1> Integrals;
20
21 public:
22 // Immutable geometry: columns of axes are mutually orthogonal semiaxis vectors.
23 const VectorDim C;
24 const MatrixDim axes;
25
26 EllipsoidalInclusion(const VectorDim &_C, const MatrixDim &_axes, const MatrixDim &_eT, const double &_nu,
27 const double &_mu, const double &_mobilityReduction, const int &_phaseID,
28 const std::shared_ptr<SecondPhase<dim>> &sph, const double quadratureTolerance = 1.0e-3,
29 const unsigned int quadratureMaxDepth = 30);
30
31 // As in SphericalInclusion, contains excludes the boundary;
32 // stress uses the interior value on an exactly classified boundary.
33 bool contains(const VectorDim &x) const override;
34 MatrixDim stress(const VectorDim &x) const override;
35
36 private:
37 double lengthScale;
38 MatrixDim rotation;
39 VectorDim axisSquared;
40 double axisProduct;
41 const double tolerance;
42 const unsigned int maxDepth;
43 Integrals interiorIntegrals;
44
45 struct InteriorStressCache
46 {
47 MatrixDim eigenstrain;
48 MatrixDim stress;
49 };
50 // Immutable snapshots allow concurrent stress() calls when eT is not modified.
51 mutable std::shared_ptr<const InteriorStressCache> interiorStressCache;
52
53 MatrixDim evaluateStress(const VectorDim &r, const bool inside, const MatrixDim &eigenstrain) const;
54
55 VectorDim localPosition(const VectorDim &x) const;
56 double ellipsoidalCoordinate(const VectorDim &r) const;
57 Integrals integrate(const double ell) const;
58 };
59} // namespace model
60#endif
MatrixDim stress(const VectorDim &x) const override
EllipsoidalInclusion(const VectorDim &_C, const MatrixDim &_axes, const MatrixDim &_eT, const double &_nu, const double &_mu, const double &_mobilityReduction, const int &_phaseID, const std::shared_ptr< SecondPhase< dim > > &sph, const double quadratureTolerance=1.0e-3, const unsigned int quadratureMaxDepth=30)
EshelbyInclusionBase(const MatrixDim &_eT, const double &_nu, const double &_mu, const double &_mobilityReduction, const int &_phaseID, const std::shared_ptr< SecondPhase< dim > > &sph)
x
Definition int_R.m:12