OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_lecgre.F File Reference
#include "implicit_f.inc"
#include "com04_c.inc"
#include "param_c.inc"
#include "remesh_c.inc"
#include "scr17_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_lecgre (igrelem, ix, nix1, nix, numel, ngrele, ielt, ipart, iparte, x, elkey, isubmod, flag, keltree, eltree, ksontree, nsontree, klevtree, skew, iskn, unitab, itabm1, ibox, rtrans, lsubmodel, ixx_s, ixx_s_ind, iadboxmax, subset, startkey)

Function/Subroutine Documentation

◆ hm_lecgre()

subroutine hm_lecgre ( type (group_), dimension(ngrele), target igrelem,
integer, dimension(nix,*) ix,
integer nix1,
integer nix,
integer numel,
integer ngrele,
integer ielt,
integer, dimension(lipart1,*) ipart,
integer, dimension(*) iparte,
x,
character elkey,
integer, dimension(*) isubmod,
integer flag,
integer keltree,
integer, dimension(keltree,*) eltree,
integer ksontree,
integer nsontree,
integer klevtree,
skew,
integer, dimension(liskn,*) iskn,
type (unit_type_), intent(in) unitab,
integer, dimension(*) itabm1,
type (box_), dimension(nbbox) ibox,
rtrans,
type(submodel_data), dimension(*) lsubmodel,
integer, dimension(*) ixx_s,
integer, dimension(*) ixx_s_ind,
integer iadboxmax,
type (subset_), dimension(nsubs) subset,
character startkey )

Definition at line 48 of file hm_lecgre.F.

