41 1 NSTRF ,D ,DR ,V ,VR ,FSAV ,
42 2 SECFCUM,A ,AR ,SECBUF ,MS ,IN ,
43 3 X ,FANI ,WEIGHT,XSEC ,IAD_ELEM,FR_ELEM ,
44 4 RG_CUT ,IAD_CUT,FR_CUT,WEIGHT_MD ,IOLDSECT,
45 5 STABSEN,DIMFB ,TABS ,FBSAV6 ,WFEXT)
49#include "implicit_f.inc"
63 INTEGER NSTRF(*), WEIGHT(*), IAD_ELEM(2,*), FR_ELEM(*),
64 . RG_CUT(*), IAD_CUT(NSPMD+2,*), FR_CUT(*),WEIGHT_MD(*),
65 . , STABSEN,DIMFB,TABS(STABSEN)
67 . D(3,*), DR(3,*), V(3,*), VR(3,*), A(3,*), AR(3,*), MS(*),
68 . fsav(nthvki,*), secfcum(7,numnod,*), secbuf(*), in(*),
69 . fani(3,*), x(3,*), xsec(4,3,*)
70 DOUBLE PRECISION FBSAV6(12,6,DIMFB)
71 DOUBLE PRECISION,
INTENT(INOUT) :: WFEXT
75 INTEGER J, I, K, , I1, I2, N, KR1,KR2,KR3,K0,KR0,K1,K2,
76 . ifrl1, ifrl2, l, id_sec,
TYPE, lrec, nnod,kr11,kr12, lenr,
77 . kr21,kr22,nbinter, nn, len, kc, nsize, nnodg, size, nnodt,
79 my_real dw, tt1, tt2, tt3, vi, dd, d1, d2,wfextl, aold, tnext, deltat,err(8), FF, FOLD, ALPHA, AA, DV, WA(10)
90 IF(nstrf(k0)+nstrf(k0+14)>0)
THEN
95 k2 = k0 + 30 + nstrf(k0+14)
102 lenr = iad_elem(1,nspmd+1)-iad_elem(1,1)
104 1 nstrf(k2),secfcum(1,1,i),iad_elem,fr_elem,
SIZE,
105 2 lenr ,nstrf(k0+6),weight)
108 k2 = k0 + 30 + nstrf(k0+14)
110 1 nstrf(k0+6),nstrf(k0+3),nstrf(k0+4),nstrf(k0+5),nstrf(k2),x,
111 2 v ,vr ,fsav(1,i),fani(1,1+2*(i-1)),secfcum(1,1,i),ms,
112 3 in ,nstrf(k0+26),xsec(1,1,i) )
116 IF(nstrf(1)==0.AND.nstrf(2)==0)
RETURN
126 IF(nstrf(1)>=1.AND.tnext<=tt)
THEN
127 secbuf(5) = tnext + deltat
132 IF(ispmd==0 .AND. ioldsect == 1)
THEN
141 IF(ispmd==0 .AND. ioldsect /= 1 .AND.
TYPE >= 1) then
148 nbinter = nstrf(k0+14)
160 ELSEIF(ispmd==0)
THEN
163 nnodg = iad_cut(nspmd+2,n)
172 nsize = iad_cut(nspmd+1,n)
173 nnodg = iad_cut(nspmd+2,n)
179 1 nnod ,nstrf(k2),d ,dr ,rg_cut(kc),
180 2 iad_cut(1,n),nsize ,nnodg,weight,2 )
183 r4 = d(1,nstrf(k2+i-1))
185 r4 = d(2,nstrf(k2+i-1))
187 r4 = d(3,nstrf(k2+i-1))
189 r4 = dr(1,nstrf(k2+i-1))
191 r4 = dr(2,nstrf(k2+i-1))
193 r4 = dr(3,nstrf(k2+i-1))
203 nsize = iad_cut(nspmd+1,n)
204 nnodg = iad_cut(nspmd+2,n)
210 1 nnod ,nstrf(k2),d ,dr ,rg_cut(kc),
211 2 iad_cut(1,n),nsize ,nnodg,weight,1 )
214 r4 = d(1,nstrf(k2+i-1))
216 r4 = d(2,nstrf(k2+i-1))
218 r4 = d(3,nstrf(k2+i-1))
236 nsize = iad_cut(nspmd+1,n)
237 nnodg = iad_cut(nspmd+2,n)
243 1 nnod ,nstrf(k2),secfcum(1,1,n),rg_cut(kc),iad_cut(1,n),
244 2 nsize,nnodg ,weight ,2 )
247 r4 = secfcum(1,nstrf(k2+i-1),n)
249 r4 = secfcum(2,nstrf(k2+i-1),n)
251 r4 = secfcum(3,nstrf(k2+i-1),n)
253 r4 = secfcum(5,nstrf(k2+i-1),n)
255 r4 = secfcum(6,nstrf(k2+i-1),n)
257 r4 = secfcum(7,nstrf(k2+i-1),n)
267 nsize = iad_cut(nspmd+1,n)
268 nnodg = iad_cut(nspmd+2,n)
274 1 nnod ,nstrf(k2),secfcum(1,1,n),rg_cut(kc),iad_cut(1,n),
275 2 nsize,nnodg ,weight ,1 )
278 r4 = secfcum(1,nstrf(k2+i-1),n)
280 r4 = secfcum(2,nstrf(k2+i-1),n)
282 r4 = secfcum(3,nstrf(k2+i-1),n)
294 IF(type>=1) kc = kc + nnod
313 nbinter = nstrf(k0+14)
315 k2 = k0 + 30 + nbinter
319 kr21 = kr2 + ifrl2*6*nnod
320 kr22 = kr2 + ifrl1*6*nnod
328 IF(weight_md(ii)==1)
THEN
329 fold = secfcum(k,ii,n)
330 d2 = secbuf(kr22+6*i-7+k)
331 d1 = secbuf(kr21+6*i-7+k)
332 ff = (tt*(d2-d1)+tt2*d1-tt1*d2) / (tt2-tt1)
333 err(k) = err(k) + (ff - fold)
334 err(4) = err(4) + (ff - fold)**2
340 IF(weight_md(ii)==1)
THEN
341 fold = secfcum(k+4,ii,n)
342 d2 = secbuf(kr22+6*i-4+k)
343 d1 = secbuf(kr21+6*i-4+k)
344 ff = (tt*(d2-d1)+tt2*d1-tt1*d2) / (tt2-tt1)
345 err(k+4) = err(k+4) + (ff - fold)
346 err(8) = err(8) + (ff - fold)**2
351 fsav(11,n) = fsav(11,n) + err(1)*dt12
352 fsav(12,n) = fsav(12,n) + err(2)*dt12
353 fsav(13,n) = fsav(13,n) + err(3)*dt12
355 fsav(16,n) = fsav(16,n) + err(5)*dt12
356 fsav(17,n) = fsav(17,n) + err(6)*dt12
357 fsav(18,n) = fsav(18,n) + err(7)*dt12
375 IF(nstrf(k0)>=100) nnodt = nnodt + iad_cut(nspmd+2,i)
399 nbinter = nstrf(k0+14)
400 alpha = 1.-secbuf(kr0+2)
401 IF(type>=100.AND.alpha/=0.0)
THEN
402 k2 = k0 + 30 + nbinter
406 kr11 = kr1 + ifrl2*6*nnod
407 kr12 = kr1 + ifrl1*6*nnod
423 d2 = secbuf(kr12+6*i-7+k)
424 d1 = secbuf(kr11+6*i-7+k)
425 dd = ((tt+dt2)*(d2-d1)+tt2*d1-tt1*d2) / (tt2-tt1)
426 vi = (dd-d(k,ii))/dt2
427 aa = alpha*((vi-v(k,ii))/dt12 - a(k,ii))
428 a(k,ii) = a(k,ii) + aa
429 IF(weight(ii)==1)
THEN
431 dw = dw + half*(v(k,ii)+half*dv)*ms(ii)*aa
432 err(k)=err(k)+weight_md(ii)*ms(ii)*(vi-v(k,ii)-dv)
434 . + weight_md(ii)*ms(ii)*(vi**2-(v(k,ii)+dv)**2)
440 d2 = secbuf(kr12+6*i-4+k)
441 d1 = secbuf(kr11+6*i-4+k)
442 dd = ((tt+dt2)*(d2-d1)+tt2*d1-tt1*d2) / (tt2-tt1)
443 vi = (dd-dr(k,ii))/dt2
444 aa = alpha*((vi-vr(k,ii))/dt12 - ar(k,ii))
445 ar(k,ii) = ar(k,ii) + aa
446 IF(weight(ii)==1)
THEN
448 dw = dw + half*(vr(k,ii)+half*dv)*in(ii)*aa
450 . + weight_md(ii)*in(ii)*(vi-vr(k,ii) - dv)
452 . + weight_md(ii)*in(ii)*(vi**2-(vr(k,ii)+dv)**2)
457 wfextl=wfextl + dt1*dw
465 wa(1) = secbuf(kr0+1)
466 wa(2) = secbuf(kr0+3)
467 wa(3) = secbuf(kr0+4)
470 secbuf(kr0+1) = wa(1)
471 secbuf(kr0+3) = wa(2)
472 secbuf(kr0+4) = wa(3)
476 wa(1) = secbuf(kr0+1)
477 wa(2) = secbuf(kr0+3)
478 wa(3) = secbuf(kr0+4)
489 fsav(25,n) = half*err(4)
493 fsav(29,n) = half*err(8)
494 fsav(30,n) = fsav(30,n) + wfextl + secbuf(kr0+4)
496 IF(stabsen/=0) isect=tabs(n+1)-tabs(n)
498 fbsav6(7,2:6,isect) = zero
499 fbsav6(7,1,isect)=fsav(30,n)
510 k2 = k0 + 30 + nstrf(k0+14)