169
170
171
172#include "implicit_f.inc"
173
174
175
176#include "com01_c.inc"
177#include "com04_c.inc"
178#include "com08_c.inc"
179#include "units_c.inc"
180#include "task_c.inc"
181
182
183
184 INTEGER FXBNOD(*), NME, NMOD, NSN, IDMAST, ISH, LMOD, NSNT,
185 . IFILE, NSNI, IRCM, PMAIN, IAD_ELEM(2,*), FR_ELEM(*)
187 . fxbrpm(*), fxbmod(*), fxbvit(*), fxbacc(*), v(3,*),
188 . vr(3,*), a(3,*), ar(3,*), ms(*), in(*)
189
190
191
192 INTEGER I, IAD, II, N, J, IFAC(NUMNOD), JJ
194 . spin(3), r12(9), vt(3,nsn), vtr(3,nsn), vmod(nsnt*6),
195 . usdt, ecbidt, ecbidr, vv(6), dt05, vx, vy, vz, vrx, vry,
196 . vrz
197
198
199
200 CALL fxspin(fxbrpm, fxbvit, spin, r12, dt2)
201
202 DO i=1,nsn
203 vt(1,i)=zero
204 vt(2,i)=zero
205 vt(3,i)=zero
206 IF (ish>0) THEN
207 vtr(1,i)=zero
208 vtr(2,i)=zero
209 vtr(3,i)=zero
210 ELSE
211 vtr(1,i)=spin(1)
212 vtr(2,i)=spin(2)
213 vtr(3,i)=spin(3)
214 ENDIF
215 ENDDO
216 DO i=1,12
217 iad=(i-1)*lmod
218 DO ii=1,lmod
219 vmod(ii)=fxbmod(iad+ii)
220 ENDDO
221 IF (ifile==1.AND.nsn>nsni) THEN
222 iad=nsni*6
223 DO ii=1,nsn-nsni
224 ircm=ircm+1
225 READ(ifxm,rec=ircm) (vv(j),j=1,6)
226 DO j=1,6
227 vmod(iad+j)=vv(j)
228 ENDDO
229 iad=iad+6
230 ENDDO
231 ENDIF
232 iad=0
233 DO ii=1,nsn
234 vt(1,ii)=vt(1,ii)+fxbvit(i)*vmod(iad+1)
235 vt(2,ii)=vt(2,ii)+fxbvit(i)*vmod(iad+2)
236 vt(3,ii)=vt(3,ii)+fxbvit(i)*vmod(iad+3)
237 iad=iad+6
238 ENDDO
239 ENDDO
240 IF (ish>0) THEN
241 DO i=13,nme
242 iad=(i-1)*lmod
243 DO ii=1,lmod
244 vmod(ii)=fxbmod(iad+ii)
245 ENDDO
246 IF (ifile==1.AND.nsn>nsni) THEN
247 iad=nsni*6
248 DO ii=1,nsn-nsni
249 ircm=ircm+1
250 READ(ifxm,rec=ircm) (vv(j),j=1,6)
251 DO j=1,6
252 vmod(iad+j)=vv(j)
253 ENDDO
254 iad=iad+6
255 ENDDO
256 ENDIF
257 iad=0
258 DO ii=1,nsn
259 vtr(1,ii)=vtr(1,ii)+fxbvit(i)*vmod(iad+4)
260 vtr(2,ii)=vtr(2,ii)+fxbvit(i)*vmod(iad+5)
261 vtr(3,ii)=vtr(3,ii)+fxbvit(i)*vmod(iad+6)
262 iad=iad+6
263 ENDDO
264 ENDDO
265 ENDIF
266
267 IF (nmod>0) THEN
268 DO i=1,nmod
269 iad=(nme+i-1)*lmod
270 DO ii=1,lmod
271 vmod(ii)=fxbmod(iad+ii)
272 ENDDO
273 IF (ifile==1.AND.nsn>nsni) THEN
274 iad=nsni*6
275 DO ii=1,nsn-nsni
276 ircm=ircm+1
277 READ(ifxm,rec=ircm) (vv(j),j=1,6)
278 DO j=1,6
279 vmod(iad+j)=vv(j)
280 ENDDO
281 iad=iad+6
282 ENDDO
283 ENDIF
284 iad=0
285 DO ii=1,nsn
286 vt(1,ii)=vt(1,ii)+fxbvit(nme+i)*
287 . (r12(1)*vmod(iad+1)+r12(2)*vmod(iad+2)+
288 . r12(3)*vmod(iad+3))
289 vt(2,ii)=vt(2,ii)+fxbvit(nme+i)*
290 . (r12(4)*vmod(iad+1)+r12(5)*vmod(iad+2)+
291 . r12(6)*vmod(iad+3))
292 vt(3,ii)=vt(3,ii)+fxbvit(nme+i)*
293 . (r12(7)*vmod(iad+1)+r12(8)*vmod(iad+2)+
294 . r12(9)*vmod(iad+3))
295 vtr(1,ii)=vtr(1,ii)+fxbvit(nme+i)*
296 . (r12(1)*vmod(iad+4)+r12(2)*vmod(iad+5)+
297 . r12(3)*vmod(iad+6))
298 vtr(2,ii)=vtr(2,ii)+fxbvit(nme+i)*
299 . (r12(4)*vmod(iad+4)+r12(5)*vmod(iad+5)+
300 . r12(6)*vmod(iad+6))
301 vtr(3,ii)=vtr(3,ii)+fxbvit(nme+i)*
302 . (r12(7)*vmod(iad+4)+r12(8)*vmod(iad+5)+
303 . r12(9)*vmod(iad+6))
304 iad=iad+6
305 ENDDO
306 ENDDO
307 ENDIF
308 usdt=one/dt12
309 ecbidt=zero
310 ecbidr=zero
311 dt05 = half*dt2
312
313 DO i=1,numnod
314 ifac(i)=1
315 ENDDO
316 IF (nspmd>1) THEN
317 DO i=1,nspmd
318 DO j=iad_elem(1,i),iad_elem(1,i+1)-1
319 jj=fr_elem(j)
320 ifac(jj)=ifac(jj)+1
321 ENDDO
322 ENDDO
323 ENDIF
324
325 DO i=1,nsn
326 n=fxbnod(i)
327 a(1,n)=(vt(1,i)-v(1,n))*usdt
328 a(2,n)=(vt(2,i)-v(2,n))*usdt
329 a(3,n)=(vt(3,i)-v(3,n))*usdt
330 ar(1,n)=(vtr(1,i)-vr(1,n))*usdt
331 ar(2,n)=(vtr(2,i)-vr(2,n))*usdt
332 ar(3,n)=(vtr(3,i)-vr(3,n))*usdt
333 vx=v(1,n)+dt05*a(1,n)
334 vy=v(2,n)+dt05*a(2,n)
335 vz=v(3,n)+dt05*a(3,n)
336 vrx=vr(1,n)+dt05*ar(1,n)
337 vry=vr(2,n)+dt05*ar(2,n)
338 vrz=vr(3,n)+dt05*ar(3,n)
339 ecbidt=ecbidt+half*ms(n)*(vx*vx+vy*vy+vz*vz)/ifac(n)
340 ecbidr=ecbidr+half*in(n)*(vrx*vrx+vry*vry+vrz*vrz)/ifac(n)
341 ENDDO
342 DO i=nsn+1,nsnt
343 n=fxbnod(i)
344 a(1,n)=zero
345 a(2,n)=zero
346 a(3,n)=zero
347 ar(1,n)=zero
348 ar(2,n)=zero
349 ar(3,n)=zero
350 vx=v(1,n)
351 vy=v(2,n)
352 vz=v(3,n)
353 vrx=vr(1,n)
354 vry=vr(2,n)
355 vrz=vr(3,n)
356 ecbidt=ecbidt+half*ms(n)*(vx*vx+vy*vy+vz*vz)/ifac(n)
357 ecbidr=ecbidr+half*in(n)*(vrx*vrx+vry*vry+vrz*vrz)/ifac(n)
358 ENDDO
359 IF (pmain/=ispmd) fxbrpm(12)=zero
360 fxbrpm(12)=fxbrpm(12)-ecbidt-ecbidr
361
362
363
364 IF (idmast/=0) THEN
365 a(1,idmast)=fxbacc(10)
366 a(2,idmast)=fxbacc(11)
367 a(3,idmast)=fxbacc(12)
368 ar(1,idmast)=(spin(1)-vr(1,idmast))*usdt
369 ar(2,idmast)=(spin(2)-vr(2,idmast))*usdt
370 ar(3,idmast)=(spin(3)-vr(3,idmast))*usdt
371 ENDIF
372
373 RETURN
subroutine fxspin(fxbrpm, fxbvit, s, r12, dt2)