void ComputeCosseratIncrementalSmallStrain::computeQpProperties() { RankTwoTensor strain((*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); RankTwoTensor strain_old((*_grad_disp_old[0])[_qp], (*_grad_disp_old[1])[_qp], (*_grad_disp_old[2])[_qp]); RealVectorValue wc_vector((*_wc[0])[_qp], (*_wc[1])[_qp], (*_wc[2])[_qp]); RealVectorValue wc_vector_old((*_wc_old[0])[_qp], (*_wc_old[1])[_qp], (*_wc_old[2])[_qp]); for (unsigned i = 0; i < LIBMESH_DIM; ++i) for (unsigned j = 0; j < LIBMESH_DIM; ++j) for (unsigned k = 0; k < LIBMESH_DIM; ++k) { strain(i, j) += PermutationTensor::eps(i, j, k) * wc_vector(k); strain_old(i, j) += PermutationTensor::eps(i, j, k) * wc_vector_old(k); } _deformation_gradient[_qp] = strain; _deformation_gradient[_qp].addIa(1.0); // Gauss point deformation gradient const RankTwoTensor total_strain_increment = strain - strain_old; _strain_increment[_qp] = total_strain_increment; _strain_increment[_qp] -= _eigenstrain_increment[_qp]; _strain_rate[_qp] = _strain_increment[_qp]/_dt; _total_strain[_qp] = _total_strain_old[_qp] + total_strain_increment; _mechanical_strain[_qp] = _mechanical_strain_old[_qp] + _strain_increment[_qp]; RankTwoTensor curv((*_grad_wc[0])[_qp], (*_grad_wc[1])[_qp], (*_grad_wc[2])[_qp]); RankTwoTensor curv_old((*_grad_wc_old[0])[_qp], (*_grad_wc_old[1])[_qp], (*_grad_wc_old[2])[_qp]); _curvature_increment[_qp] = curv - curv_old; _curvature[_qp] = _curvature_old[_qp] + _curvature_increment[_qp]; }
void CosseratLinearElasticMaterial::computeQpStrain() { RankTwoTensor strain(_grad_disp_x[_qp], _grad_disp_y[_qp], _grad_disp_z[_qp]); RealVectorValue wc_vector((*_wc[0])[_qp], (*_wc[1])[_qp], (*_wc[2])[_qp]); for (unsigned i = 0; i < LIBMESH_DIM; ++i) for (unsigned j = 0; j < LIBMESH_DIM; ++j) for (unsigned k = 0; k < LIBMESH_DIM; ++k) strain(i, j) += PermutationTensor::eps(i, j, k) * wc_vector(k); _elastic_strain[_qp] = strain; _curvature[_qp] = RankTwoTensor((*_grad_wc[0])[_qp], (*_grad_wc[1])[_qp], (*_grad_wc[2])[_qp]); }
void ComputeCosseratSmallStrain::computeQpProperties() { RankTwoTensor strain((*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); RealVectorValue wc_vector((*_wc[0])[_qp], (*_wc[1])[_qp], (*_wc[2])[_qp]); for (unsigned i = 0; i < LIBMESH_DIM; ++i) for (unsigned j = 0; j < LIBMESH_DIM; ++j) for (unsigned k = 0; k < LIBMESH_DIM; ++k) strain(i, j) += PermutationTensor::eps(i, j, k) * wc_vector(k); _total_strain[_qp] = strain; _mechanical_strain[_qp] = strain; for (auto es : _eigenstrains) _mechanical_strain[_qp] -= (*es)[_qp]; _curvature[_qp] = RankTwoTensor((*_grad_wc[0])[_qp], (*_grad_wc[1])[_qp], (*_grad_wc[2])[_qp]); }