OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_drape.F File Reference
#include "implicit_f.inc"
#include "drape_c.inc"
#include "units_c.inc"
#include "com04_c.inc"
#include "param_c.inc"
#include "scr03_c.inc"

Go to the source code of this file.

Functions/Subroutines

subroutine hm_read_prelecdrape (idrapeid, lsubmodel)
subroutine hm_read_drape (drape_wrk, iwork_t, iworksh, igrsh3n, igrsh4n, ixc, ixtg, igeo, igeo_stack, lsubmodel, unitab, indxsh)

Function/Subroutine Documentation

◆ hm_read_drape()

subroutine hm_read_drape ( type (drape_), dimension(numelc + numeltg), target drape_wrk,
type(drape_work_), dimension(numelc+numeltg), target iwork_t,
integer, dimension(3,*) iworksh,
type (group_), dimension(ngrsh3n) igrsh3n,
type (group_), dimension(ngrshel) igrsh4n,
integer, dimension(nixc,*) ixc,
integer, dimension(nixtg,*) ixtg,
integer, dimension(npropgi,*) igeo,
integer, dimension(npropgi,*) igeo_stack,
type(submodel_data), dimension(*) lsubmodel,
type (unit_type_), intent(in) unitab,
integer, dimension(numelc+numeltg) indxsh )

Definition at line 107 of file hm_read_drape.F.

