void Compute2DFiniteStrain::computeProperties() { // Method from Rashid, 1993 RankTwoTensor ave_Fhat; Real ave_dfgrd_det = 0.0; for (_qp = 0; _qp < _qrule->n_points(); ++_qp) { // Deformation gradient calculation for 2D problems // Note: x_disp is the radial displacement, y_disp is the axial displacement RankTwoTensor A((*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); //Deformation gradient RankTwoTensor Fbar((*_grad_disp_old[0])[_qp], (*_grad_disp_old[1])[_qp], (*_grad_disp_old[2])[_qp]); //Old Deformation gradient // Compute the displacement gradient (2,2) value for plane strain, generalized plane strain, or axisymmetric problems A(2,2) = computeGradDispZZ(); Fbar(2,2) = computeGradDispZZold(); // Gauss point deformation gradient _deformation_gradient[_qp] = A; _deformation_gradient[_qp].addIa(1.0); A -= Fbar; //very nearly A = gradU - gradUold, adapted to cylindrical coords Fbar.addIa(1.0); //Fbar = ( I + gradUold) //Incremental deformation gradient _Fhat = I + A Fbar^-1 _Fhat[_qp] = A * Fbar.inverse(); _Fhat[_qp].addIa(1.0); // Calculate average _Fhat for volumetric locking correction ave_Fhat += _Fhat[_qp] * _JxW[_qp] * _coord[_qp]; // Average deformation gradient ave_dfgrd_det += _deformation_gradient[_qp].det() * _JxW[_qp] * _coord[_qp]; } // needed for volumetric locking correction ave_Fhat /= _current_elem_volume; // average deformation gradient ave_dfgrd_det /=_current_elem_volume; for (_qp = 0; _qp < _qrule->n_points(); ++_qp) { // Finalize volumetric locking correction _Fhat[_qp] *= std::cbrt(ave_Fhat.det() / _Fhat[_qp].det()); computeQpStrain(); // Volumetric locking correction _deformation_gradient[_qp] *= std::cbrt(ave_dfgrd_det / _deformation_gradient[_qp].det()); } }
void Compute2DIncrementalStrain::computeTotalStrainIncrement(RankTwoTensor & total_strain_increment) { // Deformation gradient calculation for 2D problems // Note: x_disp is the radial displacement, y_disp is the axial displacement RankTwoTensor A((*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); //Deformation gradient RankTwoTensor Fbar((*_grad_disp_old[0])[_qp], (*_grad_disp_old[1])[_qp], (*_grad_disp_old[2])[_qp]); //Old Deformation gradient // Compute the displacement gradient (2,2) value for plane strain, generalized plane strain, or axisymmetric problems A(2,2) = computeGradDispZZ(); Fbar(2,2) = computeGradDispZZOld(); _deformation_gradient[_qp] = A; _deformation_gradient[_qp].addIa(1.0); A -= Fbar; //very nearly A = gradU - gradUold, adapted to cylindrical coords total_strain_increment = 0.5 * (A + A.transpose()); }