void NonlinearFluidMaterial :: computeDeviatoricStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &eps, TimeStep *tStep) { NonlinearFluidMaterialStatus *status = static_cast< NonlinearFluidMaterialStatus * >( this->giveStatus(gp) ); double normeps2; answer = eps; if ( eps.giveSize() == 3 ) { normeps2 = eps.at(1) * eps.at(1) + eps.at(2) * eps.at(2) + 0.5 * ( eps.at(3) * eps.at(3) ); answer.at(3) *= 0.5; } else if ( eps.giveSize() == 4 ) { normeps2 = eps.at(1) * eps.at(1) + eps.at(2) * eps.at(2) + eps.at(3) * eps.at(3) + 0.5 * ( eps.at(4) * eps.at(4) ); answer.at(4) *= 0.5; } else { normeps2 = eps.at(1) * eps.at(1) + eps.at(2) * eps.at(2) + eps.at(3) * eps.at(3) + 0.5 * ( eps.at(4) * eps.at(4) + eps.at(5) * eps.at(5) + eps.at(6) * eps.at(6) ); answer.at(4) *= 0.5; answer.at(5) *= 0.5; answer.at(6) *= 0.5; } answer.times( 2.0 * viscosity * ( 1.0 + c * pow(normeps2, alpha * 0.5) ) ); status->letTempDeviatoricStressVectorBe(answer); status->letTempDeviatoricStrainVectorBe(eps); status->letTempStrainNorm2Be(normeps2); }
void NonlinearFluidMaterial :: computeDeviatoricStressVector(FloatArray &answer, GaussPoint *gp, const FloatArray &eps, TimeStep *tStep) { NonlinearFluidMaterialStatus *status = static_cast< NonlinearFluidMaterialStatus * >( this->giveStatus(gp) ); status->letTempDeviatoricStrainVectorBe(eps); double normeps; normeps = eps.at(1) * eps.at(1) + eps.at(2) * eps.at(2) + 0.5 * ( eps.at(3) * eps.at(3) ); normeps = sqrt(normeps); answer = eps; answer.at(3) *= 0.5; answer.times( 2.0 * viscosity * ( 1.0 + c * pow(normeps, alpha) ) ); status->letTempDeviatoricStressVectorBe(answer); }