void ComputeSmallStrain::computeProperties() { Real volumetric_strain = 0.0; for (_qp = 0; _qp < _qrule->n_points(); ++_qp) { //strain = (grad_disp + grad_disp^T)/2 RankTwoTensor grad_tensor((*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); _total_strain[_qp] = ( grad_tensor + grad_tensor.transpose() )/2.0; if (_volumetric_locking_correction) volumetric_strain += _total_strain[_qp].trace() * _JxW[_qp] * _coord[_qp]; } if (_volumetric_locking_correction) volumetric_strain /= _current_elem_volume; for (_qp = 0; _qp < _qrule->n_points(); ++_qp) { if (_volumetric_locking_correction) { Real trace = _total_strain[_qp].trace(); _total_strain[_qp](0,0) += (volumetric_strain - trace) / 3.0; _total_strain[_qp](1,1) += (volumetric_strain - trace) / 3.0; _total_strain[_qp](2,2) += (volumetric_strain - trace) / 3.0; } _mechanical_strain[_qp] = _total_strain[_qp]; //Remove the Eigen strain for (auto es : _eigenstrains) _mechanical_strain[_qp] -= (*es)[_qp]; } }
void LinearElasticMaterial::computeQpStrain() { //strain = (grad_disp + grad_disp^T)/2 RankTwoTensor grad_tensor(_grad_disp_x[_qp], _grad_disp_y[_qp], _grad_disp_z[_qp]); _elastic_strain[_qp] = (grad_tensor + grad_tensor.transpose()) / 2.0; _total_strain[_qp] = _elastic_strain[_qp]; }
void ComputeSmallStrain::computeQpProperties() { //strain = (grad_disp + grad_disp^T)/2 RankTwoTensor grad_tensor((*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); _total_strain[_qp] = ( grad_tensor + grad_tensor.transpose() )/2.0; _mechanical_strain[_qp] = _total_strain[_qp]; //Remove the Eigen strain _mechanical_strain[_qp] -= _stress_free_strain[_qp]; }
void ComputeCrackTipEnrichmentSmallStrain::computeQpProperties() { crackTipEnrichementFunctionAtPoint(_q_point[_qp], _B); unsigned int crack_front_point_index = crackTipEnrichementFunctionDerivativeAtPoint(_q_point[_qp], _dBx); for (unsigned int i = 0; i < 4; ++i) rotateFromCrackFrontCoordsToGlobal(_dBx[i], _dBX[i], crack_front_point_index); _sln = _nl->currentSolution(); for (unsigned int m = 0; m < _ndisp; ++m) { _enrich_disp[m] = 0.0; _grad_enrich_disp[m].zero(); for (unsigned int i = 0; i < _current_elem->n_nodes(); ++i) { Node * node_i = _current_elem->get_node(i); for (unsigned int j = 0; j < 4; ++j) { dof_id_type dof = node_i->dof_number(_nl->number(), _enrich_variable[j][m]->number(), 0); Real soln = (*_sln)(dof); _enrich_disp[m] += (*_fe_phi)[i][_qp] * (_B[j] - _BI[i][j]) * soln; RealVectorValue grad_B(_dBX[j]); _grad_enrich_disp[m] += ((*_fe_dphi)[i][_qp] * (_B[j] - _BI[i][j]) + (*_fe_phi)[i][_qp] * grad_B) * soln; } } } RankTwoTensor grad_tensor_enrich( _grad_enrich_disp[0], _grad_enrich_disp[1], _grad_enrich_disp[2]); RankTwoTensor enrich_strain = (grad_tensor_enrich + grad_tensor_enrich.transpose()) / 2.0; RankTwoTensor grad_tensor((*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); _total_strain[_qp] = (grad_tensor + grad_tensor.transpose()) / 2.0; _total_strain[_qp] += enrich_strain; _mechanical_strain[_qp] = _total_strain[_qp]; // Remove the Eigen strain for (auto es : _eigenstrains) _mechanical_strain[_qp] -= (*es)[_qp]; }
void ComputeSmallStrain::computeProperties() { for (_qp = 0; _qp < _qrule->n_points(); ++_qp) { // if (_ndisplacements < 3) // (*_grad_displacements[2])[_qp] = _zero; //strain = (grad_disp + grad_disp^T)/2 RankTwoTensor grad_tensor((*_grad_disp[0])[_qp], (*_grad_disp[1])[_qp], (*_grad_disp[2])[_qp]); _total_strain[_qp] = ( grad_tensor + grad_tensor.transpose() )/2.0; _mechanical_strain[_qp] = _total_strain[_qp]; //Remove thermal expansion _mechanical_strain[_qp].addIa(-_thermal_expansion_coeff*( _T[_qp] - _T0 )); //Remove the Eigen strain _mechanical_strain[_qp] -= _stress_free_strain[_qp]; } }