34
35
36
37#include "implicit_f.inc"
38
39
40
41#include "comlock.inc"
42#include "com01_c.inc"
43#include "com04_c.inc"
44
45#include "com08_c.inc"
46#include "param_c.inc"
47#include "task_c.inc"
48
49
50
51 INTEGER NSTRF(*),WEIGHT(*), IAD_CUT(NSPMD+2,*), FR_CUT(*)
52 my_real v(3,*), vr(3,*), a(3,*), ar(3,*), ms(*),secbuf(*), in(*
53 DOUBLE PRECISION,INTENT(INOUT) :: WFEXT
54
55
56
57 integer
58 . j, i, k, ii, i1, i2, n, kr1,kr2,kr3,k0,kr0,k1,k2,
59 . ifrl1, ifrl2, l,TYPE, NNOD,KR11,KR12,
60 . KR21,KR22,NBINTER,LEN,NNODT
62 . dw, tt1, tt2, tt3, vi, dd, d1, d2,wfextl,
63 . tnext, deltat,err(8), ff, fold,
alpha,aa,dtinv
64
65 IF(nsect==0)RETURN
66 IF(nstrf(2)==0)RETURN
67
68
69
70
71 IF(nspmd==1) THEN
73 ELSE
74 nnodt = 0
75 IF(ispmd==0) THEN
76 k0 = nstrf(25)
77 DO i = 1, nsect
78 IF(nstrf(k0)>=100) nnodt = nnodt + iad_cut(nspmd+2,i)
79 k0 = nstrf(k0+24)
80 END DO
81 END IF
82
83
84
86 END IF
87
88
89
90 tt1 = secbuf(2)
91 tt2 = secbuf(3)
92 tt3 = secbuf(4)
93 dtinv=zero
94 IF(dt1>zero)dtinv=one/dt1
95 IF(nstrf(2)>=1)THEN
96 ifrl1=nstrf(7)
97 ifrl2=mod(ifrl1+1,2)
98 k0 = nstrf(25)
99 kr0 = nstrf(26)
100 DO n=1,nsect
101 nnod = nstrf(k0+6)
102 TYPE=nstrf(k0)
103 nbinter = nstrf(k0+14)
104 alpha = secbuf(kr0+2)
105 IF(type>=101.AND.
alpha/=0.0)
THEN
106 k2 = k0 + 30 + nbinter
107 kr1 = kr0 + 10
108 kr2 = kr1 + 12*nnod
109 kr3 = kr2 + 12*nnod
110 kr11 = kr1 + ifrl2*6*nnod
111 kr12 = kr1 + ifrl1*6*nnod
112 kr21 = kr2 + ifrl2*6*nnod
113 kr22 = kr2 + ifrl1*6*nnod
114 dw = secbuf(kr0+3)
115 IF(ispmd==0) THEN
116 wfextl=dw*dt1
117 ELSE
118 wfextl=zero
119 ENDIF
120 wfext = wfext + wfextl
121 dw=0.
122 DO k=1,3
123 DO i=1,nnod
124 ii = nstrf(k2+i-1)
125 d2 = secbuf(kr22+6*i-7+k)
126 d1 = secbuf(kr21+6*i-7+k)
127 aa = (tt*(d2-d1)+tt2*d1-tt1*d2) / (tt2-tt1)
128 d2 = secbuf(kr12+6*i-7+k)
129 d1 = secbuf(kr11+6*i-7+k)
130 dd = ms(ii)*(d2-d1) / (tt2-tt1)
131 aa = dd*dtinv + aa
132 a(k,ii) = a(k,ii) + aa
133 IF(weight(ii)==1) THEN
134 dw = dw + half*v(k,ii)*aa
135 ENDIF
136 ENDDO
137 IF(iroddl/=0)THEN
138 DO i=1,nnod
139 ii = nstrf(k2+i-1)
140 d2 = secbuf(kr22+6*i-4+k)
141 d1 = secbuf(kr21+6*i-4+k)
142 aa = (tt*(d2-d1)+tt2*d1-tt1*d2) / (tt2-tt1)
143 d2 = secbuf(kr12+6*i-4+k)
144 d1 = secbuf(kr11+6*i-4+k)
145 dd = in(ii)*(d2-d1) / (tt2-tt1)
146 aa = dd*dtinv + aa
147 ar(k,ii) = ar(k,ii) + aa
148 IF(weight(ii)==1) THEN
149 dw = dw + half*vr(k,ii)*aa
150 ENDIF
151 ENDDO
152 ENDIF
153 ENDDO
154 wfextl = wfextl + dt1*dw
155 wfext = wfext + dt1*dw
156 secbuf(kr0+3) = dw
157 secbuf(kr0+4) = wfextl
158 ENDIF
159 kr0 = nstrf(k0+25)
160 k0 = nstrf(k0+24)
161 ENDDO
162 ENDIF
163
164 RETURN
subroutine section_read(ttt, nstrf, secbuf)
subroutine section_readp(ttt, nstrf, secbuf, nnodt, iad_cut, fr_cut)