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_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,
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,
79 . I,J,K,L
80 INTEGER INF,SUP,DIR,N1,N2,NN1,NN2,NN,NE,MEMX,NCAND_PROV
82 . dx,dy,dz,dsup,seuil,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 IF(nb_mc==0.OR.nb_sc==0) THEN
156
157
158
159
160 CALL i7dstk(i_add,nb_sc,nb_mc,add(1,i_add-1),bpn,pn,bpe,pe)
161 RETURN
162 ENDIF
163
164
165
166 dx = xyzm(4,i_add) - xyzm(1,i_add)
167 dy = xyzm(5,i_add) - xyzm(2,i_add)
168 dz = xyzm(6,i_add) - xyzm(3,i_add)
170
171
172 IF(add(1,i_add)+nb_sc>=maxsiz.OR.
173 . add(2,i_add)+nb_mc>=maxsiz) THEN
174
175 IF ( nb_n_b == maxsiz/3) THEN
176
177
178
180 . msgtype=msgerror,
181 . anmode=aninfo,
183 . c1=titr)
184 ENDIF
185 i_mem = 1
186 RETURN
187 ENDIF
188 ncand_prov=nb_mc*nb_sc
189 IF(dsup<minbox.OR.istop==1.OR.
190 . (nb_sc<=nb_n_b.AND.dsup<maxbox).OR.
191 . (nb_sc<=nb_n_b.AND.nb_mc==1).OR.
192 . (nb_mc<=nb_n_b.AND.dsup<maxbox).OR.
193 . (nb_mc<=nb_n_b.AND.nb_sc==1)) THEN
194 istop = 0
195
196
197
198
199 DO k=1,ncand_prov,nvsiz
200 DO l=k,
min(k-1+nvsiz,ncand_prov)
201 i = 1+(l-1)/nb_sc
202 j = l-(i-1)*nb_sc
203 ne = bpe(i)
204 nn = bpn(j)
205
206
207
208
209 n1=irectm(1,ne)
210 n2=irectm(2,ne)
211 nn1=irects(1,nn)
212 nn2=irects(2,nn)
213 IF(nn1/=n1.AND.nn1/=n2.AND.
214 . nn2/=n1.AND.nn2/=n2) THEN
215 j_stok = j_stok + 1
216 prov_s(j_stok) = nn
217 prov_m(j_stok) = ne
218 ENDIF
219 ENDDO
220 IF(j_stok>=nvsiz)THEN
222 1 nvsiz,irects,irectm,x ,ii_stok,
223 2 cand_s,cand_m,nsn ,noint ,tzinf ,
224 3 i_mem ,prov_s,prov_m,multimp,addcm,
225 4 chaine,iadfin)
226 IF(i_mem==2)RETURN
227 j_stok = j_stok-nvsiz
228 DO j=1,j_stok
229 prov_s(j) = prov_s(j+nvsiz)
230 prov_m(j) = prov_m(j+nvsiz)
231 ENDDO
232 ENDIF
233 ENDDO
234
235
236
237 CALL i7dstk(i_add,nb_sc,nb_mc,add(1,i_add-1),bpn,
238 . pn,bpe,pe)
239 RETURN
240 ENDIF
241
242
243
244
245
246
247
248
249
250
251
252
253 dir = 1
254 IF(dy==dsup) THEN
255 dir = 2
256 ELSE IF(dz==dsup) THEN
257 dir = 3
258 ENDIF
259 seuil =(xyzm(dir+3,i_add)+xyzm(dir,i_add))/2
260
261
262
263
264 nb_scn= 0
265 nb_scn1= 0
266
267 addnn= add(1,i_add)
268 inf = 0
269 sup = 0
270 DO 70 i=1,nb_sc
271 nn = bpn(i)
272
273
274
275 xx1=x(dir, irects(1,nn))
276 xx2=x(dir, irects(2,nn))
277 xmax=
max(xx1,xx2)+tzinf
278 xmin=
min(xx1,xx2)-tzinf
279 IF(xmin<seuil) THEN
280
281 nb_scn1 = nb_scn1 + 1
282 addnn = addnn + 1
283 pn(addnn) = bpn(i)
284 inf = 1
285
286
287
288 ENDIF
289 IF(xmax>=seuil) THEN
290 nb_scn = nb_scn + 1
291 bpn(nb_scn) = bpn(i)
292
293 sup = 1
294
295
296
297 ENDIF
298 70 CONTINUE
299
300
301
302 nb_mcn= 0
303 nb_mcn1= 0
304
305 addne= add(2,i_add)
306 DO i=1,nb_mc
307 nn = bpe(i)
308 xx1=x(dir, irectm(1,nn))
309 xx2=x(dir, irectm(2,nn))
310 xmax=
max(xx1,xx2)+tzinf
311 xmin=
min(xx1,xx2)-tzinf
312
313
314
315
316
317 IF(xmin<seuil.AND.inf==1) THEN
318
319 nb_mcn1 = nb_mcn1 + 1
320 addne = addne + 1
321 pe(addne) = bpe(i)
322
323
324
325
326
327 ENDIF
328 IF(xmax>=seuil.AND.sup==1) THEN
329
330 nb_mcn = nb_mcn + 1
331 bpe(nb_mcn) = bpe(i)
332
333
334
335
336
337 ENDIF
338 ENDDO
339
340
341
342
343
344 add(1,i_add+1) = addnn
345 add(2,i_add+1) = addne
346
347
348
349
350
351
352 xyzm(1,i_add+1) = xyzm(1,i_add)
353 xyzm(2,i_add+1) = xyzm(2,i_add)
354 xyzm(3,i_add+1) = xyzm(3,i_add)
355 xyzm(4,i_add+1) = xyzm(4,i_add)
356 xyzm(5,i_add+1) = xyzm(5,i_add)
357 xyzm(6,i_add+1) = xyzm(6,i_add)
358 xyzm(dir,i_add+1) = seuil
359 xyzm(dir+3,i_add) = seuil
360
361 IF( ((nb_scn==nb_sc .AND. nb_mcn1==nb_mc) .OR.
362 . (nb_scn1==nb_sc .AND. nb_mcn==nb_mc)) .AND.
363 .
min(nb_scn,nb_scn1)>0.AND.
364 .
min(nb_mcn,nb_mcn1)>0) istop = istop + 1
365
366 nb_sc = nb_scn
367 nb_mc = nb_mcn
368
369 i_add = i_add + 1
370 IF(i_add>=1000) THEN
371
372 IF ( nb_n_b == maxsiz/3) THEN
373
374
375
377 . msgtype=msgerror,
378 . anmode=aninfo,
380 . c1=titr)
381 ENDIF
382 i_mem = 1
383 RETURN
384 ENDIF
385
386
387 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)