110C-----------------------------------------------
111C M o d u l e s
112C-----------------------------------------------
113 USE message_mod
114 USE stack_mod
115 USE groupdef_mod
116 USE drape_mod
117 USE submodel_mod
119 USE unitab_mod
121C-----------------------------------------------
122C I m p l i c i t T y p e s
123C-----------------------------------------------
124#include "implicit_f.inc"
125C-----------------------------------------------
126C C o m m o n B l o c k s
127C-----------------------------------------------
128#include "units_c.inc"
129#include "drape_c.inc"
130C-----------------------------------------------
131#include "com04_c.inc"
132#include "param_c.inc"
133#include "scr03_c.inc"
134C-----------------------------------------------
135C D u m m y A r g u m e n t s
136C-----------------------------------------------
137 INTEGER :: IWORKSH(3,*),IXC(NIXC,*),
138 . IXTG(NIXTG,*),IGEO(NPROPGI,*),
139 . IGEO_STACK(NPROPGI,*),INDXSH(NUMELC+NUMELTG)
140C-----------------------------------------------
141 TYPE (GROUP_) , DIMENSION(NGRSH3N) :: IGRSH3N
142 TYPE (GROUP_) , DIMENSION(NGRSHEL) :: IGRSH4N
143 TYPE (DRAPE_) , DIMENSION(NUMELC + NUMELTG) ,TARGET :: DRAPE_WRK
144 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
145 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
146 TYPE(DRAPE_WORK_) , DIMENSION(NUMELC+NUMELTG), TARGET :: IWORK_T
147C-----------------------------------------------
148C L o c a l V a r i a b l e s
149C-----------------------------------------------
150 INTEGER ::I, II,J,JJ,IX,ID,SHELL_ID,SH3N_ID,GRSHEL_ID,GRSH3N_ID,OFFC,
151 . IT1,IT2,IT3,IT4,NEL,IAD,ITY,IDSHEL,IDSH3N,PID,
152 . JPID,IGTYP,IE,IP,IDRP,JDRP,ISH,IGR,JGR,IS,LISTMAX,SLICELISTMAX,
153 . NIS,NO_ISH,NO_ISHEUSED_DRAPE,NUMS,NPT,IPPID,ISL,NPT_DRP,NSLICE,
154 . SLICELIST,NPT_SLICE,MAT_ID,NO_USED_DRAPE
155 INTEGER , DIMENSION(NDRAPE) :: DRP_SHEL, DRP_SH3N,DRAPE_ID
156 my_real
157 . thinning,theta_drape,bid
158 CHARACTER(LEN=NCHARTITLE) :: TITR,DRAPE_ENTITY
159 CHARACTER MESS*40,MESS1*40,MESS2*40, MESS3*40,MESS4*40,MESS5*40
160 DATA mess/'DRAPE DEFINITION '/
161 DATA mess1/'SHELL '/
162 DATA mess2/'GRSHEL '/
163 DATA mess3/'SH3N '/
164 DATA mess4/'GRSH3N '/
165 DATA mess5/'/DRAPE '/
166 INTEGER, DIMENSION (:) ,ALLOCATABLE :: TAGSH,INDX_TMP
167 INTEGER, DIMENSION (:,:),ALLOCATABLE :: ISH3N_DRP,IGRSH4N_DRP,ISH4N_DRP,IGRSH3N_DRP,
168 . ITMP_SH4N,ITMP_GRSH4N,ITMP_SH3N,ITMP_GRSH3N
169 INTEGER, DIMENSION(:,:,:),ALLOCATABLE :: ISH4N,ISH3N,ISH4N_GR,ISH3N_GR
170 my_real, DIMENSION(:,:,:),ALLOCATABLE :: rsh4n,rsh3n,rsh4n_gr,rsh3n_gr
171 LOGICAL :: IS_AVAILABLE
172C======================================================================|
173 is_available = .false.
174 drape_id = 0
175 drp_shel = 0
176 drp_sh3n = 0
177 numelc_drape = 0
178 numeltg_drape = 0
179C
180 ALLOCATE(tagsh(numelc+numeltg), indx_tmp(numelc + numeltg))
181 indx_tmp = 0
182C
183 !====================================================================================
184 ! Start reading /DRAPE
185 !====================================================================================
186 CALL hm_option_start('/DRAPE')
187 ! Loop over DRAPE
188 DO i=1,ndrape
189 it1 = 0
190 it2 = 0
191 it3 = 0
192 it4 = 0
193 tagsh(1:numelc+numeltg) = 0
194 !---------------------------------
195 ! Read TITLE and ID
196 !---------------------------------
197 titr = ''
198 CALL hm_option_read_key(lsubmodel,
199 . option_id = id,
200 . option_titr = titr)
201 drape_id(i) = id
202 IF (ipri == 5) THEN
203 WRITE (iout,1001)
204 ELSE
205 WRITE (iout,1002)
206 ENDIF
207 ! Count number of entities
208 CALL hm_get_intv('drapelistmax',listmax,is_available,lsubmodel)
209 slicelistmax = 0
210 DO ii = 1,listmax
211 ! N of slice entities
212 CALL hm_get_int_array_index('slicelistmax',slicelist,ii,is_available,lsubmodel)
213 slicelistmax= max(slicelistmax,slicelist)
214 ENDDO
215 !!
216 ALLOCATE(ish4n(listmax,slicelistmax,2) ,ish4n_gr(listmax,slicelistmax,2),
217 . ish3n(listmax,slicelistmax,2) ,ish3n_gr(listmax,slicelistmax,2),
218 . ish4n_drp(listmax,3),igrsh4n_drp(listmax,3),ish3n_drp(listmax,3),igrsh3n_drp(listmax,3),
219 . itmp_sh4n(2,listmax),itmp_sh3n(2,listmax),itmp_grsh4n(2,listmax),itmp_grsh3n(2,listmax))
220 ish4n = 0
221 ish3n = 0
222 ish4n_gr = 0
223 ish3n_gr = 0
224 ish4n_drp = 0
225 ish3n_drp = 0
226 igrsh4n_drp = 0
227 igrsh3n_drp = 0
228 itmp_sh4n =0
229 itmp_sh3n =0
230 itmp_grsh4n = 0
231 itmp_grsh3n = 0
232 ALLOCATE(rsh4n(listmax,slicelistmax,2),rsh3n(listmax,slicelistmax,2),rsh4n_gr(listmax,slicelistmax,2),
233 . rsh3n_gr(listmax, slicelistmax,2))
234 rsh4n = zero
235 rsh3n = zero
236 rsh4n_gr = zero
237 rsh3n_gr = zero
238
239 !--------------------------------------------------------------------------
240 ! Loop over entities
241 !--------------------------------------------------------------------------
242 DO ii = 1,listmax
243 ! N of slice entities
244 CALL hm_get_int_array_index('slicelistmax',slicelist,ii,is_available,lsubmodel)
245
246 !! tag of DRAPE elements
247 ! Reading the Drape entity type
248 CALL hm_get_string_index('entity_type',drape_entity,ii,10,is_available)
249 drape_entity(len_trim(drape_entity)+1:10)=' '
250 !------------------------------------------------------------------------
251 ! 1 - If entity is a SHELL
252 !------------------------------------------------------------------------
253 IF (drape_entity(1:5) == 'SHELL') THEN
254 ! Id of the SHELL
255 CALL hm_get_int_array_index('elem_sh_n4',shell_id,ii,is_available,lsubmodel)
256 it1 = it1 + 1
257 ish4n_drp(it1,1) = shell_id
258 ish4n_drp(it1,2) = id
259 ish4n_drp(it1,3) = slicelist
260 itmp_sh4n(1,it1) = shell_id
261 itmp_sh4n(2,it1) = id
262 DO jj = 1, slicelist
263 ! drape slice Thinning
264 CALL hm_get_float_array_2indexes('thinning',thinning,ii,jj,is_available,lsubmodel,unitab)
265 ! drape slice Angle
266 CALL hm_get_float_array_2indexes('theta_slice',theta_drape,ii,jj,is_available,lsubmodel,unitab)
267 ! Id of the Mat
268 CALL hm_get_int_array_2indexes('mat_ID',mat_id,ii,jj,is_available,lsubmodel)
269 ! npt of slice
270 CALL hm_get_int_array_2indexes('npt_slice',npt_slice,ii,jj,is_available,lsubmodel)
271 ! Checking shell ID
272 IF (shell_id == 0) THEN
273 CALL ancmsg(msgid=1163,
274 . msgtype=msgerror,
275 . anmode=aninfo,
276 . c1=mess5,
277 . i1=id,
278 . c2=mess1,
279 . i2=shell_id)
280 ENDIF
281 IF (ipri == 5)
282 . WRITE(iout,'(10X,I10,14X,A6,7X,I10,7X,I10,2(15X,1PG20.13))')
283 . id,drape_entity(1:5),shell_id,jj,thinning,theta_drape
284 ! Converting angle from deg to rad
285 theta_drape=theta_drape*pi/hundred80
286 ! Default thinning value
287 IF (thinning == zero) thinning = one
288 ! tag shell element
289 ish4n(it1,jj,1) = mat_id
290 ish4n(it1,jj,2) = npt_slice
291 rsh4n(it1,jj,1) = thinning
292 rsh4n(it1,jj,2) = theta_drape
293 ENDDO ! SLICELIST
294 !----------------- -------------------------------------------------------
295 ! 2 - If entity is a SH3N
296 !------------------------------------------------------------------------
297 ELSEIF (drape_entity(1:4) == 'SH3N') THEN
298 ! Id of the SH3N
299 CALL hm_get_int_array_index('elem_sh_n3',sh3n_id,ii,is_available,lsubmodel)
300 !!
301 it2 = it2 + 1
302 ish3n_drp(it2,1) = sh3n_id
303 ish3n_drp(it2,2) = id
304 ish3n_drp(it2,3) = slicelist
305 itmp_sh3n(1,it2) = sh3n_id
306 itmp_sh3n(2,it2) = id
307 DO jj = 1, slicelist
308 ! drape slice Thinning
309 CALL hm_get_float_array_2indexes('thinning',thinning,ii,jj,is_available,lsubmodel,unitab)
310 ! drape slice Angle
311 CALL hm_get_float_array_2indexes('theta_slice',theta_drape,ii,jj,is_available,lsubmodel,unitab)
312 ! Id of the Mat
313 CALL hm_get_int_array_2indexes('mat_ID',mat_id,ii,jj,is_available,lsubmodel)
314 ! npt of slice
315 CALL hm_get_int_array_2indexes('npt_slice',npt_slice,ii,jj,is_available,lsubmodel)
316 ! Checking sh3n ID
317 IF (sh3n_id == 0) THEN
318 CALL ancmsg(msgid=1163,
319 . msgtype=msgerror,
320 . anmode=aninfo,
321 . c1=mess5,
322 . i1=id,
323 . c2=mess3,
324 . i2=sh3n_id)
325 ENDIF
326 IF (ipri == 5)
327 . WRITE(iout,'(10X,I10,14X,A6,7X,I10,7X,I10,2(15X,1PG20.13))')
328 . id,drape_entity(1:4),sh3n_id,jj,thinning,theta_drape
329 ! Converting angle from deg to rad
330 theta_drape=theta_drape*pi/hundred80
331 ! Default thinning value
332 IF (thinning == zero) thinning = one
333 ! Tag sh3n element
334 ish3n(it2,jj,1) = mat_id
335 ish3n(it2,jj,2) = npt_slice
336 rsh3n(it2,jj,1) = thinning
337 rsh3n(it2,jj,2) = theta_drape
338 ENDDO ! SLICELIST
339 !------------------------------------------------------------------------
340 ! 3 - If entity is a Groupe of SHELL
341 !------------------------------------------------------------------------
342 ELSEIF (drape_entity(1:6) == 'GRSHEL') THEN
343 ! Id of the GRSHEL
344 CALL hm_get_int_array_index('grshel_id',grshel_id,ii,is_available,lsubmodel)
345 ! drape slice Thinning
346 !!
347 it3 = it3 + 1
348 igrsh4n_drp(it3,1) = grshel_id
349 igrsh4n_drp(it3,2) = id
350 igrsh4n_drp(it3,3) = slicelist
351 itmp_grsh4n(1,it3) = grshel_id
352 itmp_grsh4n(2,it3) = id
353 DO jj = 1, slicelist
354 CALL hm_get_float_array_2indexes('thinning',thinning,ii,jj,is_available,lsubmodel,unitab)
355 ! drape slice Angle
356 CALL hm_get_float_array_2indexes('theta_slice',theta_drape,ii,jj,is_available,lsubmodel,unitab)
357 ! Id of the Mat
358 CALL hm_get_int_array_2indexes('mat_ID',mat_id,ii,jj,is_available,lsubmodel)
359 ! npt of slice
360 CALL hm_get_int_array_2indexes('npt_slice',npt_slice,ii,jj,is_available,lsubmodel)
361 ! Checking grshell ID
362 IF (grshel_id == 0) THEN
363 CALL ancmsg(msgid=1163,
364 . msgtype=msgerror,
365 . anmode=aninfo,
366 . c1=mess5,
367 . i1=id,
368 . c2=mess2,
369 . i2=grshel_id)
370 ENDIF
371 IF (ipri == 5)
372 . WRITE(iout,'(10X,I10,14X,A6,7X,I10,7X,I10,2(15X,1PG20.13))')
373 . id,drape_entity(1:6),grshel_id,jj,thinning,theta_drape
374 ! Converting angle from deg to rad
375 theta_drape=theta_drape*pi/hundred80
376 ! Default thinning value
377 IF (thinning == zero) thinning = one
378 ! Tag grshell
379 ish4n_gr(it3,jj,1) = mat_id
380 ish4n_gr(it3,jj,2) = npt_slice
381 rsh4n_gr(it3,jj,1) = thinning
382 rsh4n_gr(it3,jj,2) = theta_drape
383 ENDDO
384 !------------------------------------------------------------------------
385 ! 4 - If entity is a Groupe of SH3N
386 !------------------------------------------------------------------------
387 ELSEIF (drape_entity(1:6) == 'GRSH3N') THEN
388 ! Id of the GRSH3N
389 CALL hm_get_int_array_index('grtria_id',grsh3n_id,ii,is_available,lsubmodel)
390 !!
391 it4 = it4 + 1
392 igrsh3n_drp(it4,1) = grsh3n_id
393 igrsh3n_drp(it4,2) = id
394 igrsh3n_drp(it4,3) = slicelist
395 itmp_grsh4n(1,it4) = grsh3n_id
396 itmp_grsh4n(2,it4) = id
397 DO jj = 1, slicelist
398 ! drape slice Thinning
399 CALL hm_get_float_array_2indexes('thinning',THINNING,II,JJ,IS_AVAILABLE,LSUBMODEL,UNITAB)
400 ! drape slice Angle
401 CALL HM_GET_FLOAT_ARRAY_2INDEXES('theta_slice',THETA_DRAPE,II,JJ,IS_AVAILABLE,LSUBMODEL,UNITAB)
402 ! Id of the Mat
403 CALL HM_GET_INT_ARRAY_2INDEXES('mat_id',MAT_ID,II,JJ,IS_AVAILABLE,LSUBMODEL)
404 ! npt of slice
405 CALL HM_GET_INT_ARRAY_2INDEXES('npt_slice',NPT_SLICE,II,JJ,IS_AVAILABLE,LSUBMODEL)
406 ! Checking grsh3n ID
407 IF (GRSH3N_ID == 0) THEN
408 CALL ANCMSG(MSGID=1163,
409 . MSGTYPE=MSGERROR,
410 . ANMODE=ANINFO,
411 . C1=MESS5,
412 . I1=ID,
413 . C2=MESS4,
414 . I2=GRSH3N_ID)
415 ENDIF
416 IF (IPRI == 5)
417 . WRITE(IOUT,'(10x,i10,14x,a6,7x,i10,7x,i10,2(15x,1pg20.13))')
418 . ID,DRAPE_ENTITY(1:6),GRSH3N_ID,JJ,THINNING,THETA_DRAPE
419 ! Converting angle from deg to rad
420 THETA_DRAPE = THETA_DRAPE*PI/HUNDRED80
421 ! Default thinning value
422 IF (THINNING == ZERO) THINNING = ONE
423 ! Tag grsh3n
424
425 ISH3N_GR(IT4,JJ,1) = MAT_ID
426 ISH3N_GR(IT4,JJ,2) = NPT_SLICE
427 RSH3N_GR(IT4,JJ,1) = THINNING
428 RSH3N_GR(IT4,JJ,2) = THETA_DRAPE
429 ENDDO ! SLICELIST
430 ENDIF
431 ENDDO ! LISTMAX
432 !------------------------------------------------------------
433 ! CHECK FOR UNUSED DRAPE
434 !------------------------------------------------------------
435 NO_USED_DRAPE = 0
436 IPPID = 2
437 DO IE=1,NUMELC
438 IX = IXC(NIXC,IE)
439 PID = IXC(6,IE)
440 IGTYP = IGEO(11,PID)
441 NPT = IWORKSH(1,IE)
442.OR. IF (IGTYP == 17 IGTYP == 51) THEN
443 DO IP=1,NPT
444 JPID = IWORK_T(IE)%PLYID(IP)! ply pid number
445c IGEO(1, JPID) ! ply pid ID
446 IF (JPID > 0) THEN
447 JDRP = IGEO(48,JPID)
448 IF (ID == JDRP)THEN
449 NO_USED_DRAPE = NO_USED_DRAPE + 1
450 ENDIF
451 ENDIF
452 ENDDO
453 ELSEIF (IGTYP == 52) THEN
454 DO IP=1,NPT
455 JPID = IWORK_T(IE)%PLYID(IP) ! ply pid number
456c IGEO(1, JPID) ! ply pid ID
457 IF (JPID > 0) THEN
458 JDRP = IGEO_STACK(48,JPID)
459 IF (ID == JDRP)THEN
460 NO_USED_DRAPE = NO_USED_DRAPE + 1
461 ENDIF
462 ENDIF
463 ENDDO ! DO IP=1,N1
464.OR. ENDIF ! IF (IGTYP == 17 IGTYP == 51)
465 ENDDO ! DO IE=1,NUMELC
466C
467 DO IE=1,NUMELTG
468 IX = IXTG(NIXTG,IE)
469 PID = IXTG(5,IE)
470 IGTYP = IGEO(11,PID)
471 NPT = IWORKSH(1,NUMELC + IE)
472.OR. IF (IGTYP == 17 IGTYP == 51) THEN
473 DO IP=1,NPT
474 JPID = IWORK_T(NUMELC + IE)%PLYID(IP) ! ply pid number
475c IGEO(1, JPID) ! ply pid ID
476 IF (JPID > 0) THEN
477 JDRP = IGEO(48,JPID)
478 IF (ID == JDRP)THEN
479 NO_USED_DRAPE = NO_USED_DRAPE + 1
480 ENDIF
481 ENDIF
482 ENDDO
483 ELSEIF (IGTYP == 52) THEN
484 DO IP=1,NPT
485 JPID = IWORK_T(NUMELC + IE)%PLYID(IP) ! ply pid number
486c IGEO(1, JPID) ! ply pid ID
487 IF (JPID > 0) THEN
488 JDRP = IGEO_STACK(48,JPID)
489 IF (ID == JDRP)THEN
490 NO_USED_DRAPE = NO_USED_DRAPE + 1
491 ENDIF
492 ENDIF
493 ENDDO ! DO IP=1,N1
494.OR. ENDIF ! IF (IGTYP == 17 IGTYP == 51)
495 ENDDO ! DO IE=1,NUMELTG
496 ! Drape ID non-associated to any ply
497 IF (NO_USED_DRAPE == 0) THEN
498 CALL ANCMSG(MSGID=1169,
499 . MSGTYPE=MSGWARNING,
500 . ANMODE=ANINFO,
501 . C1=MESS5,
502 . I1=ID)
503 ENDIF
504 !-------------------------------------------------------------------------
505 ! Looking for ID doubles (shell, sh3n, grshel, grsh3n) in the same /DRAPE
506 !-------------------------------------------------------------------------
507 ! Double shell -
508 CALL UDOUBLE3(ITMP_SH4N,2,IT1,MESS5,MESS1,0,BID)
509 ! Double grshel -
510 CALL UDOUBLE3(ITMP_GRSH4N,2,IT3,MESS5,MESS2,0,BID)
511 ! To be checked for sh3n, grsh3n
512 ! - double she3n -
513 CALL UDOUBLE3(ITMP_SH3N,2,IT2,MESS5,MESS3,0,BID)
514 ! - double grshel -
515 CALL UDOUBLE3(ITMP_GRSH3N,2,IT4,MESS5,MESS4,0,BID)
516 !-------------------------------------------------------------------------
517 ! Filling DRAPE data structure
518 !-------------------------------------------------------------------------
519
520 IF (IT1 > 0) THEN
521 DO J=1,IT1
522 ISH = ISH4N_DRP(J,1)
523 IDRP = ISH4N_DRP(J,2)
524 NSLICE = ISH4N_DRP(J,3)
525 NO_ISH = 0
526 DO IE=1,NUMELC
527 IX = IXC(NIXC,IE)
528 PID = IXC(6,IE)
529 IGTYP = IGEO(11,PID)
530 NPT = IWORKSH(1,IE)
531 NPT_DRP = 0
532 IF (ISH == IX) THEN
533 NO_ISH = NO_ISH + 1
534c tag of sh4n to check doubles within the DRAPE
535 IF (TAGSH(IE) == 0) THEN
536 TAGSH(IE) = ISH
537 NIS = 0
538.NOT. IF (ALLOCATED(DRAPE_WRK(IE)%DRAPE_PLY)) THEN
539 ALLOCATE(DRAPE_WRK(IE)%DRAPE_PLY(NPT))
540 NUMELC_DRAPE = NUMELC_DRAPE + 1
541 INDX_TMP(IE) = NUMELC_DRAPE
542 DRAPE_WRK(IE)%NPLY_DRAPE = 0
543 ENDIF
544 NO_ISH = NO_ISH + 1
545C count DRAPE entities for printing out
546 DRP_SHEL(I) = DRP_SHEL(I) + 1
547C
548.OR. IF (IGTYP == 17 IGTYP == 51) THEN
549 IPPID = 2
550.NOT. IF (ALLOCATED(DRAPE_WRK(IE)%INDX_PLY)) THEN
551 ALLOCATE(DRAPE_WRK(IE)%INDX_PLY(NPT) )
552 DRAPE_WRK(IE)%INDX_PLY = 0
553 ENDIF
554 NPT_DRP = DRAPE_WRK(IE)%NPLY_DRAPE
555 DO IP=1,NPT
556 JPID = IWORK_T(IE)%PLYID(IP) ! ply pid number
557c IGEO(1, JPID) ! ply pid ID
558 IF (JPID > 0) THEN
559 JDRP = IGEO(48,JPID)
560 IF (IDRP == JDRP)THEN
561 ALLOCATE(DRAPE_WRK(IE)%DRAPE_PLY(IP)%RDRAPE(NSLICE,2))
562 ALLOCATE(DRAPE_WRK(IE)%DRAPE_PLY(IP)%IDRAPE(NSLICE,2))
563 DRAPE_WRK(IE)%DRAPE_PLY(IP)%RDRAPE = ZERO
564 DRAPE_WRK(IE)%DRAPE_PLY(IP)%IDRAPE = 0
565 DRAPE_WRK(IE)%DRAPE_PLY(IP)%NSLICE = NSLICE
566 NPT_DRP = NPT_DRP + 1
567 DRAPE_WRK(IE)%NPLY_DRAPE = NPT_DRP
568 DRAPE_WRK(IE)%INDX_PLY(NPT_DRP) = IP
569 DRAPE_WRK(IE)%DRAPE_PLY(IP)%IPID = IDRP
570 DO ISL = 1,NSLICE
571 DRAPE_WRK(IE)%DRAPE_PLY(IP)%RDRAPE(ISL,1) = RSH4N(J,ISL,1)
572 DRAPE_WRK(IE)%DRAPE_PLY(IP)%RDRAPE(ISL,2) = RSH4N(J,ISL,2)
573 DRAPE_WRK(IE)%DRAPE_PLY(IP)%IDRAPE(ISL,1) = ISH4N(J,ISL,1) !! Mat_id
574 DRAPE_WRK(IE)%DRAPE_PLY(IP)%IDRAPE(ISL,2) = ISH4N(J,ISL,2) !! NPT_SLICE
575 ENDDO ! nbre of slice
576check if SH4N of the DRAPE is inside any plys
577 NIS = NIS + 1
578 ENDIF
579 ENDIF
580 ENDDO ! DO IP=1,NPT
581 ELSEIF (IGTYP == 52) THEN
582 IPPID = 2
583.NOT. IF (ALLOCATED(DRAPE_WRK(IE)%INDX_PLY)) THEN
584 ALLOCATE(DRAPE_WRK(IE)%INDX_PLY(NPT) )
585 DRAPE_WRK(IE)%INDX_PLY = 0
586 ENDIF
587 NPT_DRP = DRAPE_WRK(IE)%NPLY_DRAPE
588 DO IP=1,NPT
589 JPID = IWORK_T(IE)%PLYID(IP) ! ply pid number
590c IGEO(1, JPID) ! ply pid ID
591 IF (JPID > 0) THEN
592 JDRP = IGEO_STACK(48,JPID)
593 IF (IDRP==JDRP)THEN
594 ALLOCATE(DRAPE_WRK(IE)%DRAPE_PLY(IP)%RDRAPE(NSLICE,2) )
595 ALLOCATE(DRAPE_WRK(IE)%DRAPE_PLY(IP)%IDRAPE(NSLICE,2) )
596 DRAPE_WRK(IE)%DRAPE_PLY(IP)%RDRAPE = ZERO
597 DRAPE_WRK(IE)%DRAPE_PLY(IP)%IDRAPE = 0
598 DRAPE_WRK(IE)%DRAPE_PLY(IP)%NSLICE = NSLICE
599 NPT_DRP = NPT_DRP + 1
600 DRAPE_WRK(IE)%NPLY_DRAPE = NPT_DRP
601 DRAPE_WRK(IE)%INDX_PLY(NPT_DRP) = IP
602 DRAPE_WRK(IE)%DRAPE_PLY(IP)%IPID = IDRP
603 DO ISL = 1,NSLICE
604 DRAPE_WRK(IE)%DRAPE_PLY(IP)%RDRAPE(ISL,1) = RSH4N(J,ISL,1)
605 DRAPE_WRK(IE)%DRAPE_PLY(IP)%RDRAPE(ISL,2) = RSH4N(J,ISL,2)
606 DRAPE_WRK(IE)%DRAPE_PLY(IP)%IDRAPE(ISL,1) = ISH4N(J,ISL,1) !! Mat_id
607 DRAPE_WRK(IE)%DRAPE_PLY(IP)%IDRAPE(ISL,2) = ISH4N(J,ISL,2) !! NPT_SLICE
608 ENDDO ! nbre of slice
609C count DRAPE entities for printing out
610c DRP_SHEL(I) = DRP_SHEL(I) + 1
611check if SH4N of the DRAPE is inside any plys
612 NIS = NIS + 1
613 ENDIF
614 ENDIF
615 ENDDO ! DO IP=1,NPT
616.OR. ENDIF ! F (IGTYP == 17 IGTYP == 51)
617C---
618.AND. IF (NIS == 0
619.OR. . (IGTYP == 17. OR. IGTYP == 51 IGTYP == 52)) THEN
620C
621C error message to be add
622C
623C --- SH4N --- from /DRAPE not associated to a PID = 17, 51, 52 plys
624C
625 CALL ANCMSG(MSGID=1172,
626 . MSGTYPE=MSGERROR,
627 . ANMODE=ANINFO,
628 . C1=MESS5,
629 . I1=ID,
630 . C2=MESS1,
631 . I2=ISH)
632.AND. ELSEIF (NIS == 0
633.AND. . IGTYP /= 17. AND. IGTYP /= 51 IGTYP /= 52) THEN
634C --- SH4N --- from /DRAPE belong to a not allowed PID
635 CALL ANCMSG(MSGID=1171,
636 . MSGTYPE=MSGERROR,
637 . ANMODE=ANINFO,
638 . C1=MESS5,
639 . I1=ID,
640 . C2=MESS1,
641 . I2=ISH)
642 ENDIF ! IF (NIS == 0
643 ENDIF ! IF (TAGSH(IE) == 0)
644 ENDIF ! IF (ISH == IX)
645 ENDDO ! DO IE=1,NUMELC
646C---
647 IF (NO_ISH == 0) THEN
648C --- SH4N --- from /DRAPE is not existing
649 CALL ANCMSG(MSGID=1174,
650 . MSGTYPE=MSGERROR,
651 . ANMODE=ANINFO,
652 . C1=MESS5,
653 . I1=ID,
654 . C2=MESS1,
655 . I2=ISH)
656 ENDIF
657 ENDDO ! DO J=1,IT1
658 ENDIF ! IF (IT1 > 0)
659C---
660C---
661 IF (IT3 > 0) THEN
662 DO J=1,IT3
663 IGR = IGRSH4N_DRP(J,1)
664 IDRP = IGRSH4N_DRP(J,2)
665 NSLICE = IGRSH4N_DRP(J,3)
666 DO JJ=1,NGRSHEL
667 OFFC = NGRNOD + NGRBRIC + NGRQUAD + JJ
668 JGR = IGRSH4N(JJ)%ID
669 NEL = IGRSH4N(JJ)%NENTITY
670C element type Q4
671 ITY = IGRSH4N(JJ)%GRTYPE
672 IF (IGR == JGR) THEN
673 IF (ITY == 3) THEN
674 DO II = 1,NEL
675 IDSHEL = IGRSH4N(JJ)%ENTITY(II)
676 PID = IXC(6,IDSHEL)
677 IGTYP = IGEO(11,PID)
678 NPT =IWORKSH(1,IDSHEL)
679 IF (TAGSH(IDSHEL) == 0) THEN
680 TAGSH(IDSHEL) = IDSHEL
681 NIS = 0
682.NOT. IF (ALLOCATED(DRAPE_WRK(IDSHEL)%DRAPE_PLY)) THEN
683 ALLOCATE(DRAPE_WRK(IDSHEL)%DRAPE_PLY(NPT))
684 NUMELC_DRAPE = NUMELC_DRAPE + 1
685 INDX_TMP(IDSHEL) = NUMELC_DRAPE
686 DRAPE_WRK(IDSHEL)%NPLY_DRAPE = 0
687 ENDIF
688C
689C count DRAPE entities for printing out
690 DRP_SHEL(I) = DRP_SHEL(I) + 1
691 IPPID = 2
692.OR. IF (IGTYP == 17 IGTYP == 51) THEN
693.NOT. IF (ALLOCATED(DRAPE_WRK(IDSHEL)%INDX_PLY)) THEN
694 ALLOCATE(DRAPE_WRK(IDSHEL)%INDX_PLY(NPT) )
695 DRAPE_WRK(IDSHEL)%INDX_PLY = 0
696 ENDIF
697 NPT_DRP = DRAPE_WRK(IDSHEL)%NPLY_DRAPE
698 DO IP=1,NPT
699 JPID = IWORK_T(IDSHEL)%PLYID(IP) ! ply pid number
700c IGEO(1, JPID) ! ply pid ID
701 IF (JPID > 0) THEN
702 JDRP = IGEO(48,JPID)
703 IF (IDRP==JDRP)THEN
704 ALLOCATE(DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(NSLICE,2) )
705 ALLOCATE(DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(NSLICE,2) )
706 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE = 0
707 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE = ZERO
708 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%NSLICE = NSLICE
709 NPT_DRP = NPT_DRP + 1
710 DRAPE_WRK(IDSHEL)%NPLY_DRAPE = NPT_DRP
711 DRAPE_WRK(IDSHEL)%INDX_PLY(NPT_DRP) = IP
712 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IPID = IDRP
713 DO ISL = 1,NSLICE
714 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(ISL,1) = RSH4N_GR(J,ISL,1)
715 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(ISL,2) = RSH4N_GR(J,ISL,2)
716 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(ISL,1) = ISH4N_GR(J,ISL,1) !! Mat_id
717 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(ISL,2) = ISH4N_GR(J,ISL,2) !! NPT_SLICE
718 ENDDO ! nbre of slice
719C
720C count DRAPE entities for printing out
721c DRP_SHEL(I) = DRP_SHEL(I) + 1
722C
723check if SH4N of grshel of the DRAPE is inside any plys
724 NIS = NIS + 1
725 ENDIF
726 ENDIF
727 ENDDO
728 ELSEIF (IGTYP == 52) THEN
729.NOT. IF (ALLOCATED(DRAPE_WRK(IDSHEL)%INDX_PLY)) THEN
730 ALLOCATE(DRAPE_WRK(IDSHEL)%INDX_PLY(NPT) )
731 DRAPE_WRK(IDSHEL)%INDX_PLY = 0
732 DRAPE_WRK(IDSHEL)%NPLY_DRAPE = 0
733 ENDIF
734 NPT_DRP = DRAPE_WRK(IDSHEL)%NPLY_DRAPE
735 DO IP=1,NPT
736 JPID = IWORK_T(IDSHEL)%PLYID(IP)
737 IF (JPID > 0) THEN
738 JDRP = IGEO_STACK(48,JPID)
739 IF (IDRP==JDRP)THEN
740 ALLOCATE(DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(NSLICE,2) )
741 ALLOCATE(DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(NSLICE,2) )
742 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE = ZERO
743 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE = 0
744 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%NSLICE = NSLICE
745 NPT_DRP = NPT_DRP + 1
746 DRAPE_WRK(IDSHEL)%NPLY_DRAPE = NPT_DRP
747 DRAPE_WRK(IDSHEL)%INDX_PLY(NPT_DRP) = IP
748 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IPID = IDRP
749 DO ISL = 1,NSLICE
750 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(ISL,1) = RSH4N_GR(J,ISL,1)
751 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(ISL,2) = RSH4N_GR(J,ISL,2)
752 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(ISL,1) = ISH4N_GR(J,ISL,1) !! Mat_id
753 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(ISL,2) = ISH4N_GR(J,ISL,2) !! NPT_SLICE
754 ENDDO ! nbre of slice
755C count DRAPE entities for printing out
756c DRP_SHEL(I) = DRP_SHEL(I) + 1
757C
758check if SH4N of grshel of the DRAPE is inside any plys
759 NIS = NIS + 1
760 ENDIF
761 ENDIF
762 ENDDO
763.OR. ENDIF ! IF (IGTYP == 17 IGTYP == 51)
764C---
765.AND. IF (NIS == 0
766.OR. . (IGTYP == 17. OR. IGTYP == 51 IGTYP == 52)) THEN
767C --- SH4N --- from /DRAPE not associated to a PID = 17, 51, 52 plys
768 CALL ANCMSG(MSGID=1173,
769 . MSGTYPE=MSGERROR,
770 . ANMODE=ANINFO,
771 . C1=MESS5,
772 . I1=ID,
773 . C2=MESS2,
774 . I2=IGR,
775 . C3=MESS1,
776 . I3=IXC(NIXC,IDSHEL))
777.AND. ELSEIF (NIS == 0
778.AND. . IGTYP /= 17. AND. IGTYP /= 51 IGTYP /= 52) THEN
779C --- SH4N --- from /DRAPE belong to a not allowed PID
780 CALL ANCMSG(MSGID=1170,
781 . MSGTYPE=MSGERROR,
782 . ANMODE=ANINFO,
783 . C1=MESS5,
784 . I1=ID,
785 . C2=MESS2,
786 . I2=IGR,
787 . C3=MESS1,
788 . I3=IXC(NIXC,IDSHEL))
789 ENDIF
790 ELSEIF (TAGSH(IDSHEL) == IXC(NIXC,IDSHEL)) THEN
791 CALL ANCMSG(MSGID=1155,
792 . MSGTYPE=MSGERROR,
793 . ANMODE=ANINFO,
794 . C1=MESS,
795 . I1=IDRP,
796 . C2=MESS2,
797 . I2=IGR,
798 . C3=MESS1,
799 . I3=IXC(NIXC,IDSHEL))
800 ENDIF ! IF (TAGSH(IE) == 0)
801 ENDDO ! DO II = 1,NEL
802 ENDIF ! IF (ITY == 3)
803 ENDIF ! IF (IGR == JGR)
804 ENDDO ! DO JJ=1,NGRSHEL
805 ENDDO ! DO J=1,IT3
806 ENDIF ! IF (IT3 > 0)
807 IF (IT2 > 0) THEN
808 DO J=1,IT2
809 ISH = ISH3N_DRP(J,1)
810 IDRP = ISH3N_DRP(J,2)
811 NSLICE = ISH3N_DRP(J,3)
812 NO_ISH = 0
813 DO IE=1,NUMELTG
814 IX = IXTG(NIXTG,IE)
815 PID = IXTG(5,IE)
816 IGTYP = IGEO(11,PID)
817 NPT_DRP = 0
818 IF (ISH == IX) THEN
819 NO_ISH = NO_ISH + 1
820c tag of SH3N to check doubles within grshel of the DRAPE
821 NPT = IWORKSH(1,NUMELC +IE) ! nb max de plys belong to the element
822 IF (TAGSH(IE+NUMELC) == 0) THEN
823 TAGSH(IE+NUMELC) = ISH
824 NIS = 0
825.NOT. IF (ALLOCATED(DRAPE_WRK(NUMELC + IE)%DRAPE_PLY)) THEN
826 ALLOCATE(DRAPE_WRK(NUMELC + IE)%DRAPE_PLY(NPT))
827 NUMELTG_DRAPE = NUMELTG_DRAPE + 1
828 INDX_TMP(NUMELC + IE) = NUMELTG_DRAPE
829 DRAPE_WRK(IE + NUMELC)%NPLY_DRAPE = 0
830 ENDIF
831C count DRAPE entities for printing out
832 DRP_SH3N(I) = DRP_SH3N(I) + 1
833 IPPID = 2
834.OR. IF (IGTYP == 17 IGTYP == 51) THEN
835.NOT. IF (ALLOCATED(DRAPE_WRK(NUMELC + IE)%INDX_PLY)) THEN
836 ALLOCATE(DRAPE_WRK(NUMELC + IE)%INDX_PLY(NPT) )
837 DRAPE_WRK(NUMELC + IE)%INDX_PLY = 0
838 ENDIF
839 NPT_DRP = DRAPE_WRK(NUMELC + IE)%NPLY_DRAPE
840 DO IP=1,NPT
841 JPID = IWORK_T(NUMELC + IE)%PLYID(IP) ! ply pid
842c IGEO(1, JPID) ! ply pid ID
843 IF (JPID > 0) THEN
844 JDRP = IGEO(48,JPID)
845 IF (IDRP==JDRP)THEN
846 ALLOCATE(DRAPE_WRK(IE+NUMELC)%DRAPE_PLY(IP)%RDRAPE(NSLICE,2) )
847 ALLOCATE(DRAPE_WRK(IE+NUMELC)%DRAPE_PLY(IP)%IDRAPE(NSLICE,2) )
848 DRAPE_WRK(IE+NUMELC)%DRAPE_PLY(IP)%RDRAPE = ZERO
849 DRAPE_WRK(IE+NUMELC)%DRAPE_PLY(IP)%IDRAPE = 0
850 DRAPE_WRK(IE+NUMELC)%DRAPE_PLY(IP)%NSLICE = NSLICE
851 NPT_DRP = NPT_DRP + 1
852 DRAPE_WRK(IE+NUMELC)%NPLY_DRAPE = NPT_DRP
853 DRAPE_WRK(IE+NUMELC)%INDX_PLY(NPT_DRP) = IP
854 DRAPE_WRK(IE+NUMELC)%DRAPE_PLY(IP)%IPID = IDRP
855 DO ISL = 1,NSLICE
856 DRAPE_WRK(IE+NUMELC)%DRAPE_PLY(IP)%RDRAPE(ISL,1) = RSH3N(J,ISL,1)
857 DRAPE_WRK(IE+NUMELC)%DRAPE_PLY(IP)%RDRAPE(ISL,2) = RSH3N(J,ISL,2)
858 DRAPE_WRK(IE+NUMELC)%DRAPE_PLY(IP)%IDRAPE(ISL,1) = ISH3N(J,ISL,1) !! Mat_id
859 DRAPE_WRK(IE+NUMELC)%DRAPE_PLY(IP)%IDRAPE(ISL,2) = ISH3N(J,ISL,2) !! NPT_SLICE
860 ENDDO ! nbre of slice
861C
862C count DRAPE entities for printing out
863c DRP_SH3N(I) = DRP_SH3N(I) + 1
864C
865check if SH3N of grshel of the DRAPE is inside any plys
866 NIS = NIS + 1
867 ENDIF
868 ENDIF
869 ENDDO ! DO IP=1,NPT
870 ELSEIF (IGTYP == 52) THEN
871.NOT. IF (ALLOCATED(DRAPE_WRK(NUMELC + IE)%INDX_PLY)) THEN
872 ALLOCATE(DRAPE_WRK(NUMELC + IE)%INDX_PLY(NPT) )
873 DRAPE_WRK(NUMELC + IE)%INDX_PLY = 0
874 ENDIF
875 NPT_DRP = DRAPE_WRK(NUMELC + IE)%NPLY_DRAPE
876 DO IP=1,NPT
877 JPID = IWORK_T(NUMELC + IE)%PLYID(IP) ! ply pid
878c IGEO(1, JPID) ! ply pid ID
879 IF (JPID > 0) THEN
880 JDRP = IGEO_STACK(48,JPID)
881 IF (IDRP==JDRP)THEN
882 ALLOCATE(DRAPE_WRK(NUMELC + IE)%DRAPE_PLY(IP)%RDRAPE(NSLICE,2) )
883 ALLOCATE(DRAPE_WRK(NUMELC + IE)%DRAPE_PLY(IP)%IDRAPE(NSLICE,2) )
884 DRAPE_WRK(NUMELC + IE)%DRAPE_PLY(IP)%NSLICE = NSLICE
885 NPT_DRP = NPT_DRP + 1
886 DRAPE_WRK(NUMELC + IE)%NPLY_DRAPE = NPT_DRP
887 DRAPE_WRK(NUMELC + IE)%INDX_PLY(NPT_DRP) = IP
888 DRAPE_WRK(NUMELC + IE)%DRAPE_PLY(IP)%IPID = IDRP
889 DO ISL = 1,NSLICE
890 DRAPE_WRK(NUMELC + IE)%DRAPE_PLY(IP)%RDRAPE(ISL,1) = RSH3N(J,ISL,1)
891 DRAPE_WRK(NUMELC + IE)%DRAPE_PLY(IP)%RDRAPE(ISL,2) = RSH3N(J,ISL,2)
892 DRAPE_WRK(NUMELC + IE)%DRAPE_PLY(IP)%IDRAPE(ISL,1) = ISH3N(J,ISL,1) !! Mat_id
893 DRAPE_WRK(NUMELC + IE)%DRAPE_PLY(IP)%IDRAPE(ISL,2) = ISH3N(J,ISL,2) !! NPT_SLICE
894 ENDDO ! nbre of slice
895C
896C count DRAPE entities for printing out
897c DRP_SH3N(I) = DRP_SH3N(I) + 1
898C
899check if SH3N of grshel of the DRAPE is inside any plys
900 NIS = NIS + 1
901 ENDIF
902 ENDIF
903 ENDDO ! DO IP=1,NPT
904.OR. ENDIF ! IF (IGTYP == 17 IGTYP == 51)
905C---
906.AND. IF (NIS == 0
907.OR. . (IGTYP == 17. OR. IGTYP == 51 IGTYP == 52)) THEN
908C --- SH3N --- from /DRAPE not associated to a PID = 17, 51, 52 plys
909 CALL ANCMSG(MSGID=1172,
910 . MSGTYPE=MSGERROR,
911 . ANMODE=ANINFO,
912 . C1=MESS5,
913 . I1=ID,
914 . C2=MESS3,
915 . I2=ISH)
916.AND. ELSEIF (NIS == 0
917.AND. . IGTYP /= 17. AND. IGTYP /= 51 IGTYP /= 52) THEN
918C --- SH3N --- from /DRAPE belong to a not allowed PID
919 CALL ANCMSG(MSGID=1171,
920 . MSGTYPE=MSGERROR,
921 . ANMODE=ANINFO,
922 . C1=MESS5,
923 . I1=ID,
924 . C2=MESS3,
925 . I2=ISH)
926 ENDIF ! IF (NIS == 0
927 ENDIF ! IF (TAGSH(IE+NUMELC) == 0)
928 ENDIF ! IF (ISH == IX)
929 ENDDO ! DO IE=1,NUMELTG
930C---
931 IF (NO_ISH == 0) THEN
932C --- SH3N --- from /DRAPE is not existing
933 CALL ANCMSG(MSGID=1174,
934 . MSGTYPE=MSGERROR,
935 . ANMODE=ANINFO,
936 . C1=MESS5,
937 . I1=ID,
938 . C2=MESS3,
939 . I2=ISH)
940 ENDIF
941 ENDDO ! DO J=1,IT2
942 ENDIF ! IF (IT2 > 0)
943C---
944 IF (IT4 > 0) THEN
945 DO J=1,IT4
946 IGR = IGRSH3N_DRP(J,1)
947 IDRP = IGRSH3N_DRP(J,2)
948 NSLICE = IGRSH3N_DRP(J,3)
949 DO JJ=1, NGRSH3N
950 OFFC = NGRNOD + NGRBRIC + NGRQUAD + NGRSHEL + NGRTRUS +
951 . NGRBEAM + NGRSPRI + JJ
952 JGR = IGRSH3N(JJ)%ID
953 NEL = IGRSH3N(JJ)%NENTITY
954C element type T3
955 ITY = IGRSH3N(JJ)%GRTYPE
956 IF (IGR == JGR) THEN
957 IF (ITY == 7) THEN !!! obsolete
958 DO II = 1,NEL
959 IDSH3N = IGRSH3N(JJ)%ENTITY(II)
960 IDSHEL = IDSH3N + NUMELC
961 PID = IXTG(5,IDSH3N)
962 IGTYP = IGEO(11,PID)
963 NPT = IWORKSH(1,IDSHEL)
964 NPT_DRP = 0
965 IF (TAGSH(IDSHEL) == 0) THEN
966 TAGSH(IDSHEL) = IXTG(NIXTG,IDSH3N)
967 NIS = 0
968.NOT. IF (ALLOCATED(DRAPE_WRK(IDSHEL)%DRAPE_PLY)) THEN
969 ALLOCATE(DRAPE_WRK(IDSHEL)%DRAPE_PLY(NPT))
970 NUMELTG_DRAPE = NUMELTG_DRAPE + 1
971 INDX_TMP(IDSHEL) = NUMELTG_DRAPE
972 DRAPE_WRK(IDSHEL)%NPLY_DRAPE = 0
973 ENDIF
974C
975C count DRAPE entities for printing out
976 DRP_SH3N(I) = DRP_SH3N(I) + 1
977 IPPID = 2
978.OR. IF (IGTYP == 17 IGTYP == 51) THEN
979.NOT. IF (ALLOCATED(DRAPE_WRK(IDSHEL)%INDX_PLY)) THEN
980 ALLOCATE(DRAPE_WRK(IDSHEL)%INDX_PLY(NPT) )
981 DRAPE_WRK(IDSHEL)%INDX_PLY = 0
982 ENDIF
983 NPT_DRP = DRAPE_WRK(IDSHEL)%NPLY_DRAPE
984 DO IP=1,NPT
985 JPID = IWORK_T(IDSHEL)%PLYID(IP) ! ply pid number
986c IGEO(1, JPID) ! ply pid ID
987 IF (JPID > 0) THEN
988 JDRP = IGEO(48,JPID)
989 IF (IDRP==JDRP)THEN
990 ALLOCATE(DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(NSLICE,2))
991 ALLOCATE(DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(NSLICE,2))
992 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE = ZERO
993 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE = 0
994 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%NSLICE = NSLICE
995 NPT_DRP = NPT_DRP + 1
996 DRAPE_WRK(IDSHEL)%NPLY_DRAPE = NPT_DRP
997 DRAPE_WRK(IDSHEL)%INDX_PLY(NPT_DRP)= IP
998 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IPID = IDRP
999 DO ISL = 1,NSLICE
1000 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(ISL,1) = RSH3N_GR(J,ISL,1)
1001 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(ISL,2) = RSH3N_GR(J,ISL,2)
1002 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(ISL,1) = ISH3N_GR(J,ISL,1) !! Mat_id
1003 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(ISL,2) = ISH3N_GR(J,ISL,2) !! NPT_SLICE
1004 ENDDO ! nbre of slice
1005C count DRAPE entities for printing out
1006c DRP_SH3N(I) = DRP_SH3N(I) + 1
1007check if SH3N of grshel of the DRAPE is inside any plys
1008 NIS = NIS + 1
1009 ENDIF
1010 ENDIF
1011 ENDDO ! DO IP=1,N1
1012 ELSEIF (IGTYP == 52) THEN
1013.NOT. IF (ALLOCATED(DRAPE_WRK(IDSHEL)%INDX_PLY)) THEN
1014 ALLOCATE(DRAPE_WRK(IDSHEL)%INDX_PLY(NPT) )
1015 DRAPE_WRK(IDSHEL)%INDX_PLY = 0
1016 ENDIF
1017 NPT_DRP = DRAPE_WRK(IDSHEL)%NPLY_DRAPE
1018 DO IP=1,NPT
1019 JPID = IWORK_T(IDSHEL)%PLYID(IP)
1020c IGEO(1, JPID) ! ply pid ID
1021 IF (JPID > 0) THEN
1022 JDRP = IGEO_STACK(48,JPID)
1023 IF (IDRP==JDRP)THEN
1024 ALLOCATE(DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(NSLICE,2) )
1025 ALLOCATE(DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(NSLICE,2) )
1026 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE = ZERO
1027 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE = 0
1028 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%NSLICE = NSLICE
1029 NPT_DRP = NPT_DRP + 1
1030 DRAPE_WRK(IDSHEL)%NPLY_DRAPE = NPT_DRP
1031 DRAPE_WRK(IDSHEL)%INDX_PLY(NPT_DRP)= IP
1032 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IPID = IDRP
1033 DO ISL = 1,NSLICE
1034 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(ISL,1) = RSH3N_GR(J,ISL,1)
1035 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%RDRAPE(ISL,2) = RSH3N_GR(J,ISL,2)
1036 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(ISL,1) = ISH3N_GR(J,ISL,1) !! Mat_id
1037 DRAPE_WRK(IDSHEL)%DRAPE_PLY(IP)%IDRAPE(ISL,2) = ISH3N_GR(J,ISL,2) !! NPT_SLICE
1038 ENDDO ! nbre of slice
1039C count DRAPE entities for printing out
1040c DRP_SH3N(I) = DRP_SH3N(I) + 1
1041C
1042check if SH3N of grshel of the DRAPE is inside any plys
1043 NIS = NIS + 1
1044 ENDIF
1045 ENDIF
1046 ENDDO
1047.OR. ENDIF ! IF (IGTYP == 17 IGTYP == 51)
1048C---
1049.AND. IF (NIS == 0
1050.OR. . (IGTYP == 17. OR. IGTYP == 51 IGTYP == 52)) THEN
1051C --- SH3N --- from /DRAPE not associated to a PID = 17, 51, 52 plys
1052 CALL ANCMSG(MSGID=1173,
1053 . MSGTYPE=MSGERROR,
1054 . ANMODE=ANINFO,
1055 . C1=MESS5,
1056 . I1=ID,
1057 . C2=MESS4,
1058 . I2=IGR,
1059 . C3=MESS3,
1060 . I3=IXTG(NIXTG,IDSH3N))
1061.AND. ELSEIF (NIS == 0
1062.AND. . IGTYP /= 17. AND. IGTYP /= 51 IGTYP /= 52) THEN
1063C --- SH3N --- from /DRAPE belong to a not allowed PID
1064 CALL ANCMSG(MSGID=1170,
1065 . MSGTYPE=MSGERROR,
1066 . ANMODE=ANINFO,
1067 . C1=MESS5,
1068 . I1=ID,
1069 . C2=MESS4,
1070 . I2=IGR,
1071 . C3=MESS3,
1072 . I3=IXTG(NIXTG,IDSH3N))
1073 ENDIF
1074 ELSEIF (TAGSH(IDSHEL) == IXTG(NIXTG,IDSH3N)) THEN
1075 CALL ANCMSG(MSGID=1155,
1076 . MSGTYPE=MSGERROR,
1077 . ANMODE=ANINFO,
1078 . C1=MESS,
1079 . I1=IDRP,
1080 . C2=MESS4,
1081 . I2=IGR,
1082 . C3=MESS3,
1083 . I3=IXTG(NIXTG,IDSH3N))
1084 ENDIF ! IF (TAGSH(IDSHEL) == 0)
1085 ENDDO ! DO II = 1,NEL
1086 ENDIF ! IF (ITY == 7)
1087 ENDIF ! IF (IGR == JGR)
1088 ENDDO ! DO JJ=1,NGRSHEL
1089 ENDDO ! DO J=1,IT4
1090 ENDIF ! IF (IT4 > 0)
1091C---
1092 IF (IPRI < 5) WRITE(IOUT,'(10x,i10,2(15x,i10))')
1093 . ID,DRP_SHEL(I),DRP_SH3N(I)
1094C---
1095 DEALLOCATE(ISH4N,ISH4N_GR,ISH3N ,ISH3N_GR,
1096 . ISH4N_DRP,IGRSH4N_DRP,ISH3N_DRP,IGRSH3N_DRP,
1097 . ITMP_SH4N,ITMP_SH3N, ITMP_GRSH4N, ITMP_GRSH3N)
1098 DEALLOCATE(RSH4N,RSH3N,RSH4N_GR, RSH3N_GR)
1099 ENDDO ! DO I=1,NDRAPE
1100!
1101 IF(NUMELC_DRAPE > 0) THEN
1102 DO I=1,NUMELC
1103 II = INDX_TMP(I)
1104 IF(II > 0)INDXSH(II) = I
1105 ENDDO
1106 ENDIF
1107
1108 IF(NUMELTG_DRAPE > 0) THEN
1109 DO I=1,NUMELTG
1110 II = INDX_TMP(I + NUMELC)
1111 IF(II > 0) INDXSH(NUMELC_DRAPE + II) = I+ NUMELC
1112 ENDDO
1113 ENDIF
1114 DEALLOCATE(INDX_TMP)
1115 !====================================================================================
1116 ! End reading /DRAPE
1117 !====================================================================================
1118C-------------------------------------
1119C Recherche des ID doubles (parmis les options /DRAPE)
1120C-------------------------------------
1121 CALL UDOUBLE(DRAPE_ID,1,NDRAPE,MESS,0,BID)
1122C---
1123C-----------------------------
1124 1001 FORMAT(//
1125 .' drape option '/
1126 .' ------------- '/
1127 .' drape number entity TYPE entity id slice number',
1128 .' ply thinning factor ply orientation angle change')
1129 1002 FORMAT(//
1130 .' drape option '/
1131 .' ------------- '/
1132 .' drape number nb. of shell elements nb. of sh3n elements')
1133C-----------------------------
1134 RETURN
#define my_real
Definition cppsort.cpp:32
subroutine hm_get_float_array_2indexes(name, rval, index1, index2, is_available, lsubmodel, unitab)
subroutine hm_get_int_array_2indexes(name, ival, index1, index2, is_available, lsubmodel)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_get_string_index(name, sval, index, size, is_available)
subroutine hm_option_start(entity_type)
#define max(a, b)
Definition macros.h:21
initmumps id
integer numeltg_drape
Definition drape_mod.F:92
integer numelc_drape
Definition drape_mod.F:92
integer, parameter nchartitle
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

◆ hm_read_prelecdrape()

subroutine hm_read_prelecdrape ( integer, dimension(*) idrapeid,
type(submodel_data), dimension(*) lsubmodel )

Definition at line 36 of file hm_read_drape.F.

37C-----------------------------------------------
38C M o d u l e s
39C-----------------------------------------------
40 USE message_mod
41 USE submodel_mod
44C-----------------------------------------------
45C I m p l i c i t T y p e s
46C-----------------------------------------------
47#include "implicit_f.inc"
48C-----------------------------------------------
49C C o m m o n B l o c k s
50C-----------------------------------------------
51#include "drape_c.inc"
52C-----------------------------------------------
53C-----------------------------------------------
54C D u m m y A r g u m e n t s
55C-----------------------------------------------
56 INTEGER IDRAPEID(*)
57 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
58C-----------------------------------------------
59C L o c a l V a r i a b l e s
60C-----------------------------------------------
61 INTEGER I,ID
62 CHARACTER(LEN=NCHARTITLE) :: TITR
63 CHARACTER MESS*40
64 DATA mess/'DRAPE DEFINITION '/
65c REAL ou REAL*8
67 . bid
68C======================================================================|
69 ! PREREAD OF DRAPE
70 CALL hm_option_start('/DRAPE')
71 ! Loop over DRAPE
72 DO i=1,ndrape
73 titr = ''
74 CALL hm_option_read_key(lsubmodel,
75 . option_id = id,
76 . option_titr = titr)
77 idrapeid(i) = id
78 ENDDO ! DO I=1,NDRAPE
79 ! Looking for double IDs
80 CALL udouble(idrapeid,1,ndrape,mess,0,bid)
81C-------------------------------------
82 RETURN
subroutine udouble(list, ilist, nlist, mess, ir, rlist)
Definition sysfus.F:589