56C-----------------------------------------------
57C M o d u l e s
58C-----------------------------------------------
59 USE my_alloc_mod
60 USE unitab_mod
61 USE submodel_mod
62 USE message_mod
63 USE groupdef_mod
67C-----------------------------------------------
68C I m p l i c i t T y p e s
69C-----------------------------------------------
70#include "implicit_f.inc"
71C-----------------------------------------------
72C C o m m o n B l o c k s
73C-----------------------------------------------
74#include "com04_c.inc"
75#include "param_c.inc"
76#include "remesh_c.inc"
77#include "scr17_c.inc"
78C-----------------------------------------------
79C D u m m y A r g u m e n t s
80C-----------------------------------------------
81 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
82 INTEGER NIX1 ,NIX ,NUMEL ,NGRELE,IELT,FLAG
83 INTEGER IPARTE(*),IPART(LIPART1,*),IX(NIX,*),ISUBMOD(*),
84 . KELTREE, ELTREE(KELTREE,*),
85 . KSONTREE, NSONTREE, KLEVTREE,ISKN(LISKN,*),ITABM1(*),
86 . IXX_S(*), IXX_S_IND(*)
88 . x(3,*),skew(lskew,*),rtrans(*)
89 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
90 CHARACTER ELKEY*4,STARTKEY*7
91C-----------------------------------------------
92 TYPE (SUBSET_) , DIMENSION(NSUBS) :: SUBSET
93 TYPE (GROUP_) , TARGET, DIMENSION(NGRELE) :: IGRELEM
94 TYPE (BOX_) , DIMENSION(NBBOX) :: IBOX
95C-----------------------------------------------
96C L o c a l V a r i a b l e s
97C-----------------------------------------------
98 INTEGER I,J,K,L,II,JJ,KK,ISU,ID,NEL,N1,N2,IGS,JREC,
99 . IAD0,IADC,IADFIN,IT0,IT1,IT2,IT3,IT4,IT5,
100 . KAD,UID,IFLAGUNIT,
101 . ISK,BOXTYPE,J2(2),IT6,SUB_ID,IADBOX,NN,IADBOXMAX,
102 . IT7, IDB
103 INTEGER NLIST,STAT,LIST_IGR(NGRELE)
104 INTEGER IP, NLEV, MY_LEV,IDMIN,IDMAX,OFFSET,NLINES
105 my_real
106 . xmin,xmax,ymin,ymax,zmin,zmax,bid,fac_l,
107 . diam,xp1,yp1,zp1,xp2,yp2,zp2
108 CHARACTER(LEN=NCHARTITLE) :: TITR,TITR1
109 CHARACTER(LEN=NCHARKEY) :: KEY, KEY2
110 CHARACTER MES*40
111 INTEGER, DIMENSION(:),ALLOCATABLE :: BUFTMP
112 INTEGER, DIMENSION(:),ALLOCATABLE :: BUFBOX
113 LOGICAL IS_AVAILABLE,IS_ENCRYPTED
114C-----------------------------------------------
115 INTEGER, DIMENSION(:), POINTER :: ELEM
116 INTEGER,DIMENSION(:),ALLOCATABLE :: LIST_ENTITY
117 INTEGER :: NENTITY
118C-----------------------------------------------
119 INTERFACE
120 SUBROUTINE groups_get_elem_list(arg1,arg2,arg3)
121 USE submodel_mod
122 INTEGER,DIMENSION(:),ALLOCATABLE :: arg1
123 INTEGER,INTENT(INOUT) :: arg2
124 TYPE(SUBMODEL_DATA) :: arg3(NSUBMOD)
125 END SUBROUTINE
126 END INTERFACE
127C-----------------------------------------------
128C E x t e r n a l F u n c t i o n s
129C-----------------------------------------------
130 INTEGER NINTLST,NINTLSTN,LISTCNT
131C-----------------------------------------------
132C IGRELEM(IGS)%ID : GROUP identifier
133C IGRELEM(IGS)%TITLE : GROUP title
134C IGRELEM(IGS)%NENTITY : Entities (elements) number of the GROUP
135C IGRELEM(IGS)%GRTYPE : TYPE ( 0-NOEUDS, 1-BRIC, 2-QUAD, 3-SHELL_4N,
136! 4-TRUSS, 5-BEAM, 6-SPRINGS,7-SHELL_3N)
137!! GRTYPE --- > OBSOLETE
138C IGRELEM(IGS)%SORTED : FLAG for sorted/unsorted elements
139! = 0 -> sorted
140! = 1 -> unsorted
141C IGRELEM(IGS)%GRPGRP : TYPE of element GROUP
142! = 1 ELEM
143! = 2 grelem
144! = 3 SUBSET,PART,MAT,PROP
145! = 4 BOX,GENE
146! = 5 SUBMOD
147C IGRELEM(IGS)%LEVEL : Hierarchy level
148! (FLAG 'SUBLEVEL DONE' FOR GROUPS OF GROUPS)
149! = 0 ---> not yet initialized
150! = 1 ---> done
151C=======================================================================
152 mes(01:04) = elkey
153 mes(05:18) = ' ELEMENT GROUP'
154 mes(19:40) = ' '
155 it0 = 0
156 it1 = 0
157 it2 = 0
158 it3 = 0
159 it4 = 0
160 it5 = 0
161 it6 = 0
162 it7 = 0
163 titr1='ELEMENT GROUP'
164 ALLOCATE(buftmp(max(numel*5,npart)),stat=stat)
165 IF (stat /= 0) THEN
166 CALL ancmsg(msgid=268,anmode=aninfo,msgtype=msgerror,c1='BUFTMP')
167 ENDIF
168C-------------------------
169C groupes d' elements + init IGRN(1,IGS)
170C-------------------------
171 igs=0
172 CALL hm_option_start(trim(startkey))
173 DO i=1,ngrele !NGRBRIC, NGRQUAD, etc...
174
175 CALL hm_option_read_key(lsubmodel,
176 . option_id = id,
177 . option_titr = titr ,
178 . unit_id = uid,
179 . keyword2 = key ,
180 . keyword3 = key2)
181
182 igs=igs+1
183!
184! initialized variables:
185 IF (flag == 0) THEN
186 igrelem(igs)%ID = 0
187 igrelem(igs)%NENTITY = 0
188 igrelem(igs)%GRTYPE = 0
189 igrelem(igs)%SORTED = 0
190 igrelem(igs)%GRPGRP = 0
191 igrelem(igs)%LEVEL = 0
192 igrelem(igs)%R2R_ALL = 0
193 igrelem(igs)%R2R_SHARE = 0
194 ENDIF
195!
196 igrelem(igs)%ID=id
197 igrelem(igs)%GRTYPE=ielt
198 igrelem(igs)%LEVEL=1
199 igrelem(igs)%TITLE=titr
200C
201 IF(key(1:6) == startkey(2:7))THEN
202C groupes de groupes
203 igrelem(igs)%NENTITY=-1
204 igrelem(igs)%GRPGRP=2
205 igrelem(igs)%LEVEL=0
206 it0=it0+1
207 ELSEIF(key(1:4) == elkey)THEN
208C groupe d'elements
209 it1=it1+1
210 IF (flag == 0) THEN
211 igrelem(igs)%NENTITY=0
212 igrelem(igs)%GRPGRP=1
213 ENDIF
214 ELSEIF(key(1:4) == 'PART' .OR. key(1:6) == 'SUBSET' .OR. key(1:3) == 'MAT' .OR. key(1:4) == 'PROP') THEN
215C groupe de SUBSET PART MAT OU PROP
216 it2=it2+1
217 IF (flag == 0) THEN
218 igrelem(igs)%NENTITY=0
219 igrelem(igs)%GRPGRP=3
220 ENDIF
221 ELSEIF((key(1:3) == 'BOX' .AND. nbbox == 0 .AND.(key2(1:5) /= 'RECTA'.AND.
222 . key2(1:5) /= 'CYLIN'.AND.key2(1:5) /= 'SPHER')).OR.key(1:4) == 'GENE')THEN
223C groupe d'elements dans un box (old/obsolete/not supported with new reader) OR GENE
224 it3=it3+1
225 IF (flag == 0) THEN
226 igrelem(igs)%NENTITY=0
227 igrelem(igs)%GRPGRP=4
228 ENDIF
229 ELSEIF(key(1:6) == 'SUBMOD')THEN
230C groupe d'elements dans un submodel
231 it4=it4+1
232 IF (flag == 0) THEN
233 igrelem(igs)%NENTITY=0
234 igrelem(igs)%GRPGRP=5
235 ENDIF
236 ELSEIF(key(1:3) == 'BOX'.AND.(key2(1:5) == 'RECTA'.OR.
237 . key2(1:5) == 'CYLIN'.OR.key2(1:5) == 'SPHER'))THEN
238C old /grnod/box (not /BOX/BOX)
239C groupe de noeuds dans un box (clasical box, parallelepiped,
240C cylindrical, spherical)
241 it5=it5+1
242 IF (flag == 0) THEN
243 igrelem(igs)%NENTITY=0
244 igrelem(igs)%GRPGRP=6
245 ENDIF
246 ELSEIF(key(1:3) == 'BOX' .AND. nbbox > 0)THEN
247C multi box (box de box)
248 it6=it6+1
249 ELSEIF(key(1:8) == 'GEN_INCR')THEN
250C groupe d'elements gen_inc first last offset
251C
252 it7=it7+1
253 IF (flag == 0) THEN
254 igrelem(igs)%NENTITY=0
255 igrelem(igs)%GRPGRP=4
256 ENDIF
257 ENDIF
258C
259 ENDDO !next I
260
261C-------------------------------------
262C Recherche des ID doubles
263C-------------------------------------
264 IF (flag == 0) THEN
265 DO igs=1,ngrele
266 list_igr(igs) = igrelem(igs)%ID
267 enddo!next IGS
268 CALL udouble_igr(list_igr,ngrele,mes,0,bid)
269 ENDIF
270
271C-------------------------------------
272C Remplacement des n0 d'elements user par systeme
273C-------------------------------------
274
275 igs=0
276 kk=0
277
278 IF (it1 /= 0) THEN
279
280 buftmp = 0
281 IF(nadmesh==0.OR.(elkey(1:4)/='SHEL'.AND.elkey(1:4)/='SH3N'))THEN
282 CALL hm_option_start(trim(startkey))
283 DO i=1,ngrele !NGRBRIC, NGRQUAD, etc...
284 CALL hm_option_read_key(lsubmodel,
285 . option_id = id,
286 . option_titr = titr ,
287 . unit_id = uid,
288 . keyword2 = key ,
289 . keyword3 = key2)
290 nel=0
291 nn = 0
292 igs=igs+1
293 IF(key(1:4) == elkey)THEN
294 IF(flag == 0)THEN
295 CALL groups_get_nentity(nel,lsubmodel)
296 igrelem(igs)%NENTITY=nel
297 CALL my_alloc(igrelem(igs)%ENTITY,nel)
298 igrelem(igs)%ENTITY = 0
299 ELSEIF (flag == 1) THEN
300
301 CALL groups_get_elem_list(list_entity, nentity, lsubmodel)
302 DO kk=1,nentity
303 jj=list_entity(kk)
304 IF(jj /= 0)THEN
305 nn = nn + 1
306 igrelem(igs)%ENTITY(nn) = jj
307 ENDIF
308 enddo! NEXT KK
309 IF(ALLOCATED(list_entity))DEALLOCATE (list_entity)
310
311 IF ( numel == 0 ) igrelem(igs)%NENTITY = 0
312 nel = igrelem(igs)%NENTITY
313 IF (nel > 0) THEN
314 titr = igrelem(igs)%TITLE
315 elem => igrelem(igs)%ENTITY
316 nel=nintlstn(
317 . elem,nel ,ixx_s ,nix ,numel ,
318 . mes,ixx_s_ind,buftmp(1+2*numel),elkey,
319 . igrelem(igs)%ID,titr)
320 igrelem(igs)%NENTITY=nel
321 ENDIF
322 ENDIF
323
324 ENDIF
325 enddo!next I
326 ELSE
327 CALL hm_option_start(trim(startkey))
328 DO i=1,ngrele !NGRBRIC, NGRQUAD, etc ...
329 nel=0
330 igs=igs+1
331 CALL hm_option_read_key(lsubmodel,
332 . option_id = id,
333 . option_titr = titr ,
334 . unit_id = uid,
335 . keyword2 = key ,
336 . keyword3 = key2)
337 IF(key(1:4) == elkey)THEN
338 IF(flag == 0)THEN
339 CALL groups_get_nentity(nlist,lsubmodel)
340 titr=igrelem(igs)%TITLE
341 CALL hm_admlcnt(nix ,ix ,numel ,iparte ,ipart ,
342 . keltree ,eltree ,ksontree,nsontree,klevtree,
343 . nlist ,mes ,buftmp ,buftmp(1+numel),buftmp(1+2*numel),
344 . kk ,nel ,elkey ,igrelem(igs)%ID,titr,lsubmodel)
345 kk=1
346 igrelem(igs)%NENTITY=nel
347 CALL my_alloc(igrelem(igs)%ENTITY,nel)
348 igrelem(igs)%ENTITY = 0
349 ELSEIF (flag == 1) THEN
350 nel = igrelem(igs)%NENTITY
351 IF (nel > 0) THEN
352 CALL groups_get_nentity(nlist,lsubmodel)
353 titr=igrelem(igs)%TITLE
354 elem => igrelem(igs)%ENTITY
355 CALL hm_admlist(nix ,ix ,numel ,iparte ,ipart ,
356 . keltree ,eltree ,ksontree,nsontree,klevtree,
357 . nlist ,mes ,buftmp ,buftmp(1+numel),buftmp(1+2*numel),
358 . kk ,nel ,elem,elkey,igrelem(igs)%ID,titr,lsubmodel)
359 kk=1
360 ENDIF
361 ENDIF
362 ENDIF
363 enddo! next I
364 ENDIF
365 ENDIF
366C-------------------------
367C BOX, GENERATION
368C-------------------------
369 igs=0
370 IF (it3 /= 0) THEN
371 CALL hm_option_start(trim(startkey))
372 DO i=1,ngrele
373
374 CALL hm_option_read_key(lsubmodel,
375 . option_id = id,
376 . option_titr = titr ,
377 . unit_id = uid,
378 . keyword2 = key ,
379 . keyword3 = key2)
380 nn = 0
381 nel=0
382 igs=igs+1
383C-------------------------
384C BOX (OLD)
385C-------------------------
386 IF(key(1:3) == 'BOX'.AND.(key2(1:5) /= 'RECTA'.AND.key2(1:5) /= 'CYLIN'.AND.key2(1:5) /= 'SPHER').AND.nbbox == 0)THEN
387 !no longer supported
388 !ERROR MESSAGE
389C-------------------------
390C GENERATION
391C-------------------------
392 ELSEIF(key(1:4) == 'GENE')THEN
393 iadc = 0
394 buftmp = 0
395 CALL hm_get_intv ('grnodGenArrCnt' ,nentity,is_available,lsubmodel)
396 DO kk=1,nentity
397 CALL hm_get_int_array_index ('Ifirst' ,n1 ,kk,is_available,lsubmodel)
398 CALL hm_get_int_array_index ('Ilast' ,n2 ,kk,is_available,lsubmodel)
399 IF(n2>n1)THEN
400 !tag des elements
401 DO k=1,numel
402 IF (ix(nix,k) >= n1 .AND. ix(nix,k) <= n2) buftmp(k)=1
403 enddo!next K
404 ENDIF
405 enddo! NEXT KK
406
407 IF(nadmesh==0)THEN
408 nel=0
409 IF (flag == 0) THEN
410 DO j=1,numel
411 IF (buftmp(j) == 1) nel=nel+1
412 enddo!next J
413 igrelem(igs)%NENTITY=nel
414 CALL my_alloc(igrelem(igs)%ENTITY,nel)
415 igrelem(igs)%ENTITY = 0
416 ELSEIF (flag == 1) THEN
417 DO j=1,numel
418 IF (buftmp(j) == 1) THEN
419 nn = nn + 1
420 igrelem(igs)%ENTITY(nn)=j
421 ENDIF
422 enddo!next J
423 ENDIF
424 ELSE
425 nel=0
426 IF (flag == 0) THEN
427 DO j=1,numel
428 IF (buftmp(j) == 1) THEN
429 ip=iparte(j)
430 nlev =ipart(10,ip)
431 my_lev=eltree(klevtree,j)
432 IF(my_lev < 0) my_lev=-(my_lev+1)
433 IF(my_lev==nlev)nel=nel+1
434 END IF
435 enddo!next J
436 igrelem(igs)%NENTITY=nel
437 CALL my_alloc(igrelem(igs)%ENTITY,nel)
438 igrelem(igs)%ENTITY = 0
439 ELSEIF (flag == 1) THEN
440 DO j=1,numel
441 IF (buftmp(j) == 1) THEN
442 ip=iparte(j)
443 nlev =ipart(10,ip)
444 my_lev=eltree(klevtree,j)
445 IF(my_lev < 0) my_lev=-(my_lev+1)
446 IF(my_lev==nlev)THEN
447 nn = nn + 1
448 igrelem(igs)%ENTITY(nn)=j
449 ENDIF
450 ENDIF
451 enddo!next J
452 ENDIF
453 ENDIF
454 ENDIF
455 enddo! next I
456 ENDIF
457C-------------------------
458C BOX (parallelepiped, cylindrical, spherical) - old one (10SA1)
459C-------------------------
460
461 igs=0
462 IF (it5 /= 0) THEN
463 !obsolete
464
465 !ERROR MESSAGE
466
467 ENDIF
468C-------------------------
469C NEW BOX OPTION (MULTI BOX COMBINATION)
470C-------------------------
471 igs=0
472 IF(it6 /= 0)THEN
473C---
474C
475 IF (flag == 0) THEN
476 ALLOCATE(bufbox(1))
477 bufbox = 0
478 ELSEIF (flag == 1) THEN
479 ALLOCATE(bufbox(iadboxmax))
480 bufbox(1:iadboxmax) = 0
481 ENDIF
482!
483 CALL hm_option_start(trim(startkey))
484 DO i=1,ngrele
485 CALL hm_option_read_key(lsubmodel,
486 . option_id = id,
487 . option_titr = titr ,
488 . unit_id = uid,
489 . keyword2 = key ,
490 . keyword3 = key2)
491 nn = 0
492 nel=0
493 igs=igs+1
494 IF (key(1:3) == 'BOX'.AND. nbbox > 0)THEN
495 buftmp = 0
496 iadbox = 1
497 iflagunit = 0
498 id = igrelem(igs)%ID
499 DO j=1,unitab%NUNITS
500 IF (unitab%UNIT_ID(j) == uid) THEN
501 fac_l = unitab%FAC_L(j)
502 iflagunit = 1
503 EXIT
504 ENDIF
505 ENDDO
506 IF (uid/=0.AND.iflagunit==0) THEN
507 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
508 . i2=uid,i1=id,c1='element group',
509 . C2='element group',
510 . C3=TITR)
511 ENDIF
512C---
513 CALL HM_GET_INT_ARRAY_INDEX ('ids' ,IDB ,1,IS_AVAILABLE,LSUBMODEL)
514 CALL HM_BIGBOX2(X ,FLAG ,NEL ,
515 . SKEW ,IGS ,ISKN ,ITABM1,IBOX ,
516 . ID ,NADMESH,NIX ,IX ,NIX1 ,NUMEL ,
517 . IPARTE ,IPART ,KLEVTREE,ELTREE,KELTREE,BUFTMP,
518 . KEY ,TITR ,MES ,IGRELEM,NGRELE ,NN ,
519 . IADBOX ,IADBOXMAX,BUFBOX,IDB)
520C---
521 IADBOXMAX = MAX(IADBOX,IADBOXMAX)
522 IF(FLAG == 0)THEN
523 IGRELEM(IGS)%NENTITY=NEL
524 CALL MY_ALLOC(IGRELEM(IGS)%ENTITY,NEL)
525 IGRELEM(IGS)%ENTITY = 0
526 ELSE IF(FLAG == 1)THEN
527 IGRELEM(IGS)%NENTITY=NEL
528 ENDIF ! IF(FLAG == 0)
529 ENDIF
530
531
532 ENDDO
533 IF(ALLOCATED(BUFBOX))DEALLOCATE(BUFBOX)
534 ENDIF ! IF(IT6 /= 0)
535C-------------------------
536C groupes de SUBSETS,PART,MAT,PROP
537C-------------------------
538
539 IGS=0
540 IF (IT2 > 0) THEN
541 CALL HM_OPTION_START(TRIM(STARTKEY))
542 DO I=1,NGRELE
543 CALL HM_OPTION_READ_KEY(LSUBMODEL,
544 . OPTION_ID = ID,
545 . OPTION_TITR = TITR ,
546 . UNIT_ID = UID ,
547 . KEYWORD2 = KEY ,
548 . KEYWORD3 = KEY2)
549 NN = 0
550 NEL=0
551 IGS=IGS+1
552 IF (KEY(1:6)=='subset.OR.' KEY(1:4)=='part.OR.' KEY(1:3)=='mat.OR.' KEY(1:4)=='prop') THEN
553C---
554 BUFTMP = 0
555 CALL HM_TAGPART(BUFTMP, IPART, KEY, IGRELEM(IGS)%ID, TITR, TITR1, FLAG, SUBSET, LSUBMODEL)
556C---
557 IF(NADMESH==0)THEN
558 IF (FLAG == 0) THEN
559 DO J=1,NUMEL
560 IF (BUFTMP(IPARTE(J)) == 1) NEL=NEL+1
561 ENDDO
562 IGRELEM(IGS)%NENTITY=NEL
563 CALL MY_ALLOC(IGRELEM(IGS)%ENTITY,NEL)
564 IGRELEM(IGS)%ENTITY = 0
565 ELSEIF (FLAG == 1) THEN
566 DO J=1,NUMEL
567 IF (BUFTMP(IPARTE(J)) == 1) THEN
568 NN = NN + 1
569 IGRELEM(IGS)%ENTITY(NN)=J
570 ENDIF
571 ENDDO
572 ENDIF
573 ELSE
574 IF (FLAG == 0) THEN
575 DO J=1,NUMEL
576 IP=IPARTE(J)
577 IF(BUFTMP(IP) == 1) THEN
578 NLEV =IPART(10,IP)
579 MY_LEV=ELTREE(KLEVTREE,J)
580 IF(MY_LEV < 0) MY_LEV=-(MY_LEV+1)
581 IF(MY_LEV==NLEV)NEL=NEL+1
582 END IF
583 ENDDO
584 IGRELEM(IGS)%NENTITY=NEL
585 CALL MY_ALLOC(IGRELEM(IGS)%ENTITY,NEL)
586 IGRELEM(IGS)%ENTITY = 0
587 ELSEIF (FLAG == 1) THEN
588 DO J=1,NUMEL
589 IP=IPARTE(J)
590 IF (BUFTMP(IP) == 1) THEN
591 NLEV =IPART(10,IP)
592 MY_LEV=ELTREE(KLEVTREE,J)
593 IF(MY_LEV < 0) MY_LEV=-(MY_LEV+1)
594 IF(MY_LEV==NLEV)THEN
595 NN = NN + 1
596 IGRELEM(IGS)%ENTITY(NN)=J
597 ENDIF
598 ENDIF
599 ENDDO
600 ENDIF
601 ENDIF
602 ENDIF
603
604 ENDDO
605 ENDIF
606C-------------------------
607C groupes de SUBMODELS
608C-------------------------
609
610 IGS=0
611 IF (IT4 > 0) THEN
612 CALL HM_OPTION_START(TRIM(STARTKEY))
613 DO I=1,NGRELE
614 CALL HM_OPTION_READ_KEY(LSUBMODEL,
615 . OPTION_ID = ID,
616 . OPTION_TITR = TITR ,
617 . UNIT_ID = UID ,
618 . KEYWORD2 = KEY ,
619 . KEYWORD3 = KEY2)
620 NN = 0
621 NEL=0
622 IGS=IGS+1
623 IF (KEY(1:6) == 'submod') THEN
624 CALL HM_SUBMODGRE(
625 . ISUBMOD ,IX ,NIX ,ID ,
626 . NEL ,NUMEL ,IELT ,MES ,
627 . FLAG ,TITR ,TITR1 ,LSUBMODEL,IGRELEM ,
628 . NN ,IGS )
629 IF (FLAG == 0) THEN
630 IGRELEM(IGS)%NENTITY=NEL
631 CALL MY_ALLOC(IGRELEM(IGS)%ENTITY,NEL)
632 IGRELEM(IGS)%ENTITY = 0
633 ENDIF
634 ENDIF
635
636 ENDDO
637 ENDIF
638C-------------------------
639C GENERATION MIN MAX OFFSET
640C-------------------------
641 IGS=0
642 IF (IT7 /= 0) THEN
643 CALL HM_OPTION_START(TRIM(STARTKEY))
644 DO I=1,NGRELE
645 CALL HM_OPTION_READ_KEY(LSUBMODEL,
646 . OPTION_ID = ID,
647 . OPTION_TITR = TITR ,
648 . UNIT_ID = UID ,
649 . KEYWORD2 = KEY ,
650 . KEYWORD3 = KEY2)
651 NN = 0
652 NEL=0
653 IGS=IGS+1
654 IF(KEY(1:8) == 'gen_incr')THEN
655 IADC = 0
656 BUFTMP = 0
657 CALL HM_GET_INTV ('grnodgenarrcnt' ,NLINES,IS_AVAILABLE,LSUBMODEL)
658 DO KK=1,NLINES
659 CALL HM_GET_INT_ARRAY_INDEX ('ifirst' ,IDMIN ,KK,IS_AVAILABLE,LSUBMODEL)
660 CALL HM_GET_INT_ARRAY_INDEX ('ilast' ,IDMAX ,KK,IS_AVAILABLE,LSUBMODEL)
661 CALL HM_GET_INT_ARRAY_INDEX ('iincr' ,OFFSET ,KK,IS_AVAILABLE,LSUBMODEL)
662 !optimized loop
663 DO K=1,NUMEL
664 ID=IX(NIX,K)
665.OR. IF(ID<IDMIN ID>IDMAX)CYCLE
666 IF(MOD(ID-IDMIN,OFFSET)==0)BUFTMP(K)=1
667 ENDDO
668 ENDDO
669
670 IF(NADMESH==0)THEN
671 NEL=0
672 IF (FLAG == 0) THEN
673 DO J=1,NUMEL
674 IF (BUFTMP(J) == 1) NEL=NEL+1
675 ENDDO
676 IGRELEM(IGS)%NENTITY=NEL
677 CALL MY_ALLOC(IGRELEM(IGS)%ENTITY,NEL)
678 IGRELEM(IGS)%ENTITY = 0
679 ELSEIF (FLAG == 1) THEN
680 DO J=1,NUMEL
681 IF (BUFTMP(J) == 1) THEN
682 NN = NN + 1
683 IGRELEM(IGS)%ENTITY(NN)=J
684 ENDIF
685 ENDDO
686 ENDIF
687 ELSE
688 NEL=0
689 IF (FLAG == 0) THEN
690 DO J=1,NUMEL
691 IF (BUFTMP(J) == 1) THEN
692 IP=IPARTE(J)
693 NLEV =IPART(10,IP)
694 MY_LEV=ELTREE(KLEVTREE,J)
695 IF(MY_LEV < 0) MY_LEV=-(MY_LEV+1)
696 IF(MY_LEV==NLEV)NEL=NEL+1
697 END IF
698 ENDDO
699 IGRELEM(IGS)%NENTITY=NEL
700 CALL MY_ALLOC(IGRELEM(IGS)%ENTITY,NEL)
701 IGRELEM(IGS)%ENTITY = 0
702 ELSEIF (FLAG == 1) THEN
703 DO J=1,NUMEL
704 IF (BUFTMP(J) == 1) THEN
705 IP=IPARTE(J)
706 NLEV =IPART(10,IP)
707 MY_LEV=ELTREE(KLEVTREE,J)
708 IF(MY_LEV < 0) MY_LEV=-(MY_LEV+1)
709 IF(MY_LEV==NLEV)THEN
710 NN = NN + 1
711 IGRELEM(IGS)%ENTITY(NN)=J
712 ENDIF
713 ENDIF
714 ENDDO
715 ENDIF
716 ENDIF
717 ENDIF
718
719 ENDDO!next I
720 ENDIF
721C------------------------------
722 IF (ALLOCATED(BUFTMP)) DEALLOCATE(BUFTMP)
723C------------------------------
724 RETURN
#define my_real
Definition cppsort.cpp:32
subroutine groups_get_elem_list(list_entity, nentity, lsubmodel)
subroutine groups_get_nentity(nentity, lsubmodel)
subroutine hm_admlist(nix, ix, numel, ipartel, ipart, keltree, eltree, ksontree, nsontree, klevtree, nlist, mess, ix1, ix2, index, kk, nel, nelt, elkey, id, titr, lsubmodel)
Definition hm_admlist.F:41
subroutine hm_admlcnt(nix, ix, numel, ipartel, ipart, keltree, eltree, ksontree, nsontree, klevtree, nlist, mess, ix1, ix2, index, ll, nel, elkey, id, titr, lsubmodel)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_start(entity_type)
subroutine ymax(idn, fac, npc, pld, stiffmin, stiffmax, stiffini, stiffavg)
Definition law100_upd.F:272
#define max(a, b)
Definition macros.h:21
initmumps id
integer, parameter nchartitle
integer, parameter ncharkey
integer function nintlstn(list, nlist, ixx_s, nix, numel, mess, ixx_s_ind, index, type, id, titr)
Definition nintrr.F:801
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)
Definition message.F:889
subroutine udouble_igr(list, nlist, mess, ir, rlist)
Definition sysfus.F:1220