13 #include "libmesh/quadrature.h" 21 params.
addClassDescription(
"accepts eigenstrains and computes a reduced order eigenstrain for " 22 "consistency in the order of strain and eigenstrains.");
24 "input_eigenstrain_names",
"List of eigenstrains to be applied in this strain calculation");
30 _input_eigenstrain_names(
31 getParam<
std::vector<MaterialPropertyName>>(
"input_eigenstrain_names")),
32 _eigenstrains(_input_eigenstrain_names.size()),
34 _ncols(1 + _subproblem.
mesh().dimension()),
35 _second_order(_subproblem.
mesh().hasSecondOrderElements()),
41 _x(6, DenseVector<
Real>(_ncols)),
43 _adjusted_eigenstrain()
73 for (
unsigned i = 0; i < 6; ++i)
106 for (
unsigned qp = 0; qp <
_qrule->n_points(); ++qp)
122 for (
unsigned qp = 0; qp <
_qrule->n_points(); ++qp)
138 for (
unsigned i = 0; i < 6; ++i)
const MooseArray< Point > & _q_point
const QBase *const & _qrule
std::vector< RankTwoTensor > _eigsum
The sum of all eigenstrains at each integration point.
registerMooseObject("SolidMechanicsApp", ComputeReducedOrderEigenstrain)
void prepareEigenstrain()
Compute either the volume average or linear eigenstrain field in an element.
RankTwoTensor _adjusted_eigenstrain
Filled with _vals and subracted from strain.
virtual void computeProperties() override
const MooseArray< Real > & _JxW
const unsigned _ncols
Number of columns in A matrix (1 plus mesh dimension)
std::vector< DenseVector< Real > > _b
The b array holding the unique eigenstrain components for each integration point. ...
DenseMatrix< Real > _A
The (num q points x ncols) array for the least squares. Holds 1, xcoor, ycoor, zcoor.
void fillFromInputVector(const std::vector< Real > &input, FillMethod fill_method=autodetect)
static InputParameters validParams()
DenseVector< Real > _ATb
Transpose of A times b.
void get_transpose(DenseMatrix< Real > &dest) const
ComputeReducedOrderEigenstrain(const InputParameters ¶meters)
ComputeEigenstrainBase is the base class for eigenstrain tensors.
const bool _second_order
Whether the mesh is made of second order elements.
std::vector< const MaterialProperty< RankTwoTensor > * > _eigenstrains
void sumEigenstrain()
Add contributions from every eigenstrain at each integration point.
DIE A HORRIBLE DEATH HERE typedef LIBMESH_DEFAULT_SCALAR_TYPE Real
GenericMaterialProperty< RankTwoTensor, is_ad > & _eigenstrain
Stores the current total eigenstrain.
std::vector< DenseVector< Real > > _x
The solution vector for each unique component of the adjusted eigenstrain.
static InputParameters validParams()
const std::string _base_name
Base name prepended to material property name.
void resize(const unsigned int new_m, const unsigned int new_n)
DenseMatrix< Real > _AT
Transpose of A.
static const std::complex< double > j(0, 1)
Complex number "j" (also known as "i")
std::vector< Real > _vals
Vector to hold the adjusted strain as computed with _x.
void cholesky_solve(const DenseVector< T2 > &b, DenseVector< T2 > &x)
const MooseArray< Real > & _coord
void initQpStatefulProperties()
std::vector< MaterialPropertyName > _input_eigenstrain_names
void computeQpEigenstrain()
Compute the eigenstrain and store in _eigenstrain.
const Elem & get(const ElemType type_in)
virtual void left_multiply(const DenseMatrixBase< Real > &M2) override final
void vector_mult(DenseVector< Real > &dest, const DenseVector< Real > &arg) const