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