33
34
35
36#include "implicit_f.inc"
37
38
39
40#include "mvsiz_p.inc"
41
42
43
44 INTEGER MAT(MVSIZ),NEL
46 . pm(npropm,*),
47 . off(*),sig(nel,6),eint(*),qold(*),vol(*),bfrac(*),voln(mvsiz),qnew(*),
48 . psh(*),p0(*),
49 . dvol(*),sold1(*),sold2(*),sold3(*), df(*), er1v(*), er2v(*), wdr1v(*), wdr2v(*), w1(*),
50 . aburn(mvsiz),alpha_unit,amu(*)
51
52
53
54#include "com08_c.inc"
55#include "param_c.inc"
56
57
58
59 INTEGER I,QOPT
61 . einc(mvsiz) , espe(mvsiz), w1df(mvsiz)
63 . tbegin, tend,
64 . volo(mvsiz),facm(mvsiz),pold(mvsiz),pnew(mvsiz),
65 . eadd, lambda,rr,rr2,a,m,n,bulk
66
67
68
69 DO i=1,nel
70 dvol(i)=half*dvol(i)
71 pold(i)=third*(sold1(i)+sold2(i)+sold3(i))
72 einc(i)=dvol(i)*(pold(i)-psh(i)-qold(i)-qnew(i))
73 eint(i)=eint(i)+einc(i)
74 qold(i)=qnew(i)
75 volo(i)=voln(i)/df(i)
76 ENDDO
77
78
79
80 qopt = nint(pm(042,mat(1)))
81 eadd = pm(160,mat(1))
82 tbegin = pm(161,mat(1))
83 tend = pm(162,mat(1))
84 rr = pm(163,mat(1))
85 a = pm(164,mat(1))
86 m = pm(165,mat(1))
87 n = pm(166,mat(1))
88 rr2 = pm(167,mat(1))
89 alpha_unit = pm(168,mat(1))
90 bulk = pm(044,mat(1))
91 IF(eadd==zero)THEN
92
93
94 ELSEIF(qopt==0)THEN
95
96 DO i=1,nel
97 lambda = zero
98 IF(tt > tend .AND. aburn(i)==one)THEN
99 lambda = one
100 aburn(i) = one
101 ELSEIF (tt <= tbegin)THEN
102 lambda = zero
103 aburn(i) = zero
104 ELSE
105 lambda = one
106 eint(i) = eint(i)+(lambda-aburn(i))*eadd*
max(em20,volo(i))
107 aburn(i) = one
108 ENDIF
109 ENDDO
110 ELSEIF(qopt==1)THEN
111
112 DO i=1,nel
113 lambda = zero
114 IF(tt > tend .AND. aburn(i)==one)THEN
115 lambda = one
116 aburn(i) = one
117 ELSEIF (tt <= tbegin)THEN
118 lambda = zero
119 aburn(i) = zero
120 ELSE
121 lambda = (tt-tbegin)*rr
122 lambda =
min(one,lambda)
123 eint(i) = eint(i)+(lambda-aburn(i))*eadd*
max(em20,volo(i))
124 aburn(i) = lambda
125 ENDIF
126 ENDDO
127 ELSEIF(qopt==2)THEN
128
129 DO i=1,nel
130 lambda = zero
131 IF(tt > tend .AND. aburn(i)==one)THEN
132 lambda = one
133 aburn(i) = one
134 ELSEIF (tt <= tbegin)THEN
135 lambda = zero
136 aburn(i) = zero
137 ELSE
138 lambda = half*rr*tt**2 - rr*tbegin*tt + rr2
139 lambda =
max(zero,
min(one,lambda))
140 eint(i) = eint(i)+(lambda-aburn(i))*eadd*
max(em20,volo(i))
141 aburn(i) = lambda
142 ENDIF
143 ENDDO
144 ELSEIF(qopt==3)THEN
145
146 DO i=1,nel
147 lambda = zero
148 IF(-pold(i)-psh(i) > zero )THEN
149 lambda=aburn(i)+ dt1*a*exp( m*log(one+aburn(i)) )*exp(n*log(alpha_unit*(-pold(i)-psh(i))))
150 lambda =
max(lambda,zero)
151 lambda =
min(lambda,one)
152 eint(i) = eint(i)+(lambda-aburn(i))*eadd*
max(em20,volo(i))
153 aburn(i)= lambda
154 ENDIF
155 ENDDO
156 ENDIF
157
158
159 DO i=1,nel
160 espe(i)=eint(i)/
max(em20,volo(i))
161 w1df(i)=bfrac(i)*w1(i)/df(i)
162 facm(i)=bfrac(i)*(wdr1v(i)*er1v(i)+wdr2v(i)*er2v(i))
163 ENDDO
164
165 DO i=1,nel
166 pnew(i)= - psh(i) + (one - bfrac(i)) * (p0(i) + bulk * amu(i)) +
167 . (facm(i)+(espe(i))*w1df(i))/(one +w1df(i)*dvol(i)/
max(em20,volo(i)))
168 ENDDO
169
170 DO i=1,nel
171
172 pnew(i)=
max(zero - psh(i), pnew(i))*off(i)
173 ENDDO
174
175 DO i=1,nel
176 einc(i)= einc(i)-(pnew(i) + psh(i))*dvol(i)
177 eint(i)=(eint(i)-(pnew(i) + psh(i))*dvol(i))/
max(em20,vol(i))
178 ENDDO
179
180 DO i=1,nel
181 sig(i,1)=sig(i,1)*off(i)-pnew(i)
182 sig(i,2)=sig(i,2)*off(i)-pnew(i)
183 sig(i,3)=sig(i,3)*off(i)-pnew(i)
184 ENDDO
185
186
187 RETURN