44
45
46
47
48
49
50
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "mvsiz_p.inc"
59#include "param_c.inc"
60
61
62
63 INTEGER NB_SC,NB_MC,I_ADD,MAXSIZ,I_STOK,J_STOK,I_MEM
64 INTEGER I_BID, I_AMAX,NB_N_B, NOINT, NSN,MULTIMP,ISTOP,
65 . IADFIN,II_STOK
66 INTEGER ADD(2,0:*),IRECTS(2,*),IRECTM(2,*),BPE(*),PE(*)
67 INTEGER CAND_S(*),CAND_M(*),BPN(*),PN(*)
68 INTEGER ADDCM(*),CHAINE(*)
69 INTEGER PROV_S(2*MVSIZ),PROV_M(2*MVSIZ)
71 . x(3,*),xyzm(6,*),tzinf,dbuc,
72 . maxbox,minbox
73 INTEGER ID
74 CHARACTER(LEN=NCHARTITLE) :: TITR
75
76
77
78 INTEGER NB_SCN1,NB_MCN1,NB_SCN,NB_MCN,ADDNN,ADDNE,IPOS,
79 . I,IP,J,K,L
80 INTEGER INF,SUP,DIR,N1,N2,NN1,NN2,NN,NE,MEMX,NCAND_PROV
82 . dx,dy,dz,dsup,seuil,xmx,xmn,xx1,xx2,xmin, xmax
83
84
85
86 DATA memx/0/
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158 IF(nb_mc==0.OR.nb_sc==0) THEN
159
160
161
162
163 CALL i7dstk(i_add,nb_sc,nb_mc,add(1,i_add-1),bpn,pn,bpe,pe)
164 RETURN
165 ENDIF
166
167
168
169 dx = xyzm(4,i_add) - xyzm(1,i_add)
170 dy = xyzm(5,i_add) - xyzm(2,i_add)
171 dz = xyzm(6,i_add) - xyzm(3,i_add)
173
174
175 IF(add(1,i_add)+nb_sc>=maxsiz.OR.
176 . add(2,i_add)+nb_mc>=maxsiz) THEN
177
178 IF ( nb_n_b == maxsiz/3) THEN
179
180
181
183 . msgtype=msgerror,
184 . anmode=aninfo,
186 . c1=titr)
187 ENDIF
188 i_mem = 1
189 RETURN
190 ENDIF
191 ncand_prov=nb_mc*nb_sc
192 IF(dsup<minbox.OR.istop==1.OR.
193 . (nb_sc<=nb_n_b.AND.dsup<maxbox).OR.
194 . (nb_sc<=nb_n_b.AND.nb_mc==1).OR.
195 . (nb_mc<=nb_n_b.AND.dsup<maxbox).OR.
196 . (nb_mc<=nb_n_b.AND.nb_sc==1)) THEN
197 istop = 0
198
199
200
201
202 DO k=1,ncand_prov,nvsiz
203 DO l=k,
min(k-1+nvsiz,ncand_prov)
204 i = 1+(l-1)/nb_sc
205 j = l-(i-1)*nb_sc
206 ne = bpe(i)
207 nn = bpn(j)
208
209
210
211
212 n1=irectm(1,ne)
213 n2=irectm(2,ne)
214 nn1=irects(1,nn)
215 nn2=irects(2,nn)
216 IF(nn1/=n1.AND.nn1/=n2.AND.
217 . nn2/=n1.AND.nn2/=n2) THEN
218 j_stok = j_stok + 1
219 prov_s(j_stok) = nn
220 prov_m(j_stok) = ne
221 ENDIF
222 ENDDO
223 IF(j_stok>=nvsiz)THEN
225 1 nvsiz,irects,irectm,x ,ii_stok,
226 2 cand_s,cand_m,nsn ,noint ,tzinf ,
227 3 i_mem ,prov_s,prov_m,multimp,addcm,
228 4 chaine,iadfin)
229 IF(i_mem==2)RETURN
230 j_stok = j_stok-nvsiz
231 DO j=1,j_stok
232 prov_s(j) = prov_s(j+nvsiz)
233 prov_m(j) = prov_m(j+nvsiz)
234 ENDDO
235 ENDIF
236 ENDDO
237
238
239
240 CALL i7dstk(i_add,nb_sc,nb_mc,add(1,i_add-1),bpn,
241 . pn,bpe,pe)
242 RETURN
243 ENDIF
244
245
246
247
248
249
250
251
252
253
254
255
256 dir = 1
257 IF(dy==dsup) THEN
258 dir = 2
259 ELSE IF(dz==dsup) THEN
260 dir = 3
261 ENDIF
262 seuil =(xyzm(dir+3,i_add)+xyzm(dir,i_add))/2
263
264
265
266
267 nb_scn= 0
268 nb_scn1= 0
269
270 addnn= add(1,i_add)
271 inf = 0
272 sup = 0
273 DO 70 i=1,nb_sc
274 nn = bpn(i)
275
276
277
278 xx1=x(dir, irects(1,nn))
279 xx2=x(dir, irects(2,nn))
280 xmax=
max(xx1,xx2)+tzinf
281 xmin=
min(xx1,xx2)-tzinf
282 IF(xmin<seuil) THEN
283
284 nb_scn1 = nb_scn1 + 1
285 addnn = addnn + 1
286 pn(addnn) = bpn(i)
287 inf = 1
288
289
290
291 ENDIF
292 IF(xmax>=seuil) THEN
293 nb_scn = nb_scn + 1
294 bpn(nb_scn) = bpn(i)
295
296 sup = 1
297
298
299
300 ENDIF
301 70 CONTINUE
302
303
304
305 nb_mcn= 0
306 nb_mcn1= 0
307
308 addne= add(2,i_add)
309 DO i=1,nb_mc
310 nn = bpe(i)
311 xx1=x(dir, irectm(1,nn))
312 xx2=x(dir, irectm(2,nn))
313 xmax=
max(xx1,xx2)+tzinf
314 xmin=
min(xx1,xx2)-tzinf
315
316
317
318
319
320 IF(xmin<seuil.AND.inf==1) THEN
321
322 nb_mcn1 = nb_mcn1 + 1
323 addne = addne + 1
324 pe(addne) = bpe(i)
325
326
327
328
329
330 ENDIF
331 IF(xmax>=seuil.AND.sup==1) THEN
332
333 nb_mcn = nb_mcn + 1
334 bpe(nb_mcn) = bpe(i)
335
336
337
338
339
340 ENDIF
341 ENDDO
342
343
344
345
346
347 add(1,i_add+1) = addnn
348 add(2,i_add+1) = addne
349
350
351
352
353
354
355 xyzm(1,i_add+1) = xyzm(1,i_add)
356 xyzm(2,i_add+1) = xyzm(2,i_add)
357 xyzm(3,i_add+1) = xyzm(3,i_add)
358 xyzm(4,i_add+1) = xyzm(4,i_add)
359 xyzm(5,i_add+1) = xyzm(5,i_add)
360 xyzm(6,i_add+1) = xyzm(6,i_add)
361 xyzm(dir,i_add+1) = seuil
362 xyzm(dir+3,i_add) = seuil
363
364 IF( ((nb_scn==nb_sc .AND. nb_mcn1==nb_mc) .OR.
365 . (nb_scn1==nb_sc .AND. nb_mcn==nb_mc)) .AND.
366 .
min(nb_scn,nb_scn1)>0.AND.
367 .
min(nb_mcn,nb_mcn1)>0) istop = istop + 1
368
369 nb_sc = nb_scn
370 nb_mc = nb_mcn
371
372 i_add = i_add + 1
373 IF(i_add>=1000) THEN
374
375 IF ( nb_n_b == maxsiz/3) THEN
376
377
378
380 . msgtype=msgerror,
381 . anmode=aninfo,
383 . c1=titr)
384 ENDIF
385 i_mem = 1
386 RETURN
387 ENDIF
388
389
390 RETURN
integer, parameter nchartitle
subroutine i11sto(j_stok, irects, irectm, x, ii_stok, cand_n, cand_e, nsn, noint, tzinf, i_mem, prov_n, prov_e, multimp, addcm, chaine, iadfin)
subroutine i7dstk(i_add, nb_nc, nb_ec, add, bpn, pn, bpe, pe)
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)