65#ifndef HYPERMESH_LIB
67#endif
69
70
71
72#include "implicit_f.inc"
73
74
75
76#include "mvsiz_p.inc"
77#include "param_c.inc"
78
79
80
81#include "com04_c.inc"
82#include "vect07_c.inc"
83
84
85
86 INTEGER NB_NC,NB_EC,I_ADD,MAXSIZ,I_STOK,J_STOK,I_MEM,ISTF
87 INTEGER I_BID, I_AMAX,NB_N_B, NOINT, NSN,MULTIMP, IGAP
88 INTEGER ADD(2,0:*),IRECT(4,*),BPE(*),PE(*),BPN(*),PN(*)
89 INTEGER NSV(*),CAND_N(*),CAND_E(*), ITAB(*),NBINFLG(*),MBINFLG(*),
90 * ILEV,MVOISN(4,*),IPARTNS(*),IPEN0,INACTI,NRTM
91 INTEGER IXS(NIXS,*), IXS10(6,*), IXS16(8,*), IXS20(12,*),IRTSE(*),IS2SE(*)
92
94 . x(3,*),xyzm(6,*),tzinf,dbuc,stf(*),stfn(*),
95 . maxbox,minbox, xmax,
ymax, zmax,
96 . gap, gap_s(*), gap_m(*),
97 . gapmin, gapmax, marge, gapsmx, bgapsmx,
98 . gap_s_l(*),gap_m_l(*),marge_sh
99 my_real ,
INTENT(IN) :: dgapload
100 INTEGER ID,MSEGTYP(*)
101 LOGICAL, INTENT(in) :: FLAG_REMOVED_NODE
102 INTEGER, INTENT(in) :: S_KREMNODE
103 INTEGER, INTENT(in) :: S_REMNODE
104 INTEGER, DIMENSION(S_KREMNODE), INTENT(in) :: KREMNODE
105 INTEGER, DIMENSION(S_REMNODE), INTENT(in) :: REMNODE
106 INTEGER, DIMENSION(NUMNOD), INTENT(inout) :: TAG_REMOVED_NODE
107 CHARACTER(LEN=NCHARTITLE) :: TITR
108 INTEGER, DIMENSION(MVSIZ), INTENT(INOUT) ::PROV_N,PROV_E
109 INTEGER, DIMENSION(MVSIZ), INTENT(INOUT) :: IX1,IX2,IX3,IX4,NSVG
110 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: x1,x2,x3,x4
111 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: y1,y2,y3,y4
112 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: z1,z2,z3,z4
113 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: xi,yi,zi
114 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: x0,y0,z0,stif
115 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: n11,n21,n31,pene
116 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: nx1,ny1,nz1
117 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: nx2,ny2,nz2
118 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: nx3,ny3,nz3
119 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: nx4,ny4,nz4
120 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: p1,p2,p3,p4
121 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: lb1,lb2,lb3,lb4
122 my_real,
DIMENSION(MVSIZ),
INTENT(INOUT) :: lc1,lc2,lc3,lc4
123
124
125
126 INTEGER NB_NCN,NB_ECN,ADDNN,ADDNE,IPOS,I,IP,J
127 INTEGER INF,SUP,DIR,N1,N2,N3,N4,NN,NE,INS
128 INTEGER SKIP,NS,NS1,NS2,NSE
129 INTEGER :: FIRST,LAST
130 INTEGER :: IJK
131
133 . bid,dx,dy,dz,dsup,seuil,xmx,xmn,gapsmax,
134 . gapv(mvsiz),marge_e
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202 IF(nb_ec==0.OR.nb_nc==0) THEN
203
204
205
206 CALL i7dstk(i_add,nb_nc,nb_ec,add,bpn,pn,bpe,pe)
207 RETURN
208 ENDIF
209
210
211
212 dx = xyzm(4,i_add) - xyzm(1,i_add)
213 dy = xyzm(5,i_add) - xyzm(2,i_add)
214 dz = xyzm(6,i_add) - xyzm(3,i_add)
216
217 IF(add(2,1)+nb_ec>=maxsiz) THEN
218
219 IF ( nb_n_b == numnod) THEN
220#ifndef HYPERMESH_LIB
222 . msgtype=msgerror,
223 . anmode=aninfo,
225 . c1=titr)
226#endif
227 ENDIF
228 i_mem = 1
229 RETURN
230 ENDIF
231 IF(dsup<minbox.OR.
232 . nb_nc<=nb_n_b.AND.dsup<maxbox.OR.
233 . nb_nc<=nb_n_b.AND.nb_ec==1) THEN
234
235
236
237
238 DO i=1,nb_ec
239 ne = bpe(i)
240
241 ! do not take into account node_id = remnode(i)
242 IF(flag_removed_node) THEN
243 first = kremnode(ne)+1
244 last = kremnode(ne+1)
245 DO ijk=first,last
246 IF(remnode(ijk)<=numnod) tag_removed_node(remnode(ijk)) = 1
247 ENDDO
248 ENDIF
249
250 n1=irect(1,ne)
251 n2=irect(2,ne)
252 n3=irect(3,ne)
253 n4=irect(4,ne)
254 IF (msegtyp(ne)==0.OR.msegtyp(ne)>nrtm) THEN
255 marge_e = marge
256 ELSE
257 marge_e = marge_sh
258 END IF
259 DO j=1,nb_nc
260 nn=nsv(bpn(j))
261
262
263
264
265
266
267
268 IF(nn/=n1.AND.nn/=n2.AND.nn/=n3.AND.nn/=n4) THEN
269
270 skip=0
271 IF(nn > numnod)THEN
272 ns=nn-numnod
274 + ns1 ,ns2 )
275 IF(ns1 == n1 .OR. ns2 == n1) skip=1
276 IF(ns1 == n2 .OR. ns2 == n2) skip=1
277 IF(ns1 == n3 .OR. ns2 == n3) skip=1
278 IF(ns1 == n4 .OR. ns2 == n4) skip=1
279
280 IF(skip==0) THEN
281 IF(flag_removed_node) THEN
282 first = kremnode(ne)+1
283 last = kremnode(ne+1)
284 DO ijk=first,last
285 IF(remnode(ijk)==nn) skip = 1
286 ENDDO
287 ENDIF
288 ENDIF
289 ELSE
290
291
292 IF(flag_removed_node) THEN
293 IF(tag_removed_node(nn)==1) skip = 1
294 ENDIF
295
296 ENDIF
297
298 IF (skip==0)THEN
299 j_stok = j_stok + 1
300 prov_n(j_stok) = bpn(j)
301 prov_e(j_stok) = ne
302 IF(j_stok==nvsiz) THEN
303 lft = 1
304 llt = nvsiz
305 nft = 0
306 j_stok = 0
307 CALL i7cor3(x ,irect,nsv ,prov_e ,prov_n,
308 . stf ,stfn ,gapv ,igap ,gap ,
309 . gap_s,gap_m,istf ,gapmin ,gapmax,
310 . gap_s_l,gap_m_l ,zero ,ix1 ,ix2 ,
311 5 ix3 ,ix4 ,nsvg,x1 ,x2 ,
312 6 x3 ,x4 ,y1 ,y2 ,y3 ,
313 7 y4 ,z1 ,z2 ,z3 ,z4 ,
314 8 xi ,yi ,zi ,stif ,dgapload,
315 9 llt)
316 CALL i7dst3(ix3,ix4,x1 ,x2 ,x3 ,
317 1 x4 ,y1 ,y2 ,y3 ,y4 ,
318 2 z1 ,z2 ,z3 ,z4 ,xi ,
319 3 yi ,zi ,x0 ,y0 ,z0 ,
320 4 nx1,ny1,nz1,nx2,ny2,
321 5 nz2,nx3,ny3,nz3,nx4,
322 6 ny4,nz4,p1 ,p2 ,p3 ,
323 7 p4 ,lb1,lb2,lb3,lb4,
324 8 lc1,lc2,lc3,lc4,llt)
325
326 CALL i7pen3(marge_e,gapv,n11,n21,n31,
327 1 pene ,nx1 ,ny1,nz1,nx2,
328 2 ny2 ,nz2 ,nx3,ny3,nz3,
329 3 nx4 ,ny4 ,nz4,p1 ,p2 ,
330 4 p3 ,p4,llt)
331
332 IF (ilev==2)
CALL i24s1s2(prov_n,prov_e,nbinflg,mbinflg,pene)
333 IF(i_stok+nvsiz<multimp*nsn) THEN
334 CALL i7cmp3(i_stok,cand_e ,cand_n,1,pene,
335 1 prov_n,prov_e)
336 ELSE
337 i_bid = 0
338 CALL i7cmp3(i_bid,cand_e,cand_n,0,pene,
339 1 prov_n,prov_e)
340 IF(i_stok+i_bid<multimp*nsn) THEN
341 CALL i7cmp3(i_stok,cand_e,cand_n,1,pene,
342 1 prov_n,prov_e)
343 ELSE
344 i_mem = 2
345
346
347 RETURN
348 ENDIF
349 ENDIF
350 ENDIF
351
352
353 ENDIF
354 ENDIF
355 ENDDO
356
357
358
359 IF(flag_removed_node) THEN
360 first = kremnode(ne)+1
361 last = kremnode(ne+1)
362 DO ijk=first,last
363 IF(remnode(ijk)<=numnod) tag_removed_node(remnode(ijk)) = 0
364 ENDDO
365 ENDIF
366
367 ENDDO
368
369
370 CALL i7dstk(i_add,nb_nc,nb_ec,add,bpn,pn,bpe,pe)
371 RETURN
372 ENDIF
373
374
375
376
377
378
379
380
381
382
383
384
385 dir = 1
386 IF(dy==dsup) THEN
387 dir = 2
388 ELSE IF(dz==dsup) THEN
389 dir = 3
390 ENDIF
391 seuil =(xyzm(dir+3,i_add)+xyzm(dir,i_add))/2
392
393
394
395 nb_ncn= 0
396 addnn= add(1,1)
397 inf = 0
398 sup = 0
399 IF(igap==0)THEN
400 DO i=1,nb_nc
401 IF(x(dir,nsv(bpn(i)))<seuil) THEN
402
403 addnn = addnn + 1
404 pn(addnn) = bpn(i)
405 inf = 1
406 ELSE
407 nb_ncn = nb_ncn + 1
408 bpn(nb_ncn) = bpn(i)
409
410 sup = 1
411 ENDIF
412 END DO
413 ELSE
414 gapsmx = zero
415 bgapsmx = zero
416 DO i=1,nb_nc
417 IF(x(dir,nsv(bpn(i)))<seuil) THEN
418
419 addnn = addnn + 1
420 pn(addnn) = bpn(i)
421 gapsmx =
max(gapsmx,gap_s(bpn(i)))
422 inf = 1
423 ELSE
424
425 nb_ncn = nb_ncn + 1
426 bpn(nb_ncn) = bpn(i)
427 bgapsmx =
max(bgapsmx,gap_s(bpn(i)))
428 sup = 1
429 ENDIF
430 END DO
431 END IF
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474 nb_ecn= 0
475 addne= add(2,1)
476 IF(igap==0)THEN
477 DO i=1,nb_ec
478 xmx =
max(x(dir,irect(1,bpe(i))),x(dir,irect(2,bpe(i))),
479 . x(dir,irect(3,bpe(i))),x(dir,irect(4,bpe(i))))
480 . + tzinf
481 xmn =
min(x(dir,irect(1,bpe(i))),x(dir,irect(2,bpe(i))),
482 . x(dir,irect(3,bpe(i))),x(dir,irect(4,bpe(i))))
483 . - tzinf
484 IF(xmn<seuil.AND.inf==1) THEN
485
486 addne = addne + 1
487 pe(addne) = bpe(i)
488 ENDIF
489 IF(xmx>=seuil.AND.sup==1) THEN
490
491 nb_ecn = nb_ecn + 1
492 bpe(nb_ecn) = bpe(i)
493 ENDIF
494 ENDDO
495 ELSE
496 DO i=1,nb_ec
497 ne = bpe(i)
498 IF (msegtyp(ne)==0.OR.msegtyp(ne)>nrtm) THEN
499 marge_e = marge
500 ELSE
501 marge_e = marge_sh
502 END IF
503 xmn =
min(x(dir,irect(1,ne)),x(dir,irect(2,ne)),
504 . x(dir,irect(3,ne)),x(dir,irect(4,ne)))
505 . -
max(
min(gapsmx+gap_m(ne),gapmax),gapmin)+dgapload-marge_e
506 IF(xmn<seuil.AND.inf==1) THEN
507
508 addne = addne + 1
509 pe(addne) = bpe(i)
510 ENDIF
511 xmx =
max(x(dir,irect(1,ne)),x(dir,irect(2,ne)),
512 . x(dir,irect(3,ne)),x(dir,irect(4,ne)))
513 . +
max(
min(bgapsmx+gap_m(ne),gapmax),gapmin)+dgapload+marge_e
514 IF(xmx>=seuil.AND.sup==1) THEN
515
516 nb_ecn = nb_ecn + 1
517 bpe(nb_ecn) = bpe(i)
518 ENDIF
519 ENDDO
520 END IF
521
522
523
524 add(1,2) = addnn
525 add(2,2) = addne
526
527
528
529
530
531
532 xyzm(1,i_add+1) = xyzm(1,i_add)
533 xyzm(2,i_add+1) = xyzm(2,i_add)
534 xyzm(3,i_add+1) = xyzm(3,i_add)
535 xyzm(4,i_add+1) = xyzm(4,i_add)
536 xyzm(5,i_add+1) = xyzm(5,i_add)
537 xyzm(6,i_add+1) = xyzm(6,i_add)
538 xyzm(dir,i_add+1) = seuil
539 xyzm(dir+3,i_add) = seuil
540
541 nb_nc = nb_ncn
542 nb_ec = nb_ecn
543
544 i_add = i_add + 1
545 IF(i_add>=1000) THEN
546
547 IF ( nb_n_b == numnod) THEN
548#ifndef HYPERMESH_LIB
550 . msgtype=msgerror,
551 . anmode=aninfo,
553 . c1=titr)
554#endif
555 ENDIF
556 i_mem = 1
557 RETURN
558 ENDIF
559
560
561 RETURN
subroutine i24s1s2(prov_n, prov_e, nbinflg, mbinflg, pene)
subroutine i24fic_getn(ns, irtse, is2se, ie, ns1, ns2)
subroutine i7cmp3(i_stok, cand_e, cand_n, iflag, pene, prov_n, prov_e)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
integer, parameter nchartitle
subroutine i7cor3(x, irect, nsv, cand_e, cand_n, stf, stfn, gapv, igap, gap, gap_s, gap_m, istf, gapmin, gapmax, gap_s_l, gap_m_l, drad, ix1, ix2, ix3, ix4, nsvg, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, xi, yi, zi, stif, dgapload, last)
subroutine i7dst3(ix3, ix4, x1, x2, x3, x4, y1, y2, y3, y4, z1, z2, z3, z4, xi, yi, zi, x0, y0, z0, nx1, ny1, nz1, nx2, ny2, nz2, nx3, ny3, nz3, nx4, ny4, nz4, p1, p2, p3, p4, lb1, lb2, lb3, lb4, lc1, lc2, lc3, lc4, last)
subroutine i7dstk(i_add, nb_nc, nb_ec, add, bpn, pn, bpe, pe)
subroutine i7pen3(marge, gapv, n1, n2, n3, pene, nx1, ny1, nz1, nx2, ny2, nz2, nx3, ny3, nz3, nx4, ny4, nz4, p1, p2, p3, p4, last)
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)