C C User subroutine vuhard subroutine vuhard ( C Read only - * nblock, * nElement, nIntPt, nLayer, nSecPt, * lAnneal, stepTime, totalTime, dt, cmname, * nstatev, nfieldv, nprops, * props, tempOld, tempNew, fieldOld, fieldNew, * stateOld, * eqps, eqpsRate, C Write only - * yield, dyieldDtemp, dyieldDeqps, * stateNew ) c include 'vaba_param.inc' c dimension nElement(nblock), * props(nprops), * tempOld(nblock), * fieldOld(nblock,nfieldv), * stateOld(nblock,nstatev), * tempNew(nblock), * fieldNew(nblock,nfieldv), * eqps(nblock), * eqpsRate(nblock), * yield(nblock), * dyieldDtemp(nblock), * dyieldDeqps(nblock,2), * stateNew(nblock,nstatev) c parameter ( zero = 0.d0, eqpsFail = 0.25d0 ) parameter ( one = 1.0d0, small=1.0d-9) c character*80 cmname data ldiagnostic /1/ c if ( ldiagnostic .eq. 1 ) then ldiagnostic = 0 if (nprops .eq. 5) then Yield0 = props(1) if (Yield0 .lt. small) then write(*,*)'VUHARD: Small/Negative Yield0' call xplb_exit endif eqpsRate0 = props(2) if (eqpsRate0 .le. zero) then write(*,*) 'VUHARD: Zero/Negative eqpsRate0' call xplb_exit endif power = props(3) if (power .lt. zero) then write(*,*)'VUHARD: Negative power' call xplb_exit endif TangentMod = props(4) YoungsMod = props(5) if (YoungsMod .le. TangentMod) then write(*,*)'VUHARD: YoungsMod less than TangentMod' call xplb_exit endif else write(*,*) 'VUHARD: Wrong number of properties' call xplb_exit endif end if c Yield0 = props(1) eqpsRate0Inv = one / props(2) power = props(3) TangentMod = props(4) YoungsMod = props(5) Hardness = YoungsMod * TangentMod Hardness = Hardness / (YoungsMod - TangentMod) do k = 1, nblock dyieldDeqps(k,1) = Hardness strainrate = eqpsRate(k) * eqpsRate0Inv strain = eqps(k) if (strainrate .gt. small) then Yield(k) = (Yield0 * (one + (strainrate ** power))) * + (Hardness * strain) dyieldDeqps(k,2) = (strainrate ** (power-one)) * * Yield0 * power * eqpsRate0Inv else Yield(k) = (Yield0 * (one + (small ** power))) * + (Hardness * strain) dyieldDeqps(k,2) = (small ** (power-one)) * * Yield0 * power * eqpsRate0Inv endif end do c return end