59
60
61
62
63 USE timer_mod
65 USE intbufdef_mod
67 use check_sorting_criteria_mod , only : check_sorting_criteria
68 use glob_therm_mod
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 "timeri_c.inc"
81 COMMON /i10mainc/bminma,result,nsnr,nsnrold,i_memg
82 INTEGER RESULT,NSNR,NSNROLD,I_MEMG
84 . bminma(6)
85
86
87
88 TYPE(TIMER_), intent(inout) :: TIMERS
89 integer, intent(in) :: npari
90 INTEGER ITASK, NIN, RETRI, NRTM_T, ESHIFT,
91 . NUM_IMP ,IND_IMP(*),
92 . IPARI(npari), MWAG(*), ITAB(*),
93 . ISENDTO(NINTER+1,*),IRCVFROM(NINTER+1,*),
94 . WEIGHT(*), IAD_ELEM(2,*) ,FR_ELEM(*),
95 . RENUM(NUMNOD), NSNFIOLD(NSPMD), NODNX_SMS(*)
97 . x(*), v(3,*), ms(*)
98
99 TYPE(INTBUF_STRUCT_) INTBUF_TAB
100 TYPE(H3D_DATABASE) :: H3D_DATA
101 TYPE(glob_therm_),INTENT(IN) :: GLOB_THERM
102
103
104
105 INTEGER NB_N_B,
106 . I, K11_T, IP0, IP1, IP2, IP3, JLT , NFT, J17_T,
107 . I_SK_OLD, I_STOK1, ITIED,
108 . ADD1, ILD, NOINT, MULTIMP, ITYP, NCONT, NCONTACT,
109 . IBID,I_MEM,CAND_N_OLD
110
112 . gap, maxbox, minbox, tzinf,dist1,
113 . xmaxl, ymaxl, zmaxl, xminl, yminl, zminl, gapmin, gapmax
114 INTEGER :: NMN, NSN,NRTM,NTY
115 logical :: need_computation
116
117
118
119
120 call check_sorting_criteria( need_computation,nin,npari,nspmd,
121 . itask,ipari,tt,intbuf_tab )
122 if( .not.need_computation ) return
123
124
125 i_mem = 0
126 i_memg = 0
127
128 nrtm =ipari(4)
129 nsn =ipari(5)
130 nmn =ipari(6)
131 nty =ipari(7)
132 noint =ipari(15)
133 multimp=ipari(23)
134 ncont =ipari(18)
135 itied = ipari(85)
136 ncontact=multimp*ncont
137 nsnrold = ipari(24)
138
139 gap =intbuf_tab%VARIABLES(2)
140 gapmin=intbuf_tab%VARIABLES(13)
141 gapmax=intbuf_tab%VARIABLES(16)
142
143
144
145 retri=1
146
147
148 maxbox = intbuf_tab%VARIABLES(9)
149 minbox = intbuf_tab%VARIABLES(12)
150 tzinf = intbuf_tab%VARIABLES(8)
151 bminma(1)=-ep30
152 bminma(2)=-ep30
153 bminma(3)=-ep30
154 bminma(4)=ep30
155 bminma(5)=ep30
156 bminma(6)=ep30
157
158
159
160
162 IF(itask==0)THEN
163 ip0 = 1
164 ip1 = ip0 + nsn + nsnrold + 3
165 i_sk_old = intbuf_tab%I_STOK(1)
167 1 nsn+nsnrold ,i_sk_old ,intbuf_tab%CAND_N,intbuf_tab%CAND_E,
168 2 intbuf_tab%CAND_F,mwag(ip0),num_imp ,ind_imp )
169 intbuf_tab%I_STOK(1)=i_sk_old
170 ENDIF
171
172
173
174
176 1 x ,intbuf_tab%NSV,intbuf_tab%MSR,nsn ,nmn ,
177 2 itask ,intbuf_tab%XSAV,xminl ,yminl ,zminl ,
178 3 xmaxl ,ymaxl ,zmaxl )
179#include "lockon.inc"
180 bminma(1) =
max(bminma(1),xmaxl)
181 bminma(2) =
max(bminma(2),ymaxl)
182 bminma(3) =
max(bminma(3),zmaxl)
183 bminma(4) =
min(bminma(4),xminl)
184 bminma(5) =
min(bminma(5),yminl)
185 bminma(6) =
min(bminma(6),zminl)
186#include "lockoff.inc"
187 result = 0
188
190
191 IF(itask==0)THEN
192 IF(abs(bminma(6)-bminma(3))>2*ep30.OR.
193 + abs(bminma(5)-bminma(2))>2*ep30.OR.
194 + abs(bminma(4)-bminma(1))>2*ep30)THEN
195 CALL ancmsg(msgid=87,anmode=aninfo,
196 . i1=noint)
198 END IF
199
200 bminma(1)=bminma(1)+tzinf
201 bminma(2)=bminma(2)+tzinf
202 bminma(3)=bminma(3)+tzinf
203 bminma(4)=bminma(4)-tzinf
204 bminma(5)=bminma(5)-tzinf
205 bminma(6)=bminma(6)-tzinf
206
207
208
209 nsnr = 0
210 IF(nspmd>1) THEN
212 1 intbuf_tab%NSV,nsn ,x ,v ,ms ,
213 2 bminma ,weight ,intbuf_tab%STFNS,nin ,isendto ,
214 3 ircvfrom ,iad_elem,fr_elem ,nsnr ,ipari(21),
215 4 intbuf_tab%GAP_S,nsnfiold,nodnx_sms ,itab ,itied)
216
217
218
219
221 1 intbuf_tab%CAND_N,renum ,intbuf_tab%I_STOK(1), nin, nsn,
222 2 nsnfiold ,nsnrold)
223 END IF
224 END IF
225
226 cand_n_old = intbuf_tab%I_STOK(1)
227 40 CONTINUE
228
229 ild = 0
230 nb_n_b = 1
231
232
233
235
236 IF (imonm > 0)
CALL startime(timers,30)
237
238 IF(nrtm_t/=0)
240 1 x ,intbuf_tab%IRECTM(1+4*eshift),intbuf_tab%NSV,nmn ,nrtm_t ,
241 2 nsn ,ncont ,intbuf_tab%CAND_E,intbuf_tab%CAND_N,gap ,
242 3 noint ,intbuf_tab%I_STOK(1),tzinf ,maxbox ,minbox ,
243 4 nb_n_b ,eshift ,bminma ,mwag ,ild ,
244 7 ncontact ,nsnrold ,intbuf_tab%STFNS,nin ,ipari(21) ,
245 8 intbuf_tab%GAP_S,nsnr ,renum ,intbuf_tab%STFM(1+eshift),intbuf_tab%GAP_M,
246 9 gapmin ,gapmax ,i_mem,glob_therm%INTHEAT, glob_therm%IDT_THERM, glob_therm%NODADT_THERM)
247
248
249 IF (i_mem == 2)THEN
250#include "lockon.inc"
251 i_memg = i_mem
252#include "lockoff.inc"
253 ENDIF
254
255
257
258 IF(i_memg /=0)THEN
259
260
261
262 multimp = ipari(23) + 4
264
265 i_mem = 0
266 i_memg = 0
267 intbuf_tab%I_STOK(1)=cand_n_old
268 multimp=ipari(23)
269 ncontact=multimp*ncont
270 GOTO 40
271 ENDIF
272 IF (imonm > 0)
CALL stoptime(timers,30)
273
274#include "lockon.inc"
275 intbuf_tab%VARIABLES(9) =
min(maxbox,intbuf_tab%VARIABLES(9))
276 intbuf_tab%VARIABLES(12)=
min(minbox,intbuf_tab%VARIABLES(12))
277 intbuf_tab%VARIABLES(8) =
min(tzinf,intbuf_tab%VARIABLES(8))
278
279 intbuf_tab%VARIABLES(5) = intbuf_tab%VARIABLES(8)-gap
280 result = result + ild
281#include "lockoff.inc"
282
283
285 IF (result/=0) THEN
287 IF (itask==0) THEN
288 intbuf_tab%I_STOK(1) = i_sk_old
289 result = 0
290 ENDIF
292 ild = 0
293 maxbox = intbuf_tab%VARIABLES(9)
294 minbox = intbuf_tab%VARIABLES(12)
295 tzinf = intbuf_tab%VARIABLES(8)
296 GOTO 50
297 ENDIF
298
299 IF(nspmd>1)THEN
300
301
302
303
304 IF (imonm > 0)
CALL startime(timers,26)
305
306 intbuf_tab%VARIABLES(5) = -intbuf_tab%VARIABLES(5)
307 ibid = 0
308
309
310
312 1 result ,nsn ,intbuf_tab%CAND_N,intbuf_tab%I_STOK(1),nin,
313 2 ipari(21),nsnr,multimp ,nty,ibid,h3d_data)
314
315 ipari(24) = nsnr
316 IF (num_imp>0)
317 .
CALL imp_rnumcd(intbuf_tab%CAND_N,nin,nsn,num_imp
318
319 IF (imonm > 0)
CALL stoptime(timers,26)
320
321
322
323 ENDIF
324
325 RETURN
subroutine i10buce(x, irect, nsv, nmn, nrtm, nsn, ncont, cand_e, cand_n, gap, noint, ii_stok, tzinf, maxbox, minbox, nb_n_b, eshift, bminma, mwag, ild, ncontact, nsnrold, stfn, nin, igap, gap_s, nsnr, renum, stf, gap_m, gapmin, gapmax, i_mem, intheat, idt_therm, nodadt_therm)
subroutine i10trc(nsn, i_stok, cand_n, cand_e, cand_f, cand_a, num_imp, ind_imp)
subroutine i10xsave(x, nsv, msr, nsn, nmn, itask, xsav, xmin, ymin, zmin, xmax, ymax, zmax)
subroutine imp_rnumcd(cand_n, nin, nsn, num_imp, index)
subroutine spmd_tri10gat(result, nsn, cand_n, i_stok, nin, igap, nsnr, multimp, ity, intth, h3d_data)
subroutine spmd_tri10box(nsv, nsn, x, v, ms, bminmal, weight, stifn, nin, isendto, ircvfrom, iad_elem, fr_elem, nsnr, igap, gap_s, nsnfiold, nodnx_sms, itab, itied)
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)