59
60
61
62 USE timer_mod
65 USE intbufdef_mod
67 USE multi_fvm_mod
68 use check_sorting_criteria_mod , only : check_sorting_criteria
69
70
71
72#include "implicit_f.inc"
73#include "comlock.inc"
74
75
76
77#include "com01_c.inc"
78#include "com04_c.inc"
79#include "com08_c.inc"
80#include "param_c.inc"
81#include "task_c.inc"
82#include "timeri_c.inc"
83
84 COMMON /i7mainc/bminma,curv_max_max,result,nsnr,nsnrold,i_memg,nmn_g
85 INTEGER RESULT,NSNR,NSNROLD,I_MEMG,NMN_G
87 . bminma(6),curv_max_max
88
89
90
91 TYPE(TIMER_), INTENT(INOUT) :: TIMERS
92 INTEGER NIN ,ITASK, RETRI, NRTM_T,ESHIFT,
93 . NUM_IMP ,IND_IMP(*),
94 . ITAB(*), KINET(*),
95 . IPARI(NPARI,NINTER), (*),
96 . ISENDTO(NINTER+1,*),IRCVFROM(NINTER+1,*),
97 . WEIGHT(*), IAD_ELEM(2,*) ,FR_ELEM(*),
98 . RENUM(*), (NSPMD), NODNX_SMS(*)
99 INTEGER, INTENT(IN) :: INTHEAT
100 INTEGER, INTENT(IN) :: IDT_THERM
101 INTEGER, INTENT(IN) :: NODADT_THERM
102
104 . x(*), v(*), ms(*)
105 TYPE(INTBUF_STRUCT_) INTBUF_TAB
106 TYPE(H3D_DATABASE) :: H3D_DATA
107 TYPE(MULTI_FVM_STRUCT), INTENT(INOUT) :: MULTI_FVM
108
109
110
111 INTEGER LOC_PROC, IFQ, INTTH, ITIED,
112 . I, IP0, IP1, IP2, IP21, I_SK_OLD
113
114INTEGER
115 . ILD, NCONTACT,NCONT,INTFRIC,
116 . I_MEM,CAND_N_OLD,(1),ILEV, IVIS2
117
119 . gap,maxbox,minbox,tzinf,
120 . xmaxl, ymaxl, zmaxl, xminl, yminl, zminl, gapmin, gapmax,
121 . sx,sy,sz,sx2,sy2,sz2,
122 . c_maxl,curv_max(nrtm_t),rdum1(1)
123 INTEGER :: NMN,,NTY
124 logical :: need_computation
125
126
127
128 call check_sorting_criteria( need_computation,nin,npari,nspmd,
129 . itask,ipari(1,nin),tt,intbuf_tab )
130 if( .not.need_computation ) return
131
132 i_mem = 0
133 i_memg = 0
134 nmn_g = 0
135 nmn_l = 0
136
137 intfric = 0
138
139
140 itied = 0
141
142 loc_proc=ispmd+1
143 nsn =ipari(5,nin)
144 nmn =ipari(6,nin)
145 nty =ipari(7,nin)
146 ivis2 =ipari(14,nin)
147 noint =ipari(15,nin)
148 ncont =ipari(18,nin)
149 ilev =ipari(20,nin)
150 inacti =ipari(22,nin)
151 multimp=ipari(23,nin)
152
153 ncontact=multimp*ncont
154
155 nsnrold = ipari(24,nin)
156
157 gap =intbuf_tab%VARIABLES(2)
158 gapmin=intbuf_tab%VARIABLES(13)
159 gapmax=intbuf_tab%VARIABLES(16)
160
161
162
163
164 retri = 1
165
166
167
168 maxbox = intbuf_tab%VARIABLES(9)
169 minbox = intbuf_tab%VARIABLES(12)
170 tzinf = intbuf_tab%VARIABLES(8)
171 bminma(1)=-ep30
172 bminma(2)=-ep30
173 bminma(3)=-ep30
174 bminma(4)=ep30
175 bminma(5)=ep30
176 bminma(6)=ep30
177 curv_max_max = zero
178
179
180
181
182
183
184
186
187 IF(itask==0)THEN
188 ip0 = 1
189 ip1 = ip0 + nsn + nsnrold + 3
190
191 i_sk_old = intbuf_tab%I_STOK(1)
193 1 nsn+nsnrold ,i_sk_old ,intbuf_tab%CAND_N,intbuf_tab%CAND_E,
194 2 intbuf_tab%CAND_P,intbuf_tab%FTSAVX,intbuf_tab%FTSAVY,intbuf_tab%FTSAVZ,
195 3 mwag(ip0) ,intbuf_tab%IFPEN)
196
197 intbuf_tab%I_STOK(1)=i_sk_old
198 ENDIF
199
200
201
202
204 1 x ,intbuf_tab%NSV,intbuf_tab%MSR,nsn ,nmn ,
205 2 itask ,intbuf_tab%XSAV,xminl ,yminl ,zminl ,
206 3 xmaxl ,ymaxl ,zmaxl ,c_maxl,curv_max,
207 4 ipari(39,nin),intbuf_tab%IRECTM(1+4*eshift) ,nrtm_t,sx ,sy ,
208 5 sz ,sx2 ,sy2 ,sz2 ,nmn_l)
209#include "lockon.inc"
210 bminma(1) =
max(bminma(1),xmaxl)
211 bminma(2) =
max(bminma(2),ymaxl)
212 bminma(3) =
max(bminma(3),zmaxl)
213 bminma(4) =
min(bminma(4),xminl)
214 bminma(5) =
min(bminma(5),yminl)
215 bminma(6) =
min(bminma(6),zminl)
216 curv_max_max =
max(curv_max_max,c_maxl)
217 nmn_g = nmn_g + nmn_l
218#include "lockoff.inc"
219
220 result = 0
221
223 IF(itask==0)THEN
224 IF(abs(bminma(6)-bminma(3))>2*ep30.OR.
225 + abs(bminma(5)-bminma(2))>2*ep30.OR.
226 + abs(bminma(4)-bminma(1))>2*ep30)THEN
227 CALL ancmsg(msgid=87,anmode=aninfo,
228 . i1=noint,c1='(I23BUCE)')
230 END IF
231
232 bminma(1)=bminma(1)+tzinf+curv_max_max
233 bminma(2)=bminma(2)+tzinf+curv_max_max
234 bminma(3)=bminma(3)+tzinf+curv_max_max
235 bminma(4)=bminma(4)-tzinf-curv_max_max
236 bminma(5)=bminma(5)-tzinf-curv_max_max
237 bminma(6)=bminma(6)-tzinf-curv_max_max
238
240 CALL ancmsg(msgid=36,anmode=aninfo,
241 . c1='(I7MAINTRI)')
243 END IF
244
245 nsnr = 0
246
247 END IF
248
249
250 IF(nspmd > 1) THEN
251
253
255
256 IF (imonm > 0 .AND. itask == 0)
CALL startime(timers,26)
258 1 x ,bminma ,ipari(21,nin),nrtm_t,intbuf_tab%STFM(1+eshift),
259 2 tzinf ,curv_max,gapmin ,gapmax,intbuf_tab%GAP_M(1+eshift),
260 3 intbuf_tab%IRECTM(1+4*eshift),gap ,intbuf_tab%VARIABLES(7) ,intbuf_tab%MSR)
261
263 IF (imonm > 0 .AND. itask == 0)
CALL stoptime(timers,26)
264
265 IF(itask==0)THEN
266
267
268
269 ifq =0
270 intth=0
271 IF (imonm > 0 .AND. itask == 0)
CALL startime(timers,25)
272
274 1 intbuf_tab%NSV,nsn ,x ,v ,ms ,
275 2 bminma ,weight ,intbuf_tab%STFNS,nin ,isendto,
276 3 ircvfrom ,iad_elem,fr_elem ,nsnr ,ipari(21,nin),
277 4 intbuf_tab%GAP_S,itab ,kinet ,ifq ,inacti ,
278 5 nsnfiold,intth,idum1,rdum1,rdum1 ,
279 6 num_imp ,nodnx_sms,rdum1,nty ,idum1 ,
280 7 rdum1 ,rdum1,rdum1,rdum1 ,idum1 ,ilev,idum1,
281 8 intfric ,idum1 ,itied, ivis2, intbuf_tab%IF_ADH)
282 IF (imonm > 0 .AND. itask == 0)
CALL stoptime(timers,25)
283
284
285
286
287
289 1 intbuf_tab%CAND_N,renum ,intbuf_tab%I_STOK(1), nin, nsn,
290 2 nsnfiold ,nsnrold)
291 END IF
292 END IF
293
294 cand_n_old = intbuf_tab%I_STOK(1)
295 40 CONTINUE
296
297 ild = 0
298 nb_n_b = 1
299
300
301
303
304 IF (imonm > 0 .AND. itask == 0)
CALL startime(timers,30)
306 1 x ,intbuf_tab%IRECTM(1+4*eshift),intbuf_tab%NSV ,ipari(22,nin),
307 2 nrtm_t ,nsn ,intbuf_tab%CAND_E ,intbuf_tab%CAND_N,gap ,
308 3 noint ,intbuf_tab%I_STOK(1),tzinf ,maxbox ,minbox ,
309 4 ncontact ,nb_n_b ,eshift ,intbuf_tab%CAND_P,ncont ,
310 6 ild ,weight ,intbuf_tab%STFNS,nin ,
311 7 intbuf_tab%STFM(1+eshift) ,ipari(21,nin),intbuf_tab%GAP_S,gapmin,gapmax,
312 8 ipari(39,nin),num_imp ,itask,
313 9 i_mem ,intbuf_tab%MSR,intbuf_tab%GAP_M(1+eshift),nsnr ,curv_max ,
314 a renum ,nsnrold ,intbuf_tab%IFPEN,mwag ,bminma ,
315 b nmn ,intbuf_tab%IRECTM,intbuf_tab%VARIABLES(7),
316 c intheat,idt_therm,nodadt_therm )
317
318
319 IF (i_mem == 2)THEN
320#include "lockon.inc"
321 i_memg = i_mem
322#include "lockoff.inc"
323 ENDIF
324
325
327
328 IF(i_memg /=0)THEN
329
330
331
332
333
334
335 multimp = ipari(23,nin) + 4
337
338 i_mem = 0
339 i_memg = 0
340 intbuf_tab%I_STOK(1)=cand_n_old
341 multimp=ipari(23,nin)
342 ncontact=multimp*ncont
343
344 GOTO 40
345 ENDIF
346
347
348 IF (imonm > 0 .AND. itask == 0)
CALL stoptime(timers,30)
349
350#include "lockon.inc"
351 intbuf_tab%VARIABLES(9) =
min(maxbox,intbuf_tab%VARIABLES(9))
352 intbuf_tab%VARIABLES(12) =
min(minbox,intbuf_tab%VARIABLES(12))
353 intbuf_tab%VARIABLES(8) =
min(tzinf,intbuf_tab%VARIABLES(8))
354 intbuf_tab%VARIABLES(5) = intbuf_tab%VARIABLES(8)-sqrt(three)*gap
355 result = result + ild
356#include "lockoff.inc"
357
358
360 IF (result/=0) THEN
362 IF (itask==0) THEN
363
364 intbuf_tab%I_STOK(1) = i_sk_old
365 result = 0
366 ENDIF
368 ild = 0
369 maxbox = intbuf_tab%VARIABLES(9)
370 minbox = intbuf_tab%VARIABLES(12)
371 tzinf = intbuf_tab%VARIABLES(8)
372 GOTO 50
373 ENDIF
374
375 IF(nspmd>1)THEN
376
377
378 IF (imonm > 0)
CALL startime(timers,26)
379 intbuf_tab%VARIABLES(5) = -intbuf_tab%VARIABLES(5)
380
382 1 result ,nsn ,intbuf_tab%CAND_N,intbuf_tab%I_STOK(1),nin,
383 2 ipari(21,nin),nsnr,multimp ,nty,ipari(47,nin),
384 3 ilev ,nsnfiold, ipari, h3d_data,intfric,
385 4 multi_fvm,nodadt_therm)
386 ipari(24,nin) = nsnr
387
388 IF (num_imp>0)
389 .
CALL imp_rnumcd(intbuf_tab%CAND_N,nin,nsn,num_imp,ind_imp )
390
391 IF (imonm > 0)
CALL stoptime(timers,26)
392
393 END IF
394
395 RETURN
subroutine i23buce(x, irect, nsv, inacti, nrtm, nsn, cand_e, cand_n, gap, noint, ii_stok, tzinf, maxbox, minbox, ncontact, nb_n_b, eshift, cand_p, ncont, ild, weight, stfn, nin, stf, igap, gap_s, gapmin, gapmax, icurv, num_imp, itask, i_mem, msr, gap_m, nsnr, curv_max, renum, nsnrold, ifpen, mwag, bminma, nmn, irectg, bgapsmx, intheat, idt_therm, nodadt_therm)
subroutine i23trc(nsn, i_stok, cand_n, cand_e, cand_p, cand_fx, cand_fy, cand_fz, cand_a, ifpen)
subroutine i7xsave(x, nsv, msr, nsn, nmn, itask, xsav, xmin, ymin, zmin, xmax, ymax, zmax, c_max, curv_max, icurv, irect, nrtm_t, sx, sy, sz, sx2, sy2, sz2, nmn_l)
subroutine imp_rnumcd(cand_n, nin, nsn, num_imp, index)
integer, dimension(0:lrvoxel, 0:lrvoxel) crvoxel
subroutine spmd_tri7gat(result, nsn, cand_n, i_stok, nin, igap, nsnr, multimp, ity, intth, ilev, nsnfiold, ipari, h3d_data, intfric, multi_fvm, nodadt_therm)
subroutine spmd_tri7vox(nsv, nsn, x, v, ms, bminmal, weight, stifn, nin, isendto, ircvfrom, iad_elem, fr_elem, nsnr, igap, gap_s, itab, kinet, ifq, inacti, nsnfiold, intth, ielec, areas, temp, num_imp, nodnx_sms, gap_s_l, ityp, irtlm, i24_time_s, i24_frfi, i24_pene_old, i24_stif_old, nbinflg, ilev, i24_icont_i, intfric, ipartfrics, itied, ivis2, if_adh)
subroutine spmd_tri23vox0(x, bminmal, igap, nrtm, stf, tzinf, curv_max, gapmin, gapmax, gap_m, irect, gap, bgapsmx, msr)
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)
subroutine startime(event, itask)
subroutine stoptime(event, itask)
subroutine upgrade_multimp(ni, multimp_parameter, intbuf_tab)