8#ifndef model_ElasticDeformation_cpp_
9#define model_ElasticDeformation_cpp_
21 bool kd(
const int&
i,
const int&
j)
31 typedef typename UniformControllerType::MatrixVoigt MatrixVoigt;
32 typedef typename UniformControllerType::MatrixVoigt MatrixVoigt;
35 const double mu(ddBase.poly.mu);
36 const double nu(ddBase.poly.nu);
37 const double lam(2.0*
nu*
mu/(1.0-2.0*
nu));
38 MatrixVoigt C(MatrixVoigt::Zero());
39 for(
int vI=0;vI<SymmetricVoigtTraits<dim>::voigtSize;++vI)
41 const auto&
i(ddBase.voigtTraits.tensorIndex(vI,0));
42 const auto&
j(ddBase.voigtTraits.tensorIndex(vI,1));
43 for(
int vJ=0;vJ<SymmetricVoigtTraits<dim>::voigtSize;++vJ)
45 const auto&
k(ddBase.voigtTraits.tensorIndex(vJ,0));
46 const auto& l(ddBase.voigtTraits.tensorIndex(vJ,1));
51 TextFileParser parser(ddBase.simulationParameters.traitsIO.inputFilesFolder+
"/ElasticDeformation.txt");
107 const MatrixDim aps(0.5*(apd+apd.transpose()));
115 std::cout<<
" from configIO,"<<std::flush;
122 if(configIO.displacementMatrix().size())
124 throw std::runtime_error(
"ElasticDeformation: TrialFunction u initializatoin size mismatch");
142 std::cout<<
", zDot "<<std::flush;
145 zDot.template segment<dim>(dim*node.gID)=this->
microstructures.inelasticDisplacementRate(node.P0,&node,
nullptr,
nullptr);
156 const MatrixDim aps(0.5*(apd+apd.transpose()));
173 for(
const auto& entry : base.fe->elements())
175 const auto&
e=entry.second;
176 for(
size_t k=0;
k<Q::quadratureOrder;++
k)
184 stress+=physics->stress(
e.position(bary),
nullptr,&
e,
nullptr);
187 const auto voigt=base.voigtTraits.m2v(
stress,
false);
188 const double weight=
e.absJ(bary)*Q::weight(
k);
189 otherStress+=weight/base.mesh.volume()*voigt;
193 source.template segment<dim>(dim*
e.node(node).gID)+=local.template segment<dim>(dim*node);
199 const double time=base.simulationParameters.totalTime;
206 std::cout<<
", zDot "<<std::flush;
210 zDot.template segment<dim>(dim*node.gID)=this->
microstructures.inelasticDisplacementRate(node.P0,&node,
nullptr,
nullptr);
241 const auto epsil(
uniformLoadController->grad(this->microstructures.ddBase.simulationParameters.totalTime));
242 const auto sigma(
uniformLoadController->flux(this->microstructures.ddBase.simulationParameters.totalTime));
244 f_file<<epsil.transpose()<<
" "<<sigma.transpose()<<
" ";
252 const std::string lab(
"e_"+std::to_string(
i)+std::to_string(
j));
259 const std::string lab(
"s_"+std::to_string(
i)+std::to_string(
j));
267 configIO.displacementMatrix().resize(nNodes,dim+dim);
268 configIO.displacementMatrix().block(0,0,nNodes,dim)=
elasticDeformationFEM->u->dofVector().reshaped(dim,nNodes).transpose();
269 configIO.displacementMatrix().block(0,dim,nNodes,dim)=
elasticDeformationFEM->z->dofVector().reshaped(dim,nNodes).transpose();
276 return VectorDim::Zero();
282 return MatrixDim::Zero();
288 return MatrixDim::Zero();
352 return VectorMSize::Zero();
358 return VectorISize::Zero();
372 return MatrixDim::Zero();
Eigen::Matrix< double, 6, 1 > Vector6
static constexpr int nodesPerElement
const Simplex< dim, dim > & simplex
A const reference to the Simplex that this element refers to.
Eigen::Matrix< double, dim+1, 1 > pos2bary(const Eigen::Matrix< double, dim, 1 > &P) const
auto weakProblem(std::shared_ptr< BWF > bwf, std::shared_ptr< LWF > lwf, WeakProblemOptions options={})
std::unique_ptr< UniformController< SymmetricVoigtTraits< dim >::voigtSize > > getUniformEDcontroller(const DefectiveCrystalBase< dim > &ddBase)
auto eval(const std::shared_ptr< T > &t)
bool kd(const int &i, const int &j)
static VectorHigherDimD x2l(const VectorDimD &X)
MicrostructureBase(const std::string &tag_in, MicrostructureContainer< dim > &m_in)
MicrostructureContainerType & microstructures
double timeSinceLastUpdate() const
A static class template for generating quadrature abcsissas and weights for arbitrary-order and Quadr...
static constexpr int voigtSize