66
67
68
69 USE timer_mod
72 USE sensor_mod
73 USE output_mod
74
75
76
77#include "implicit_f.inc"
78#include "comlock.inc"
79
80
81
82#include "com01_c.inc"
83#include "com04_c.inc"
84#include "com06_c.inc"
85#include "com08_c.inc"
86#include "param_c.inc"
87#include "parit_c.inc"
88#include "scr07_c.inc"
89#include "sms_c.inc"
90#include "stati_c.inc"
91#include "task_c.inc"
92#include "warn_c.inc"
93
94
95
96 TYPE(TIMER_) ,INTENT(INOUT) :: TIMERS
97 INTEGER ITASK, NODFT, NODLT, NODXI_SMS(*),
98 . JAD_SMS(*), JDI_SMS(*), INDX1_SMS(*),
99 . IAD_ELEM(2,NSPMD+1) ,FR_ELEM(*), WEIGHT(*),
100 . ICODT(*), ICODR(*), ISKEW(*),
101 . NPC(*), IBFV(NIFV,*),IFRAME(LISKN,*),
102 . JADI_SMS(*), JDII_SMS(*),CPTREAC,NODREAC(*),
103 . (NSPMD+1), FR_RMS(NSPMD+1), ISKYI_SMS(*),
104 . NPBY(NNPBY,*), TAGSLV_RBY_SMS(*),
105 . IRBE2(NRBE2L,*), LRBE2(*), IAD_RBE2(*),
106 . FR_RBE2M(*), NMRBE2, R2SIZE, IRBE3(NRBE3L,*), LRBE3(*),
107 . IAD_RBE3M(*) ,FR_RBE3M(*) ,FR_RBE3MP(*),
108 . FR_RBY6(*) ,IAD_RBY(*) ,LPBY(*) ,TAGMSR_RBY_SMS(*),R3SIZE,
109 . NODII_SMS(*),INDX2_SMS(*),IBCSCYC(*),LBCSCYC(*)
111 . ms(*), diag_sms(*), lt_sms(*),
112 . v(3,*), a(3,*), wv(3,*), wmv(3,*), wdg(*), xmom_sms(3,*),
113 . skew(*), x(3,*), d(3,*), tf(*), vel(lfxvelr,*),
114 . xframe(nxframe,*),lti_sms(*), mskyi_sms(*),fthreac(6,*),
115 . ar(3,*), vr(3,*), dr(3,*), in(*), rby(nrby,*),
116 . frbe3(*), rrbe3(*)
117 my_real,
dimension(fr_rms(nspmd+1)),
intent(inout) :: mskyi_fi_sms
118 integer,dimension(fr_sms(nspmd+1)),intent(inout) :: LIST_SMS
119 integer,dimension(fr_rms(nspmd+1)),intent(inout) :: LIST_RMS
120 my_real,
DIMENSION(3,FR_RMS(NSPMD+1)+FR_SMS(NSPMD+1) ),
intent(inout):: vfi
121 integer,intent(in) ::
122 my_real,
dimension(6,SZ_mw6),
intent(inout) :: mw6
123 DOUBLE PRECISION RRBE3_PON(*)
124 DOUBLE PRECISION RBY6(8,6,NRBYKIN)
125 TYPE(INTSTAMP_DATA) INTSTAMP(*)
126 TYPE (SENSORS_) ,INTENT(IN) :: SENSORS
127 TYPE(OUTPUT_), INTENT(INOUT) :: OUTPUT
128
129
130
131 INTEGER NODFT1_SMS, NODLT1_SMS
132 INTEGER NODFT2_SMS, NODLT2_SMS
133 INTEGER N, IBID, IPRI, INFO, ITHIS, IT, M, MSR, NN, IERROR,
134 . I, IAD, NSN, K, KI, NRBDIM
136 . rbid, dt05, mas, p1, p2, p3
137
138 INTEGER, DIMENSION(:), ALLOCATABLE :: IMV
140 . , DIMENSION(:), ALLOCATABLE :: mv
141 double precision
142 . , DIMENSION(:,:), ALLOCATABLE :: mv6
143
144 DATA it/0/
145
146 ipri=1
147 IF(t1s==tt)ipri=mod(ncycle,iabs(ncpri))
148 info=mdess-manim
149 ithis=0
150 IF(tt<output%TH%THIS)ithis=1
151 IF(ipri/=0.AND.ithis/=0.AND.
152 . info<=0.AND.istat==0
153 . .AND.nth==0.AND.nanim==0) RETURN
154
155 IF(iparit/=0)THEN
156 IF(debug(9)==0)THEN
157 ALLOCATE(imv(2*nisky_sms+fr_rms(nspmd+1)),
158 . mv(3*(2*nisky_sms+fr_rms(nspmd+1))),
159 . mv6(6,3*(2*nisky_sms+fr_rms(nspmd+1))),
160 . stat=ierror)
161 ELSE
162 ALLOCATE(imv(numnod+nnz_sms+2*nisky_sms+fr_rms(nspmd+1)),
163 . mv(3*(numnod+nnz_sms+2*nisky_sms+fr_rms(nspmd+1))),
164 . mv6(6,3*(numnod+nnz_sms+2*nisky_sms+fr_rms(nspmd+1))),
165 . stat=ierror)
166 END IF
167 IF(ierror/=0) THEN
168 CALL ancmsg(msgid=19,anmode=aninfo,
169 . c1='(/DT/.../AMS)')
171 ENDIF
172 END IF
173
174 IF(nspmd > 1)THEN
175 IF(itask==0)THEN
176 CALL spmd_list_sms(iskyi_sms,fr_sms,fr_rms,list_sms,list_rms,
177 . npby ,tagslv_rby_sms)
178 END IF
179
181
182 END IF
183
184 nodft1_sms=1+itask*nindx1_sms/nthread
185 nodlt1_sms=(itask+1)*nindx1_sms/nthread
186
187 nodft2_sms=1+itask*nindx2_sms/nthread
188 nodlt2_sms=(itask+1)*nindx2_sms/nthread
189
190 dt05=half*dt1
191 DO n=nodft,nodlt
192
193 wv(1,n) = v(1,n)+dt05*a(1,n)
194 wv(2,n) = v(2,n)+dt05*a(2,n)
195 wv(3,n) = v(3,n)+dt05*a(3,n)
196
197 mas=ms(n)
198 xmom_sms(1,n)=mas*wv(1,n)
199 xmom_sms(2,n)=mas*wv(2,n)
200 xmom_sms(3,n)=mas*wv(3,n)
201
202 IF(nodxi_sms(n)/=0.AND.tagslv_rby_sms(n)==0) THEN
203 wdg(n)=
max(zero,diag_sms(n)-ms(n))
204 ELSEIF(tagslv_rby_sms(n)/=0)THEN
205 wdg(n)=diag_sms(n)
206 END IF
207
208 ENDDO
209
210
211 IF(nrbody/=0)THEN
212
214
215 DO n=nodft1_sms,nodlt1_sms
216 i=indx1_sms(n)
217 m=tagslv_rby_sms(i)
218 IF(m /= 0)THEN
219 msr=npby(1,m)
220 wv(1,i)=wv(1,msr)
221 wv(2,i)=wv(2,msr)
222 wv(3,i)=wv(3,msr)
223 END IF
224 END DO
225
226 END IF
227
229
230
231
232 IF(nspmd > 1)THEN
233
235
236 IF(itask==0) THEN
238 1 iskyi_sms,fr_sms,fr_rms,list_rms,mskyi_sms,
239 2 mskyi_fi_sms)
240 END IF
241 END IF
242
244 1 nodft ,nodlt ,numnod ,jad_sms ,jdi_sms ,
245 2 itask ,wdg ,lt_sms ,wv ,wmv ,
246 3 nodft1_sms,nodlt1_sms,indx1_sms,nodxi_sms,iad_elem ,
247 4 fr_elem ,weight ,jadi_sms ,jdii_sms ,lti_sms ,
248 5 iskyi_sms ,mskyi_sms ,fr_sms ,fr_rms ,list_sms ,
249 6 list_rms ,mskyi_fi_sms ,vfi ,imv ,mv ,
250 7 mv6 ,mw6 ,nodft2_sms,nodlt2_sms,indx2_sms,
251 8 nodii_sms )
252
254
255
256 IF(nrbody/=0)THEN
257
259
260
261 DO m =1,nrbody
262 DO k = 1, 6
263 rby6(1,k,m) = zero
264 rby6(2,k,m) = zero
265 rby6(3,k,m) = zero
266 END DO
267
268 msr=npby(1,m)
269 IF(msr < 0) cycle
270
271 IF(tagmsr_rby_sms(msr) /= 0) THEN
272 rby6(1,1,m)=wmv(1,msr)*weight(msr)
273 rby6(2,1,m)=wmv(2,msr)*weight(msr)
274 rby6(3,1,m)=wmv(3,msr)*weight(msr)
275 END IF
276
277 END DO
278
279
280
281 DO n=1,nindx1_sms
282 i=indx1_sms(n)
283 m=tagslv_rby_sms(i)
284 IF(m /= 0)THEN
285 IF(weight(i) /= 0)THEN
286 rby6(1,1,m)=rby6(1,1,m)+wmv(1,i)
287 rby6(2,1,m)=rby6(2,1,m)+wmv(2,i)
288 rby6(3,1,m)=rby6(3,1,m)+wmv(3,i)
289 END IF
290 END IF
291 END DO
292
293
294 IF (nspmd > 1) THEN
295
296 nrbdim=3
298 1 nrbdim,iad_rby,fr_rby6,iad_rby(nspmd+1),rby6)
299
300 END IF
301
302
303 DO m =1,nrbody
304 msr=npby(1,m)
305 IF(msr < 0) cycle
306
307
308 wmv(1,msr)=rby6(1,1,m)
309 wmv(2,msr)=rby6(2,1,m)
310 wmv(3,msr)=rby6(3,1,m)
311
312 END DO
313
314 END IF
315
316
317 CALL sms_bcs(nodft1_sms,nodlt1_sms,indx1_sms,icodt ,iskew ,
318 2 skew ,wmv ,nodlt1_sms )
319
320 IF (nbcscyc>0)
CALL sms_bcscyc(ibcscyc,lbcscyc,skew,x,wmv)
321
322 IF(nfxvel > 0)THEN
323
324
326
327 IF(itask==0)
329 2 vel ,diag_sms,x ,skew ,sensors%SENSOR_TAB,
330 3 weight ,d ,iframe ,xframe ,sensors%NSENSOR,
331 4 -(it+1),diag_sms,nodxi_sms,cptreac,
332 5 nodreac,fthreac ,ar ,vr ,dr ,
333 6 in ,rby ,output%TH%WFEXT)
334 END IF
335
337
338
339 DO n=nodft1_sms,nodlt1_sms
340 i=indx1_sms(n)
341 IF(tagslv_rby_sms(i)==0)THEN
342 xmom_sms(1,i)=xmom_sms(1,i)+wmv(1,i)
343 xmom_sms(2,i)=xmom_sms(2,i)+wmv(2,i)
344 xmom_sms(3,i)=xmom_sms(3,i)+wmv(3,i)
345 END IF
346 ENDDO
347
348
349
350 IF (nrbe2>0.OR.r2size>0) THEN
351
353
354 IF(itask==0)THEN
355
357 1 irbe2 ,lrbe2 ,wv ,xmom_sms ,ms ,
358 1 skew ,weight ,iad_rbe2,fr_rbe2m,nmrbe2)
359
361 1 irbe2 ,lrbe2 ,x ,xmom_sms,ar ,
362 1 ms ,in ,skew ,weight ,iad_rbe2,
363 2 fr_rbe2m,nmrbe2)
364
365 END IF
366
368
369 END IF
370
371
372
373 IF (nrbe3>0)THEN
374 IF(itask==0)THEN
376 1 irbe3 ,lrbe3 ,x ,xmom_sms,frbe3 ,
377 2 skew ,weight ,iad_rbe3m,fr_rbe3m,fr_rbe3mp,
378 3 rrbe3 ,rrbe3_pon,r3size )
379 END IF
380
382
383 END IF
384
385 IF(iparit/=0)THEN
386 DEALLOCATE(imv, mv, mv6)
387 END IF
388
389
390 RETURN
subroutine sms_bcs(nodft, nodlt, indx1, icodt, iskew, skew, a, nodlast)
subroutine sms_bcscyc(ibcscyc, lbcscyc, skew, x, a)
subroutine sms_fixvel(ibfv, a, v, npc, tf, vel, ms, x, skew, sensor_tab, weight, d, iframe, xframe, nsensor, it, diag_sms, nodnx_sms, cptreac, nodreac, fthreac, ar, vr, dr, in, rby, wfext)
subroutine sms_mav_lt(timers, nodft, nodlt, numnod, iadl, jdil, itask, diag_k, lt_k, v, w, nodft1_sms, nodlt1_sms, indx1_sms, nodnx_sms, iad_elem, fr_elem, weight, jadi_sms, jdii_sms, lti_sms, iskyi_sms, mskyi_sms, fr_sms, fr_rms, list_sms, list_rms, mskyi_fi_sms, vfi, imv, mv, mv6, mw6, nodft2_sms, nodlt2_sms, indx2_sms, nodii_sms)
subroutine sms_rbe_cnds(irbe2, lrbe2, x, a, ar, ms, in, skew, weight, iad_rbe2, fr_rbe2m, nmrbe2)
subroutine sms_rbe_corr(irbe2, lrbe2, v, w, ms, skew, weight, iad_rbe2, fr_rbe2m, nmrbe2)
subroutine sms_rbe3t1(irbe3, lrbe3, x, a, frbe3, skew, weight, iad_m, fr_m, fr_mpon, rsum, rsum_pon, r3size)
subroutine spmd_exch_a_rb6(nrbdim, iad_rby, fr_rby6, icsize, rbf6)
subroutine spmd_list_sms(iskyi_sms, fr_sms, fr_rms, list_sms, list_rms, npby, tagslv_rby_sms)
subroutine spmd_mij_sms(iskyi_sms, fr_sms, fr_rms, list_rms, mskyi_sms, mij_sms)
subroutine ancmsg(msgid, msgtype, anmode, i1, i2, i3, i4, i5, i6, i7, i8, i9, i10, i11, i12, i13, i14, i15, i16, i17, i18, i19, i20, r1, r2, r3, r4, r5, r6, r7, r8, r9, c1, c2, c3, c4, c5, c6, c7, c8, c9, prmode)