8#ifndef model_ClusterDynamicsFEM_H_
9#define model_ClusterDynamicsFEM_H_
12#include <Eigen/CholmodSupport>
16#include <Eigen/UmfPackSupport>
39 typedef Eigen::Matrix<double,dim+1,1>
BaryType;
55 typedef Eigen::Matrix<double,dim+1,1>
BaryType;
105 template<
class Trial>
112 return trial->field();
119 template<
class Trial>
126 return trial->field();
136 const std::shared_ptr<InvDscaling<dim>>
iDs;
138 const Eigen::Matrix<double,mSize,mSize>
invTrD;
148 std::shared_ptr<MobileBilinearWeakFormType>
mBWF;
149 std::shared_ptr<MobileIncrementBilinearWeakFormType>
dmBWF;
159 Eigen::MatrixXd
conservedRows(
const bool useImmobileClusters)
const;
179 void solve(
const bool hasDiscreteLoops);
Eigen::VectorXd globalVector() const
std::shared_ptr< Trial > trial
const auto & field() const
void enforceMobileConstraints()
MicrostructureBase< dim >::NodeType NodeType
std::shared_ptr< MobileGradType > mobileGrad
const std::shared_ptr< InvDscaling< dim > > iDs
void solve(const bool hasDiscreteLoops)
const ClusterDynamicsParameters< dim > & cdp
TrialFunction< 'd', mSize, FiniteElementType > MobileIncrementTrialType
std::shared_ptr< MobileFluxType > mobileFlux
SparseMatrixType diffusionMatrix
std::shared_ptr< MobileBilinearWeakFormType > mBWF
VectorDim inelasticDisplacementRate(const VectorDim &, const NodeType *const, const ElementType *const, const SimplexDim *const) const
std::shared_ptr< ImmobileRateTrialType > immobileRateTrial
MatrixDim averageBetaP() const
TrialGrad< MobileIncrementTrialType > MobileIncrementGradType
MatrixDim averageBetaVKernel(const Eigen::Matrix< double, dim, 1 > &a1, const ElementType &ele) const
TrialGrad< MobileTestType > MobileTestGradType
std::shared_ptr< MobileIncrementTrialType > mobileClustersIncrement
std::vector< Eigen::Matrix< double, dim, dim > > betaV(const ElementType &ele, const BaryType &bary) const
std::shared_ptr< Problem > mSolver
TrialProd< FluxMatrix< dim >, MobileGradType > MobileFluxType
void updateImmobileClusters(const double dt)
static constexpr int mSize
static constexpr int dVorder
std::shared_ptr< ImmobileTrialType > immobileClusters
TrialFunction< 'r', iSize, FiniteElementType > ImmobileRateTrialType
std::shared_ptr< Load< MobileIncrementTrialType > > reactionLoad
TrialFunction< 'z', dim, FiniteElementType > DiffusiveTrialType
const std::map< size_t, std::vector< VectorDim > > sinkNormals
static constexpr int iSize
TrialFunction< 'm', mSize, FiniteElementType > MobileTrialType
BilinearForm< MobileTestGradType, TrialProd< Constant< double, 1, 1 >, MobileFluxType > > MobileBilinearFormType
std::vector< Eigen::Matrix< double, dim, dim > > betaP(const ElementType &ele, const BaryType &bary) const
Eigen::SparseMatrix< double > SparseMatrixType
MatrixDim averageBetaPKernel(const Eigen::Matrix< double, dim, 1 > &a1, const ElementType &ele) const
BilinearWeakForm< MobileBilinearFormType, VolumeIntegrationDomainType > MobileBilinearWeakFormType
MicrostructureBase< dim >::SimplexDim SimplexDim
std::shared_ptr< MobileTrialType > mobileClusters
IntegrationDomain< FiniteElementType, 0, dVorder, GaussLegendre > VolumeIntegrationDomainType
std::shared_ptr< Load< MobileTrialType > > mobileLoad
std::shared_ptr< MobileIncrementBilinearWeakFormType > dmBWF
VolumeIntegrationDomainType dV
MicrostructureBase< dim >::ElementType ElementType
MicrostructureBase< dim >::MatrixDim MatrixDim
MicrostructureBase< dim >::VectorDim VectorDim
void initializeConfiguration(const DefectiveCrystalConfigIO< dim > &configIO, const std::ofstream &f_file, const std::ofstream &F_labels)
FiniteElement< ElementType > FiniteElementType
TrialFunction< 'i', iSize, FiniteElementType > ImmobileTrialType
std::shared_ptr< MatrixForm< MobileIncrementTrialType > > reactionMatrix
const Eigen::Matrix< double, mSize, mSize > invTrD
Eigen::VectorXd immobileClusterRate
TrialProd< InvDscaling< dim >, MobileTrialType > MobileTestType
std::vector< Eigen::Triplet< double > > diffusionTriplets
const Eigen::VectorXd cascadeGlobalProduction
BilinearWeakForm< MobileIncrementBilinearFormType, VolumeIntegrationDomainType > MobileIncrementBilinearWeakFormType
std::shared_ptr< Problem > rSolver
MatrixDim averageBetaV() const
TrialGrad< MobileIncrementTestType > MobileIncrementTestGradType
TrialGrad< MobileTrialType > MobileGradType
TrialProd< InvDscaling< dim >, MobileIncrementTrialType > MobileIncrementTestType
TrialProd< FluxMatrix< dim >, MobileIncrementGradType > MobileIncrementFluxType
const DefectiveCrystalBase< dim > & ddBase
BilinearForm< MobileIncrementTestGradType, TrialProd< Constant< double, 1, 1 >, MobileIncrementFluxType > > MobileIncrementBilinearFormType
Eigen::MatrixXd conservedRows(const bool useImmobileClusters) const
void solveMobileClusters(const bool hasDiscreteLoops)
WeakProblem< Eigen::SparseLU< SparseMatrixType >, Eigen::BiCGSTAB< SparseMatrixType > > Problem
ClusterDynamicsFEM(DefectiveCrystalBase< dim > &ddBase_in, const ClusterDynamicsParameters< dim > &cdp_in)
MicrostructureBase< dim >::VectorMSize VectorMSize
std::shared_ptr< Problem > iSolver
void solveImmobileClusters()
Eigen::Matrix< double, dim+1, 1 > BaryType
static constexpr int mSize
static constexpr int iSize
LagrangeElement< 3, 2 > ElementType
FluxMatrix(const ClusterDynamicsParameters< dim > &cdp_in)
static constexpr int mSize
static constexpr int rows
Eigen::Matrix< double, dim+1, 1 > BaryType
const MatrixType operator()(const ElementType &elem, const BaryType &bary) const
static constexpr int cols
const ClusterDynamicsParameters< dim > & cdp
Eigen::Matrix< double, rows, cols > MatrixType
DefectiveCrystalBase< dim >::ElementType ElementType
const MatrixType operator()(const ElementType &elem, const BaryType &bary) const
DefectiveCrystalBase< dim >::ElementType ElementType
const ClusterDynamicsParameters< dim > & cdp
InvDscaling(const ClusterDynamicsParameters< dim > &cdp_in)
Eigen::Matrix< double, dim+1, 1 > BaryType
static constexpr int cols
static constexpr int rows
Eigen::Matrix< double, rows, cols > MatrixType
static constexpr int mSize
Eigen::Matrix< double, mSize, 1 > VectorMSize
Eigen::Matrix< double, dim, dim > MatrixDim
ElementType::NodeType NodeType
Eigen::Matrix< double, dim, 1 > VectorDim
DefectiveCrystalBase< dim >::ElementType ElementType
Simplex< dim, dim > SimplexDim