c c User subroutine VUSDFLD for user-defined fields c subroutine vusdfld( c Read only - * nblock, nstatev, nfieldv, nprops, ndir, nshr, * jElemUid, kIntPt, kLayer, kSecPt, * stepTime, totalTime, dt, cmname, * coordMp, direct, T, charLength, props, * stateOld, c Write only - * stateNew, field ) c include 'vaba_param.inc' c dimension props(nprops), * jElemUid(nblock), coordMp(nblock, *), * direct(nblock, 3, 3), T(nblock,3,3), * charLength(nblock), * stateOld(nblock, nstatev), * stateNew(nblock, nstatev), * field(nblock, nfieldv) character*80 cmname c character*3 cData(maxblk*6) dimension jData(maxblk*6) dimension strn(maxblk*6) dimension strnr(maxblk*6) dimension tmps(maxblk*6) c c Multi-process information (if needed) call vgetnumcpus( numProcesses ) call vgetrank( kProcessNum ) c Get strain peeq and temperature from previous increment jStatus=1 call vgetvrm( 'PE', strn, jData, cData, jStatus ) jStatus=1 call vgetvrm( 'ER', strnr, jData, cData, jStatus ) jStatus=1 call vgetvrm( 'TEMP', tmps, jData, cData, jStatus ) c do k = 1, nblock d = stateOld(k,1) hv = stateOld(k,2) c Get strain strainrate temp values from previous increment e12 = 2.0*strn(k) erate12 = 2.0*strnr(k) tem = tmps(k) + 273 c f1 = 0.004*(erate12**0.073)*(2.718**(27448/(8.314*tem))) d = 20.d0 hv = 315.d0 c if (e12 .ge. f1) then d = 3200*erate12**(-0.088)*(2.718**(-36848/(8.314*tem))) hv = 315 + 80*d**(-0.5) end if field(k,1) = d stateNew(k,1) = field(k,1) field(k,2) = hv stateNew(k,2) = field(k,2) end do c return end