Return to PS list |
The following are example plots of the temperature as a function of time (at 10 deg.F/min), the factor aTM as a function of temperature (a linear fit to the plot in the paper), the relaxation modulus as a function of equivalent time elapsed (a bi-linear fit to the plot in the paper), and the equivalent time as a function of time (again, for a 10 deg F/min cooldown)
At last, results. Also included elastic responce at 1 F/min for comparison. See that viscoelastic effects are significant, but not very sensative to the ramp rate.
Finally, code.
character*1 tab double precision time(1000), Temp(1000), x(1000), xx(1000), +oneoverat(1000), dedx(1000), C(1000), stress(1000) c set cprime (in F/sec), other fixed stuff tab = char(09) cprime = 10./60. alpha = 1.3 dt = 280/cprime/800 deps = - dt * cprime*alpha c set times to check. Lots of steps on the ramp c plus a bunch after its over. c Also, do T and x (squiggle), from the curve fits c and integral calcs in the written solution, c and compute time-speed-up and strain increments time(1) = 0. temp(1) = 350 x(1) = 0 C(1) = 3. oneoverat(1) = 10.**14 dedx(1) = -cprime*alpha/oneoverat(1) c during ramp (800 steps!) F_DoBackground call just makes this act c like a proper Mac application do 1 i = 1, 800 write (6,801) i CALL F_DoBackground time(i+1) = dt * i Temp(i+1) = 350-cprime*time(i+1) x(i+1) = 1.e+14/(log(10.)*cprime/20)*(1-10**(-cprime*time(i+1)/20.)) oneoverat(i+1) = 10**((Temp(i-1)-70)/20) 1 dedx(i) = -cprime*alpha/oneoverat(i+1) c after ramp (200 steps, one/day) do 2 i = 802,1000 write (6,801) i CALL F_DoBackground time(i) = time(801) + (i-801) * 3600*24 Temp(i) = 70 x(i) = x(801) + time(i) - time(801) oneoverat(i) = 1 2 dedx(1) = 0 c now compute a table of C vs x values. This is just for plotting. xx(1) = 0 C(1) = 3 do 3 i = 2, 1000 xx(i) = 10**((i-1)/1000.*17.) 3 C(i) = GETC(xx(i)) c do hereditary integral stress(1) = 0 c calculate stress at each time i do 200 i = 2,1000 write (6,802) i CALL F_DoBackground stress(i) = 0 c do so by summing over all the strain increments at times c j that go from zero to now (time i); each multipled by c the C value for the time from the strain (j) to now (i) c also note here an avoid to numerical problems- the factor c x(j+1)-x(j) is the difference between two huge numbers, and will c go incorrectly to -> 0 for large times. We note for constant c time steps that the the strain step is also constant, and just c use it (see notes). After ramp (j>800) no deps, so no additional c stess, but note that we still do these calcs even for i>800 c because the x(i)-x(j) terms continue to change c the 'old' way is commented out below- do 100 j = 1, min((i-1),800) stress(i) = stress(i) + deps * GETC(x(i)-x(j)) 100 continue c do 100 j = 1, i-1 c 100 stress(i) = stress(i) + (x(j+1)-x(j)) * dedx(j) * GETC(x(i)-x(j)) 200 continue c big dump of everything in a tab-separated set of columns c only do one out of every 10! do 300 i = 1, 1000, 10 300 write (6,800) time(i), tab, x(i), tab, Temp(i), tab, oneoverat(i), + tab, dedx(i), tab, stress(i), tab, xx(i), tab, C(i) 800 format(1x, 1pd11.3, 7(a1, 1pd11.3)) 801 format ('+ set up ',i3) 802 format ('+ stress calcs ',i3) c that's all folks! stop end C DOUBLE PRECISION FUNCTION GETC(X) DOUBLE PRECISION X C getc = min((3.-.075*log10(x)),(5.-.25*log10(x))) RETURN END C