diff --git a/src/vrm.f90 b/src/vrm.f90 index 03323d5de26a1cc4c2499987da05a89ecfc959c4..d6ac9ae9b8332d1de74481efc87aa9b071b2218d 100644 --- a/src/vrm.f90 +++ b/src/vrm.f90 @@ -72,120 +72,245 @@ endif select case (trim(plasticity_type)) - case ('vM') - yield = plasticity_parameters(1) - ! strain softening - strain_soft_in=plasticity_parameters(3) - if (strain_soft_in.gt.0.d0) then - strain_soft_out=plasticity_parameters(4) - strain_soft_yield=plasticity_parameters(2) - if (straintot.gt.strain_soft_in) then - yield = (strain_soft_yield-yield)/(strain_soft_out-strain_soft_in)*(straintot-strain_soft_out) + strain_soft_yield - yield = max(yield, strain_soft_yield) - end if - end if - fail = 2.d0*viscosity*e2d-yield - if (fail.gt.0.d0) then - viscosity=0.5d0*yield/e2d - is_plastic=.true. - else - is_plastic=.false. + case ('vM') + yield = plasticity_parameters(1) + ! strain softening + strain_soft_in=plasticity_parameters(3) + if (strain_soft_in.gt.0.d0) then + strain_soft_out=plasticity_parameters(4) + strain_soft_yield=plasticity_parameters(2) + if (straintot.gt.strain_soft_in) then + yield = (strain_soft_yield-yield)/(strain_soft_out-strain_soft_in)*(straintot-strain_soft_out) + strain_soft_yield + yield = max(yield, strain_soft_yield) end if + end if + fail = 2.d0*viscosity*e2d-yield + if (fail.gt.0.d0) then + viscosity=0.5d0*yield/e2d + is_plastic=.true. + else + is_plastic=.false. + end if - case ('DPI','DPII') - !yield = abs(plasticity_parameters(9)-plasticity_parameters(8)*pressure) - ! strain softening - phi=plasticity_parameters(1) - strain_soft_in=plasticity_parameters(3) - if (strain_soft_in.gt.0.d0) then - strain_soft_out=plasticity_parameters(4) - strain_soft_phi=plasticity_parameters(5)/180.d0*3.141592654d0 - if (straintot.gt.strain_soft_in) then - fact=(straintot-strain_soft_in)/(strain_soft_out-strain_soft_in) - fact=min(fact,1.d0) - phi=phi+(strain_soft_phi-phi)*fact - endif + case ('DPI') + ! Strain softening/hardening + phi = plasticity_parameters(1)*pi/180.d0 + strain_soft_in=plasticity_parameters(3) + if (strain_soft_in.gt.0.d0) then + strain_soft_out=plasticity_parameters(4) + strain_soft_phi=plasticity_parameters(5)*pi/180.d0 + if (straintot.gt.strain_soft_in) then + fact=(straintot-strain_soft_in)/(strain_soft_out-strain_soft_in) + fact=min(fact,1.d0) + phi=phi+(strain_soft_phi-phi)*fact endif - yield = max(plasticity_parameters(2)/compressibility,plasticity_parameters(2)+tan(phi)*pressure) - fail = 2.d0*viscosity*e2d-yield - if (fail.gt.0.d0) then - viscosity=0.5d0*yield/e2d - is_plastic=.true. - else - is_plastic=.false. - end if + endif + c = plasticity_parameters(2) + alpha = (2.d0*sin(phi)) /(sqrt(3.d0)*(3.d0-sin(phi))) + k = (6.d0*c*cos(phi))/(sqrt(3.d0)*(3.d0-sin(phi))) + yield = max(c/compressibility,k+alpha*pressure) + fail = 2.d0*viscosity*e2d-yield + if (fail.gt.0.d0) then + viscosity=0.5d0*yield/e2d + is_plastic=.true. + else + is_plastic=.false. + end if - case ('DPIII') - !yield = plasticity_parameters(2)+plasticity_parameters(1)*pressure - yield = max(plasticity_parameters(2)/compressibility,plasticity_parameters(2)+plasticity_parameters(1)*pressure) - fail = 2.d0*viscosity*e2d-yield - if (fail.gt.0.d0) then - viscosity=0.5d0*yield/e2d - is_plastic=.true. - else - is_plastic=.false. - end if + case ('DPII') + ! Strain softening/hardening + phi = plasticity_parameters(1)*pi/180.d0 + strain_soft_in=plasticity_parameters(3) + if (strain_soft_in.gt.0.d0) then + strain_soft_out=plasticity_parameters(4) + strain_soft_phi=plasticity_parameters(5)*pi/180.d0 + if (straintot.gt.strain_soft_in) then + fact=(straintot-strain_soft_in)/(strain_soft_out-strain_soft_in) + fact=min(fact,1.d0) + phi=phi+(strain_soft_phi-phi)*fact + endif + endif + c = plasticity_parameters(2) + alpha = (2.d0*sin(phi)) /(sqrt(3.d0)*(3.d0+sin(phi))) + k = (6.d0*c*cos(phi))/(sqrt(3.d0)*(3.d0+sin(phi))) + yield = max(c/compressibility,k+alpha*pressure) + fail = 2.d0*viscosity*e2d-yield + if (fail.gt.0.d0) then + viscosity=0.5d0*yield/e2d + is_plastic=.true. + else + is_plastic=.false. + end if - case ('MC') - if (params%init_e2d) then - theta = 0.d0 - else - theta = lode_angle(J2d,J3d) + case ('DPIII') + ! Strain softening/hardening + phi = plasticity_parameters(1)*pi/180.d0 + strain_soft_in=plasticity_parameters(3) + if (strain_soft_in.gt.0.d0) then + strain_soft_out=plasticity_parameters(4) + strain_soft_phi=plasticity_parameters(5)*pi/180.d0 + if (straintot.gt.strain_soft_in) then + fact=(straintot-strain_soft_in)/(strain_soft_out-strain_soft_in) + fact=min(fact,1.d0) + phi=phi+(strain_soft_phi-phi)*fact endif - sin_theta = sin(theta) - cos_theta = cos(theta) - sin_phi = plasticity_parameters(8) - cos_phi = plasticity_parameters(9) - c = plasticity_parameters(2) - ! strain softening - strain_soft_in=plasticity_parameters(3) - if (strain_soft_in.gt.0.d0) then + endif + c = plasticity_parameters(2) + alpha = (2.d0*sin(phi)) /(sqrt(3.d0)*3.d0) + k = (6.d0*c*cos(phi))/(sqrt(3.d0)*3.d0) + yield = max(c/compressibility,k+alpha*pressure) + fail = 2.d0*viscosity*e2d-yield + if (fail.gt.0.d0) then + viscosity=0.5d0*yield/e2d + is_plastic=.true. + else + is_plastic=.false. + end if + + case ('DPIV') + ! Strain softening/hardening + phi = plasticity_parameters(1)*pi/180.d0 + strain_soft_in=plasticity_parameters(3) + if (strain_soft_in.gt.0.d0) then strain_soft_out=plasticity_parameters(4) - strain_soft_phi=plasticity_parameters(5)/180.d0*3.141592654d0 - if (straintot.gt.strain_soft_in) then - phi=atan2(plasticity_parameters(8),plasticity_parameters(9)) + strain_soft_phi=plasticity_parameters(5)*pi/180.d0 + if (straintot.gt.strain_soft_in) then fact=(straintot-strain_soft_in)/(strain_soft_out-strain_soft_in) fact=min(fact,1.d0) phi=phi+(strain_soft_phi-phi)*fact - sin_phi=sin(phi) - cos_phi=cos(phi) - endif endif - zeta = cos_theta-sin_phi*sin_theta/sqrt3 - ! modified by Jean - !fail = -pressure*sin_phi+e2d*zeta-c*cos_phi - fail = pressure*sin_phi+2.d0*viscosity*e2d*zeta-c*cos_phi - if (fail.gt.0.d0) then - viscosity=0.5d0/e2d*(c*cos_phi-pressure*sin_phi)/zeta - !if (viscosity<0.d0) then - ! viscosity=0.d0 - ! !print *,viscosity,c*cos_phi,pressure*sin_phi - !end if - is_plastic=.true. - else - is_plastic=.false. - end if + endif + c = plasticity_parameters(2) + alpha = tan(phi)/(sqrt(9.d0+12.d0*(tan(phi))**2.d0)) + k = (3.d0*c)/(sqrt(9.d0+12.d0*(tan(phi))**2.d0)) + yield = max(c/compressibility,k+alpha*pressure) + fail = 2.d0*viscosity*e2d-yield + if (fail.gt.0.d0) then + viscosity=0.5d0*yield/e2d + is_plastic=.true. + else + is_plastic=.false. + end if - case ('Tresca') - if (params%init_e2d) then - theta = 0.d0 - else - theta = lode_angle(J2d,J3d) + case ('DPV') + alpha = plasticity_parameters(1) + k = plasticity_parameters(2) + yield = max(k/compressibility,k+alpha*pressure) + fail = 2.d0*viscosity*e2d-yield + if (fail.gt.0.d0) then + viscosity=0.5d0*yield/e2d + is_plastic=.true. + else + is_plastic=.false. + end if + + case ('DPVI') + ! Strain softening/hardening + phi = plasticity_parameters(1)*pi/180.d0 + strain_soft_in=plasticity_parameters(3) + if (strain_soft_in.gt.0.d0) then + strain_soft_out=plasticity_parameters(4) + strain_soft_phi=plasticity_parameters(5)*pi/180.d0 + if (straintot.gt.strain_soft_in) then + fact=(straintot-strain_soft_in)/(strain_soft_out-strain_soft_in) + fact=min(fact,1.d0) + phi=phi+(strain_soft_phi-phi)*fact endif - yield = plasticity_parameters(1) - cos_theta = cos(theta) - fail = 2.d0*viscosity*e2d*cos_theta-yield - if (fail.gt.0.d0) then - viscosity=0.5d0*yield/e2d/cos_theta - is_plastic=.true. - else - is_plastic=.false. - end if + endif + c = plasticity_parameters(2) + yield = max(c/compressibility,c+tan(phi)*pressure) + fail = 2.d0*viscosity*e2d-yield + if (fail.gt.0.d0) then + viscosity=0.5d0*yield/e2d + is_plastic=.true. + else + is_plastic=.false. + end if + + case ('DPVII') + ! strain softening + phi = plasticity_parameters(1) + strain_soft_in=plasticity_parameters(3) + if (strain_soft_in.gt.0.d0) then + strain_soft_out=plasticity_parameters(4) + strain_soft_phi=plasticity_parameters(5)*pi/180.d0 + if (straintot.gt.strain_soft_in) then + fact=(straintot-strain_soft_in)/(strain_soft_out-strain_soft_in) + fact=min(fact,1.d0) + phi=phi+(strain_soft_phi-phi)*fact + endif + endif + c = plasticity_parameters(2) + sin_phi=sin(phi) + cos_phi=cos(phi) + yield = max(plasticity_parameters(2)/compressibility,pressure*sin_phi+c*cos_phi) + fail = 2.d0*viscosity*e2d-yield + if (fail.gt.0.d0) then + viscosity=0.5d0*yield/e2d + is_plastic=.true. + else + is_plastic=.false. + end if + + case ('MC') + if (params%init_e2d) then + theta = 0.d0 + else + theta = lode_angle(J2d,J3d) + endif + sin_theta = sin(theta) + cos_theta = cos(theta) + ! strain softening + phi = plasticity_parameters(1) + strain_soft_in=plasticity_parameters(3) + if (strain_soft_in.gt.0.d0) then + strain_soft_out=plasticity_parameters(4) + strain_soft_phi=plasticity_parameters(5)*pi/180.d0 + if (straintot.gt.strain_soft_in) then + fact=(straintot-strain_soft_in)/(strain_soft_out-strain_soft_in) + fact=min(fact,1.d0) + phi=phi+(strain_soft_phi-phi)*fact + endif + endif + c = plasticity_parameters(2) + sin_phi = sin(phi) + cos_phi = cos(phi) + zeta = cos_theta-sin_phi*sin_theta/sqrt3 + ! modified by Jean + !fail = -pressure*sin_phi+e2d*zeta-c*cos_phi + fail = pressure*sin_phi+2.d0*viscosity*e2d*zeta-c*cos_phi + if (fail.gt.0.d0) then + viscosity=0.5d0/e2d*(c*cos_phi-pressure*sin_phi)/zeta + !if (viscosity<0.d0) then + ! viscosity=0.d0 + ! !print *,viscosity,c*cos_phi,pressure*sin_phi + !end if + is_plastic=.true. + else + is_plastic=.false. + end if + + case ('Tresca') + if (params%init_e2d) then + theta = 0.d0 + else + theta = lode_angle(J2d,J3d) + endif + yield = plasticity_parameters(1) + cos_theta = cos(theta) + fail = 2.d0*viscosity*e2d*cos_theta-yield + if (fail.gt.0.d0) then + viscosity=0.5d0*yield/e2d/cos_theta + is_plastic=.true. + else + is_plastic=.false. + end if + + case default + print *,plasticity_type + call stop_run('error in vrm$') + flag_vrm_pb = .true. - case default - print *,plasticity_type - call stop_run('error in vrm$') - flag_vrm_pb = .true. end select !write (*,*) 'vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv' @@ -217,44 +342,38 @@ call mpi_comm_size (mpi_comm_world,nproc,ierr) call mpi_comm_rank (mpi_comm_world,iproc,ierr) do i=0,params%nmat - select case (trim(mat(i)%plasticity_type)) - case ('No') - case ('vM') - case ('DPI') - phi = mat(i)%plasticity_parameters(1)*pi/180.d0 - c = mat(i)%plasticity_parameters(2) - alpha = 2.d0*sin(phi) /sqrt(3.d0)/(3.d0-sin(phi)) - k = 6.d0*c*cos(phi)/sqrt(3.d0)/(3.d0-sin(phi)) - mat(i)%plasticity_parameters(8)=alpha - mat(i)%plasticity_parameters(9)=k - if (iproc.eq.0) then - write(8,*) 'material ',i - write(8,*) ' phi =',phi - write(8,*) ' c =',c - write(8,*) ' alpha=',alpha - write(8,*) ' k =',k - end if - case ('DPII') - phi = mat(i)%plasticity_parameters(1)*pi/180.d0 - c = mat(i)%plasticity_parameters(2) - alpha = tan(phi)/sqrt(9.d0+12.d0*(tan(phi))**2) - k = 3.d0*c /sqrt(9.d0+12.d0*(tan(phi))**2) - mat(i)%plasticity_parameters(8)=alpha - mat(i)%plasticity_parameters(9)=k - case ('MC') - phi = mat(i)%plasticity_parameters(1)*pi/180.d0 - mat(i)%plasticity_parameters(8)=sin(phi) - mat(i)%plasticity_parameters(9)=cos(phi) - case ('Tresca') - case ('DPIII') - case default - call stop_run('error in compute_plastic_params$') - end select - if (iproc.eq.0) then - write(8,*) 'material ',i,'plasticity_type ',mat(i)%plasticity_type - write(8,*) 'plasticity_parameters',mat(i)%plasticity_parameters(:) - end if + select case (trim(mat(i)%plasticity_type)) + case ('No') + + case ('vM') + + case ('DPI') + + case ('DPII') + + case ('DPIII') + + case ('DPIV') + + case ('DPV') + + case ('DPVI') + + case ('DPVII') + + case ('MC') + + case ('Tresca') + + case default + call stop_run('error in compute_plastic_params$') + + end select + if (iproc.eq.0) then + write(8,*) 'material ',i,'plasticity_type ',mat(i)%plasticity_type + write(8,*) 'plasticity_parameters',mat(i)%plasticity_parameters(:) + end if end do return -end \ No newline at end of file +end