41
42
43
50
51
52
53#include "implicit_f.inc"
54
55
56
57#include "scry_c.inc"
58#include "com01_c.inc"
59#include "com04_c.inc"
60
61
62
63 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
64 TYPE (GROUP_) , DIMENSION(NGRBRIC) :: IGRBRIC
65
66 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
67 INTEGER IXTG(NIXTG,NUMELTG) ,IXC(NIXC,NUMELC)
68 INTEGER, INTENT(INOUT) :: PTSHEL(NUMELC),PTSH3N(NUMELTG)
69 INTEGER, INTENT(INOUT) :: NUSPHCEL
70
71
72
73 INTEGER
74 . I,J,NGAUSS,NLAYER ,
75 . NUMS,NIP,NUVAR,JJHBE,J1,NU,IP,N,NPSOLID,
76 . K,IHBE,NPG,ND,NVAR_SHELL,NPT,NE,
77 . NVSHELL0,NUSHELL0,NORTSHEL0,NUSOLID0,NELS,KK,JJ,
78 . ISOLNOD,ISOLID,IFRAM,IORTH,IREP,IGTYP,ISH3N,NDIR,NLAYERS,
79 . UID,SUB_ID,NLAY,NPTR,NPTS,NPTT,IFAIL,IRUPT_TYP,NVAR_RUPT,
80 . ILAY,IMAT,NPT_MAX,NUBEAM0,NVSH_STRA,PROP,NSROT
81 INTEGER IGBR, JGBR, IOK
82 CHARACTER(LEN=NCHARKEY) :: KEY2,KEY3,KEY
83
84 LOGICAL IS_AVAILABLE,GLOB
85 CHARACTER MESS*40
86 INTEGER ID_ELEM,NB_INIBRI,NB_INISHE,NB_INISH3,NB_ELEMENTS,
87 . NB_INITRUSS,NB_INIBEAM,NB_INISPRI,NB_INIQUA,IE,KTRIELC,
88 . KTRIELTG,NELT,NB_INISPHCEL
90 INTEGER, DIMENSION(:), ALLOCATABLE :: KSYSUSRTG ,KSYSUSR,WORK,ITRI,
91 . INDEX
92
94 INTEGER UEL2SYS
95
96
97
98
99
100
101
102
103
104 nvshell0 = 33
105 nushell0 = 4
106 nortshel0 = 5
107 nvar_shell = 0
108 nubeam0 = 4
109
110
111
112
113 nvsh_stra =0
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132 ALLOCATE (ksysusr(2*numelc))
133 ALLOCATE (ksysusrtg(2*numeltg))
134 ALLOCATE (work(70000))
135 nelt =
max(numelc, numeltg)
136 ALLOCATE(itri(nelt),index(2*nelt))
137 ktrielc = 0
138 ktrieltg = 0
139 ksysusr = 0
140 ksysusrtg = 0
141 work = 0
142 itri = 0
143 index= 0
144
145
146
147
148
149 is_available = .false.
150 glob = .false.
151
152 IF (isigi==-3.OR.isigi==-4.OR.isigi==-5) THEN
153
154
155
156
157
159 IF ( nb_inibri > 0 ) THEN
160
162
163 DO i=1,nb_inibri
164
166 . keyword2 = key)
167
168 SELECT CASE (key(1:len_trim(key)))
169
170 CASE ( 'FILL' )
171
172 CALL hm_get_intv(
'inibri_fill_count',nb_elements,is_available,lsubmodel)
173 numsol = numsol + nb_elements
174 nfilsol = 1
175
176 CASE ( 'EPSP' )
177
178 CALL hm_get_intv(
'inibri_epsp_count',nb_elements,is_available,lsubmodel)
179 numsol = numsol + nb_elements
180
181 CASE ( 'ENER' )
182
183 CALL hm_get_intv(
'inibri_ener_count',nb_elements,is_available,lsubmodel)
184 numsol = numsol + nb_elements
185
186 CASE ( 'DENS' )
187
188 CALL hm_get_intv(
'inibri_dens_count',nb_elements,is_available,lsubmodel)
189 numsol = numsol + nb_elements
190
191 CASE ( 'stress' )
192!-------------------
193 CALL HM_GET_INTV('inibri_stress_count',NB_ELEMENTS,IS_AVAILABLE,LSUBMODEL)
194 NUMSOL = NUMSOL + NB_ELEMENTS
195!-------------------
196 CASE ( 'aux' )
197!-------------------
198 CALL HM_GET_INTV('inibri_aux_count',NB_ELEMENTS,IS_AVAILABLE,LSUBMODEL)
199 NUMSOL = NUMSOL + NB_ELEMENTS
200!
201 DO J=1,NB_ELEMENTS
202 CALL HM_GET_INT_ARRAY_INDEX('brick_id',ID_ELEM,J,IS_AVAILABLE,LSUBMODEL)
203 CALL HM_GET_INT_ARRAY_INDEX('nb_integr',NPT,J,IS_AVAILABLE,LSUBMODEL)
204 CALL HM_GET_INT_ARRAY_INDEX('isolnod',ISOLNOD,J,IS_AVAILABLE,LSUBMODEL)
205 CALL HM_GET_INT_ARRAY_INDEX('isolid',JJHBE,J,IS_AVAILABLE,LSUBMODEL)
206 CALL HM_GET_INT_ARRAY_INDEX('nvars',NUVAR,J,IS_AVAILABLE,LSUBMODEL)
207!
208 IUSOLID = 1
209 NUSOLID = MAX(NUSOLID,NPT*NUVAR)
210 ENDDO ! DO J=1,NB_ELEMENTS
211!-------------------
212 CASE ( 'strs_f' )
213!-------------------
214 CALL HM_GET_INTV('inibri_strs_f_count',NB_ELEMENTS,IS_AVAILABLE,LSUBMODEL)
215!
216 DO J=1,NB_ELEMENTS
217 CALL HM_GET_INT_ARRAY_INDEX('nb_integr',NPT,J,IS_AVAILABLE,LSUBMODEL)
218!
219 NUMSOL = NUMSOL + 1
220 NVSOLID1 = MAX (NVSOLID1,NPT*9 + 4)
221 ENDDO ! DO J=1,NB_ELEMENTS
222!-------------------
223 CASE ( 'strs_fglo' )
224!-------------------
225 CALL HM_GET_INTV('inibri_strs_fglo_count',NB_ELEMENTS,IS_AVAILABLE,LSUBMODEL)
226!
227 DO J=1,NB_ELEMENTS
228 CALL HM_GET_INT_ARRAY_INDEX('nb_integr',NPT,J,IS_AVAILABLE,LSUBMODEL)
229 CALL HM_GET_INT_ARRAY_INDEX('grbric_id',IGBR,J,IS_AVAILABLE,LSUBMODEL)
230!
231 IF (IGBR > 0) THEN
232 IOK = 0
233 JGBR = 0
234 DO K=1,NGRBRIC
235 IF (IGBR == IGRBRIC(K)%ID) THEN
236 JGBR = K
237 IOK = 1
238 EXIT
239 ENDIF
240 ENDDO
241 IF (IOK == 0) THEN
242 CALL ANCMSG(MSGID=1611,MSGTYPE=MSGERROR,ANMODE=ANINFO,C1='strs_fglo',I1=IGBR)
243 ENDIF
244 NUMSOL = NUMSOL + IGRBRIC(JGBR)%NENTITY
245 ELSE
246 NUMSOL = NUMSOL + 1
247 ENDIF
248 NVSOLID1 = MAX (NVSOLID1,NPT*9 + 4)
249 ENDDO ! DO J=1,NB_ELEMENTS
250!-------------------
251 CASE ( 'stra_f' )
252!-------------------
253 CALL HM_GET_INTV('inibri_stra_f_count',NB_ELEMENTS,IS_AVAILABLE,LSUBMODEL)
254!
255 NUMSOL = NUMSOL + NB_ELEMENTS
256 DO J=1,NB_ELEMENTS
257 CALL HM_GET_INT_ARRAY_INDEX('nb_integr',NPT,J,IS_AVAILABLE,LSUBMODEL)
258 NVSOLID2 = MAX(NVSOLID2, MAX(1,NPT)*6)
259 ENDDO ! DO J=1,NB_ELEMENTS
260!-------------------
261 CASE ( 'stra_fglo' )
262!-------------------
263 CALL HM_GET_INTV('inibri_stra_fglo_count',nb_elements,is_available,lsubmodel)
264
265 numsol = numsol + nb_elements
266 DO j=1,nb_elements
268 nvsolid2 =
max(nvsolid2,
max(1,npt)*6)
269 ENDDO
270
271 CASE ( 'FAIL' )
272
273 CALL hm_get_intv(
'inibri_fail_count',nb_elements,is_available,lsubmodel)
274
275 numsol = numsol + nb_elements
276 DO j=1,nb_elements
282 nvsolid4 =
max(nvsolid4
283 ENDDO
284
285 CASE ( 'SCALE_YLD' )
286
287 CALL hm_get_intv(
'inibri_scale_yld_count',nb_elements,is_available
288
289 iufacyld = 1
290 numsol = numsol + nb_elements
291
292 DO j=1,nb_elements
297 nvsolid5 =
max(nvsolid5,nptr*npts*nptt*nlay + 7)
298 ENDDO
299
300 CASE ( 'ORTHO' )
301
302 CALL hm_get_intv(
'inibri_ortho_count',nb_elements,is_available,lsubmodel)
303
304 numsol = numsol + nb_elements
305 DO j=1,nb_elements
307 nvsolid3
308 ENDDO
309
310 CASE ( 'EREF' )
311
312 CALL hm_get_intv(
'inibri_eref_count',nb_elements,is_available,lsubmodel)
313
314 numsol = numsol + nb_elements
315 DO j=1,nb_elements
318
319
320 ENDDO
321
322 CASE DEFAULT
323
324 END SELECT
325
326 ENDDO
327 ENDIF
328
329
330
331
332
333 npt = 0
334
336 IF ( nb_inishe > 0 ) THEN
337
338 IF (ktrielc == 0) THEN
339
340 DO ie = 1, numelc
341 itri(ie) = ixc(nixc,ie)
342 END DO
343 CALL my_orders(0,work,itri,index,numelc,1)
344 DO j = 1, numelc
345 ie=index(j)
346 ksysusr(j) =ixc(nixc,ie)
347 ksysusr(numelc+j)=ie
348 END DO
349 ktrielc=1
350 ENDIF
351
352
354
355 numshel = 0
356 DO i=1,nb_inishe
357
359 . keyword2 = key,
360 . keyword3 = key2)
361
362 IF (key2 /= ' ') glob = .true.
363
364 SELECT CASE (key(1:len_trim(key)))
365
366
367 CASE ( 'EPSP_F' )
368
369 CALL hm_get_intv(
'inishe_epsp_f_count',nb_elements,is_available,lsubmodel)
370
371 DO j=1,nb_elements
372
376
377 ie=
uel2sys(id_elem,ksysusr,numelc)
378 IF(ie == 0 ) cycle
379 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
380 numshel = numshel + 1
381 ptshel(ie) = numshel
382 ENDIF
383 IF (nip == 0) THEN
384 nvar_shell =
max(nvar_shell,
max(1,npg)*9)
385 ELSE
386 nvar_shell =
max(nvar_shell,
max(1,nip)*
max(1,npg)*6)
387 ENDIF
388
389 ENDDO
390
391 CASE ( 'STRS_F' )
392
393 IF ( glob ) THEN
394 CALL hm_get_intv(
'inishe_strs_f_glob_count',nb_elements,is_available,lsubmodel)
395
396
397 DO j=1,nb_elements
398
402
403 ie=
uel2sys(id_elem,ksysusr,numelc)
404 IF(ie == 0 ) cycle
405 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
406 numshel = numshel + 1
407 ptshel(ie) = numshel
408 ENDIF
409 IF (nip == 0) THEN
410 nvar_shell =
max(nvar_shell,
max(1,npg)*13)
411 ELSE
412 nvar_shell =
max(nvar_shell,
max(1,nip)*
max(1,npg)*8)
413 ENDIF
414
415 ENDDO
416
417 ELSEIF ( .NOT. glob ) THEN
418
419 CALL hm_get_intv(
'inishe_strs_f_count',nb_elements,is_available,lsubmodel)
420
421 DO j=1,nb_elements
422
426 ie=
uel2sys(id_elem,ksysusr,numelc)
427
428
429 IF(ie == 0 ) cycle
430 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
431 numshel = numshel + 1
432 ptshel(ie) = numshel
433 ENDIF
434 IF (nip == 0) THEN
435 nvar_shell =
max(nvar_shell,
max(1,npg)*9)
436 ELSE
437 nvar_shell =
max(nvar_shell,
max(1,nip)*
max(1,npg)*6)
438 ENDIF
439
440 ENDDO
441
442 ENDIF
443
444 CASE ( 'STRA_F' )
445
446 IF ( glob ) THEN
447 CALL hm_get_intv(
'inishe_stra_f_glob_count',nb_elements,is_available,lsubmodel)
448
449 DO j=1,nb_elements
453 ie=
uel2sys(id_elem,ksysusr,numelc)
454
455 IF (nip==0) nip=2
456 IF(ie == 0 ) cycle
457 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
458 numshel = numshel + 1
459 ptshel(ie) = numshel
460 ENDIF
461
462 nvsh_stra =
max(nvsh_stra,2*
max(1,npg)*7)
463
464 ENDDO
465
466 ELSEIF ( .NOT. glob ) THEN
467
468 CALL hm_get_intv(
'inishe_stra_f_count',nb_elements,is_available,lsubmodel)
469
470 DO j=1,nb_elements
473 ie=
uel2sys(id_elem,ksysusr,numelc)
474
475 IF(ie == 0 ) cycle
476 nvar_shell =
max(nvar_shell,
max(1,npg)*8)
477 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
478 numshel = numshel + 1
479 ptshel(ie) = numshel
480 ENDIF
481 ENDDO
482 ENDIF
483
484 CASE ( 'THICK' )
485
486 CALL hm_get_intv(
'no_elems',nb_elements,is_available,lsubmodel)
487
488 DO j=1,nb_elements
490 ie=
uel2sys(id_elem,ksysusr,numelc)
491 IF(ie == 0 ) cycle
492 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
493 numshel = numshel + 1
494 ptshel(ie) = numshel
495 ENDIF
496 ENDDO
497
498
499 CASE ( 'EPSP' )
500
501 CALL hm_get_intv(
'no_blocks',nb_elements,is_available,lsubmodel)
502
503 DO j=1,nb_elements
505 ie=
uel2sys(id_elem,ksysusr,numelc)
506 IF(ie == 0 ) cycle
507 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
508 numshel = numshel + 1
509 ptshel(ie) = numshel
510 ENDIF
511 ENDDO
512
513 CASE ( 'ORTHO' )
514
515 CALL hm_get_intv(
'inishe_ortho_count',nb_elements,is_available,lsubmodel)
516
517 DO j=1,nb_elements
519 ie=
uel2sys(id_elem,ksysusr,numelc)
520 IF(ie == 0 ) cycle
521 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
522 numshel = numshel + 1
523 ptshel(ie) = numshel
524 ENDIF
525 ENDDO
526
527 DO j=1,nb_elements
530 ie=
uel2sys(id_elem,ksysusr,numelc)
531 IF(ie == 0 ) cycle
532 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
533 numshel = numshel + 1
534 ptshel(ie) = numshel
535 ENDIF
536 IF (nip==0) THEN
537 nvar_shell =
max(nvar_shell, 9)
538 ELSE
539 nvar_shell =
max(nvar_shell,
max(1,nip)*24)
540 ENDIF
541 iortshel = 1
542 nortshel =
max(nortshel, nortshel0 +
max(1,nip)*2)
544 ENDDO
545
546 CASE ( 'ORTH_LOC' )
547
548
549 CALL hm_get_intv(
'inishe_orth_loc_count',nb_elements,is_available,lsubmodel)
550 DO j=1,nb_elements
555
556 ie=
uel2sys(id_elem,ksysusr,numelc)
557 IF(ie == 0 ) cycle
558 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
559 numshel = numshel + 1
560 ptshel(ie) = numshel
561 ENDIF
562 IF (nip==0) THEN
563 nvar_shell =
max(nvar_shell,
max(1,npg)*9)
564 ELSE
565 nvar_shell =
max(nvar_shell,
max(1,nip)*24)
566 ENDIF
567 iortshel = 2
568 nortshel =
max(nortshel, nortshel0 +
max(1,nip)*2)
569 IF (ndir == 2) nortshel =
max(nortshel, nortshel0 +
max(1,nip)*4)
570 ENDDO ! DO j=1,nb_elements
571
572 CASE ( 'SCALE_YLD' )
573
574 CALL hm_get_intv(
'inishe_scale_yld_count',nb_elements,is_available,lsubmodel)
575 iufacyld = 1
576 DO j=1,nb_elements
580
581 ie=
uel2sys(id_elem,ksysusr,numelc)
582 IF(ie == 0 ) cycle
583 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
584 numshel = numshel + 1
585 ptshel(ie) = numshel
586 ENDIF
587 IF (nip==0) THEN
588 nvar_shell =
max(nvar_shell,
max(1,npg)*9)
589 ELSE
590 nvar_shell =
max(nvar_shell,
max(1,nip)*
max(1,npg)*6)
591 ENDIF
592 nvshell2 =
max(nvshell2,
max(1,npg)*
max(1,nip))
593 ENDDO
594
595 CASE ( 'AUX' )
596
597 CALL hm_get_intv(
'inishe_aux_count',nb_elements,is_available,lsubmodel)
598 iushell = 1
599 DO j=1,nb_elements
604
605 ie=
uel2sys(id_elem,ksysusr,numelc)
606 IF(ie == 0 ) cycle
607 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
608 numshel = numshel + 1
609 ptshel(ie) = numshel
610 ENDIF
611 IF (nip==0) THEN
612 nvar_shell =
max(nvar_shell,
max(1,npg)*9)
613 ELSE
614 nvar_shell =
max(nvar_shell,
max(1,nip)*24)
615 ENDIF
616 nushell =
max(nushell,nushell0+
max(1,npg)*
max(1,nip)*nuvar)
617 ENDDO
618
619 CASE ( 'FAIL' )
620
621 CALL hm_get_intv(
'inishe_fail_count',nb_elements,is_available,lsubmodel)
622 DO j=1,nb_elements
629
630 ie=
uel2sys(id_elem,ksysusr,numelc)
631 IF(ie == 0 ) cycle
632 IF(ie > 0 .AND. ptshel(ie)== 0 ) THEN
633 numshel = numshel + 1
634 ptshel(ie) = numshel
635 ENDIF
639 npt_max =
max(nptt,nlay)
640 nvar_shell =
max(nvar_shell,
max(1,nlay)*24)
641 nvshell1 =
max(nvshell1,npg*npt_max*5*nvar_rupt)
642 ENDDO
643
644 CASE DEFAULT
645
646 END SELECT
647
648 ENDDO
649 ENDIF
650
651
652
653
654
656 IF ( nb_inish3 > 0 ) THEN
657
658 IF (ktrieltg==0) THEN
659
660 DO ie = 1, numeltg
661 itri(ie) = ixtg(nixtg,ie)
662 END DO
663 CALL my_orders(0,work,itri,index,numeltg,1)
664 DO j = 1, numeltg
665 ie=index(j)
666 ksysusrtg(j) =ixtg(nixtg,ie)
667 ksysusrtg(numeltg+j)=ie
668 END DO
669 ktrieltg=1
670 END IF
671
673
674 numsh3n = 0
675 DO i=1,nb_inish3
676
678 . keyword2 = key,
679 . keyword3 = key2)
680
681 IF (key2 /= ' ') glob = .true.
682
683 SELECT CASE (key(1:len_trim(key)))
684
685 CASE ( 'epsp_f' )
686!-------------------
687 CALL HM_GET_INTV('inish3_epsp_f_count',NB_ELEMENTS,IS_AVAILABLE,LSUBMODEL)
688!
689
690 DO J=1,NB_ELEMENTS
691 ! Reading --- ID_ELEM, NIP, NPG, THK ---
692 CALL HM_GET_INT_ARRAY_INDEX('nb_integr',NIP,J,IS_AVAILABLE,LSUBMODEL)
693 CALL HM_GET_INT_ARRAY_INDEX('npg',NPG,J,IS_AVAILABLE,LSUBMODEL)
694 CALL HM_GET_INT_ARRAY_INDEX('shell_id',ID_ELEM,J,IS_AVAILABLE,LSUBMODEL)
695 IE = UEL2SYS(ID_ELEM,KSYSUSRTG,NUMELTG)
696 IF(IE == 0 ) CYCLE
697.AND. IF(IE > 0 PTSH3N(IE) == 0) THEN
698 NUMSH3N = NUMSH3N + 1
699 PTSH3N(IE) = NUMSH3N
700 ENDIF
701!
702 IF (NIP == 0) THEN
703 NVAR_SHELL = MAX(NVAR_SHELL, MAX(1,NPG)*9)
704 ELSE
705 NVAR_SHELL = MAX(NVAR_SHELL, MAX(1,NIP)*MAX(1,NPG)*6)
706 ENDIF
707!
708 ENDDO ! DO J=1,NB_ELEMENTS
709!-------------------
710 CASE ( 'strs_f' )
711!-------------------
712 IF ( GLOB ) THEN
713!
714 CALL HM_GET_INTV('inish3_strs_f_glob_count',NB_ELEMENTS,IS_AVAILABLE,LSUBMODEL)
715!
716 DO J=1,NB_ELEMENTS
717 ! Reading --- ID_ELEM, NIP, NPG, THK ---
718 CALL HM_GET_INT_ARRAY_INDEX('nb_integr',NIP,J,IS_AVAILABLE,LSUBMODEL)
719 CALL HM_GET_INT_ARRAY_INDEX('npg',NPG,J,IS_AVAILABLE,LSUBMODEL)
720 CALL HM_GET_INT_ARRAY_INDEX('shell_id',ID_ELEM,J,IS_AVAILABLE,LSUBMODEL)
721 IE = UEL2SYS(ID_ELEM,KSYSUSRTG,NUMELTG)
722 IF(IE == 0 ) CYCLE
723.AND. IF(IE > 0 PTSH3N(IE) == 0) THEN
724 NUMSH3N = NUMSH3N + 1
725 PTSH3N(IE) = NUMSH3N
726 ENDIF
727!
728 IF (NIP == 0) THEN
729 NVAR_SHELL = MAX(NVAR_SHELL, MAX(1,NPG)*13)
730 ELSE
731 NVAR_SHELL = MAX(NVAR_SHELL, MAX(1,NIP)*MAX(1,NPG)*8)
732 ENDIF
733!
734 ENDDO ! DO J=1,NB_ELEMENTS
735!
736!! CASE ( 'strs_f' )
737.NOT. ELSEIF ( GLOB ) THEN
738!
739 CALL HM_GET_INTV('inish3_strs_f_count',NB_ELEMENTS,IS_AVAILABLE,LSUBMODEL)
740!
741 DO J=1,NB_ELEMENTS
742 ! Reading CARD_1 --- ID_ELEM, NIP, NPG, THK ---
743 CALL HM_GET_INT_ARRAY_INDEX('nb_integr',NIP,J,IS_AVAILABLE,LSUBMODEL)
744 CALL HM_GET_INT_ARRAY_INDEX('npg',NPG,J,IS_AVAILABLE,LSUBMODEL)
745 CALL HM_GET_INT_ARRAY_INDEX('shell_id',ID_ELEM,J,IS_AVAILABLE,LSUBMODEL)
746 IE = UEL2SYS(ID_ELEM,KSYSUSRTG,NUMELTG)
747 IF(IE == 0 ) CYCLE
748.AND. IF(IE > 0 PTSH3N(IE) == 0) THEN
749 NUMSH3N = NUMSH3N + 1
750 PTSH3N(IE) = NUMSH3N
751 ENDIF
752!
753 IF (NIP == 0) THEN
754 NVAR_SHELL = MAX(NVAR_SHELL, MAX(1,NPG)*9)
755 ELSE
756 NVAR_SHELL = MAX(NVAR_SHELL, MAX(1,NIP)*MAX(1,NPG)*6)
757 ENDIF
758!
759 ENDDO ! DO J=1,NB_ELEMENTS
760!
761 ENDIF ! IF ( GLOB )
762!-------------------
763 CASE ( 'stra_f' )
764!-------------------
765 IF ( GLOB ) THEN
766 CALL HM_GET_INTV('inish3_stra_f_glob_count',NB_ELEMENTS,IS_AVAILABLE,LSUBMODEL)
767!
768 DO J=1,NB_ELEMENTS
769 CALL HM_GET_INT_ARRAY_INDEX('nb_integr',NIP,J,IS_AVAILABLE,LSUBMODEL)
770 CALL HM_GET_INT_ARRAY_INDEX('npg',NPG,J,IS_AVAILABLE,LSUBMODEL)
771 CALL HM_GET_INT_ARRAY_INDEX('shell_id',ID_ELEM,J,IS_AVAILABLE,LSUBMODEL)
772 IE = UEL2SYS(ID_ELEM,KSYSUSRTG,NUMELTG)
773 IF(IE == 0 ) CYCLE
774.AND. IF(IE > 0 PTSH3N(IE) == 0) THEN
775 NUMSH3N = NUMSH3N + 1
776 PTSH3N(IE) = NUMSH3N
777 ENDIF
778!
779 IF (NIP==0) NIP=2
780
781 NVSH_STRA = MAX(NVSH_STRA,2*MAX(1,NPG)*7)
782!! NVSH_STRA = MAX(NVSH_STRA,NIP*MAX(1,NPG)*7)
783 ENDDO ! DO J=1,NB_ELEMENTS
784!
785.NOT. ELSEIF ( GLOB ) THEN
786
787 CALL HM_GET_INTV('inish3_stra_f_count',NB_ELEMENTS,IS_AVAILABLE,LSUBMODEL)
788!
789 DO J=1,NB_ELEMENTS
790 CALL HM_GET_INT_ARRAY_INDEX('npg',NPG,J,IS_AVAILABLE,LSUBMODEL)
791 CALL HM_GET_INT_ARRAY_INDEX('shell_id',ID_ELEM,J,IS_AVAILABLE,LSUBMODEL)
792 IE = UEL2SYS(ID_ELEM,KSYSUSRTG,NUMELTG)
793 IF(IE == 0 ) CYCLE
794.AND. IF(IE > 0 PTSH3N(IE) == 0) THEN
795 NUMSH3N = NUMSH3N + 1
796 PTSH3N(IE) = NUMSH3N
797 ENDIF
798!
799 NVAR_SHELL = MAX(NVAR_SHELL, MAX(1,NPG)*8)
800 ENDDO ! DO J=1,NB_ELEMENTS
801 ENDIF ! IF ( GLOB )
802!-------------------
803 CASE ( 'thick' )
804
805 CALL hm_get_intv(
'no_elems',nb_elements,is_available,lsubmodel)
806
807 DO j=1,nb_elements
809 ie =
uel2sys(id_elem,ksysusrtg,numeltg)
810 IF(ie == 0 ) cycle
811 IF(ie > 0 .AND. ptsh3n(ie) == 0) THEN
812 numsh3n = numsh3n + 1
813 ptsh3n(ie) = numsh3n
814 ENDIF
815 ENDDO
816
817 CASE ( 'EPSP' )
818
819 CALL hm_get_intv(
'no_blocks',nb_elements,is_available,lsubmodel)
820
821 DO j=1,nb_elements
823 ie =
uel2sys(id_elem,ksysusrtg,numeltg)
824 IF(ie == 0 ) cycle
825 IF(ie > 0 .AND. ptsh3n(ie) == 0) THEN
826 numsh3n = numsh3n + 1
827 ptsh3n(ie) = numsh3n
828 ENDIF
829 ENDDO
830
831 CASE ( 'ORTHO' )
832
833 CALL hm_get_intv(
'inish3_ortho_count',nb_elements,is_available,lsubmodel)
834
835 DO j=1,nb_elements
838 ie =
uel2sys(id_elem,ksysusrtg,numeltg)
839 IF(ie == 0 ) cycle
840 IF(ie > 0 .AND. ptsh3n(ie) == 0) THEN
841 numsh3n = numsh3n + 1
842 ptsh3n(ie) = numsh3n
843 ENDIF
844
845 IF (nip==0) THEN
846 nvar_shell =
max(nvar_shell, 9)
847 ELSE
848 nvar_shell =
max(nvar_shell,
max(1,nip)*24)
849 ENDIF
850 iortshel = 1
851 nortshel =
max(nortshel, nortshel0 +
max(1,nip)*2)
853 ENDDO
854
855 CASE ( 'ORTH_LOC' )
856
857 CALL hm_get_intv(
'inish3_orth_loc_count',nb_elements,is_available,lsubmodel)
858
859
860 DO j=1,nb_elements
865 ie =
uel2sys(id_elem,ksysusrtg,numeltg)
866 IF(ie == 0 ) cycle
867 IF(ie > 0 .AND. ptsh3n(ie) == 0) THEN
868 numsh3n = numsh3n + 1
869 ptsh3n(ie) = numsh3n
870 ENDIF
871
872 IF (nip==0) THEN
873 nvar_shell =
max(nvar_shell,
max(1,npg)*9)
874 ELSE
875 nvar_shell =
max(nvar_shell,
max(1,nip)*24)
876 ENDIF
877 iortshel = 2
878 nortshel =
max(nortshel, nortshel0 +
max(1,nip)*2)
879 IF (ndir == 2) nortshel =
max(nortshel, nortshel0 +
max(1,nip)*4)
880 ENDDO
881
882 CASE ( 'SCALE_YLD' )
883
884 CALL hm_get_intv(
'inish3_scale_yld_count',nb_elements,is_available,lsubmodel)
885 iufacyld = 1
886 DO j=1,nb_elements
890 ie =
uel2sys(id_elem,ksysusrtg,numeltg)
891 IF(ie == 0 ) cycle
892 IF(ie > 0 .AND. ptsh3n(ie) == 0) THEN
893 numsh3n = numsh3n + 1
894 ptsh3n(ie) = numsh3n
895 ENDIF
896
897 IF (nip==0) THEN
898 nvar_shell =
max(nvar_shell,
max(1,npg)*9)
899 ELSE
900 nvar_shell =
max(nvar_shell,
max(1,nip)*
max(1,npg)*6)
901 ENDIF
902 nvshell2 =
max(nvshell2,
max(1,npg)*
max(1,nip))
903 ENDDO
904
905 CASE ( 'AUX' )
906
907 CALL hm_get_intv(
'inish3_aux_count',nb_elements,is_available,lsubmodel)
908 iushell = 1
909 DO j=1,nb_elements
914 ie =
uel2sys(id_elem,ksysusrtg,numeltg)
915 IF(ie == 0 ) cycle
916 IF(ie > 0 .AND. ptsh3n(ie) == 0) THEN
917 numsh3n = numsh3n + 1
918 ptsh3n(ie) = numsh3n
919 ENDIF
920
921 IF (nip==0) THEN
922 nvar_shell =
max(nvar_shell,
max(1,npg)*9)
923 ELSE
924 nvar_shell =
max(nvar_shell,
max(1,nip)*24)
925 ENDIF
926 nushell =
max(nushell,nushell0+
max(1,npg)*
max(1,nip)*nuvar)
927 ENDDO
928
929 CASE ( 'FAIL' )
930
931 CALL hm_get_intv(
'inish3_fail_count',nb_elements,is_available,lsubmodel)
932 DO j=1,nb_elements
939 ie =
uel2sys(id_elem,ksysusrtg,numeltg)
940 IF(ie == 0 ) cycle
941 IF(ie > 0 .AND. ptsh3n(ie) == 0) THEN
942 numsh3n = numsh3n + 1
943 ptsh3n(ie) = numsh3n
944 ENDIF
948 npt_max =
max(nptt,nlay)
949 nvar_shell =
max(nvar_shell,
max(1,nlay)*24)
950 nvshell1 =
max(nvshell1,npg*npt_max*5*nvar_rupt)
951 ENDDO
952
953
954 CASE DEFAULT
955
956 END SELECT
957
958 ENDDO
959 ENDIF
960
961
962
963 inishvar1 = nvar_shell + nvshell0 + npt
964 nvshell = inishvar1 + nvsh_stra
965
966
967
968
969
971
972 IF ( nb_initruss > 0 ) THEN
973
975
976 DO i=1,nb_initruss
977
979 . keyword2 = key)
980
981 SELECT CASE (key(1:len_trim(key)))
982
983 CASE ( 'FULL' )
984
985 CALL hm_get_intv(
'no_of_elems',nb_elements,is_available,lsubmodel)
986
987 numtrus = numtrus + nb_elements
988
989 nvtruss = nvtruss + 6*nb_elements
990
991 CASE DEFAULT
992
993 END SELECT
994
995 ENDDO
996 ENDIF
997
998
999
1000
1001
1003
1004 IF ( nb_inibeam > 0 ) THEN
1005
1007
1008 DO i=1,nb_inibeam
1009
1011 . keyword2 = key)
1012
1013
1014 SELECT CASE (key(1:len_trim(key)))
1015
1016
1017 CASE ( 'FULL' )
1018
1019
1020 CALL hm_get_intv(
'inibeam_count',nb_elements,is_available,lsubmodel)
1021
1022 numbeam = numbeam + nb_elements
1023
1024 DO j=1,nb_elements
1025
1028
1029 nvbeam = nvbeam + 11
1030 IF (igtyp == 3) THEN
1031 nvbeam = nvbeam + 1
1032 ELSEIF (igtyp == 18) THEN
1033 nvbeam = nvbeam + 4*nip
1034 ENDIF
1035 ENDDO
1036
1037
1038 CASE ( 'AUX' )
1039
1040
1042
1043 numbeam = numbeam + nb_elements
1044
1045 DO j=1,nb_elements
1046
1050
1051 IF (igtyp == 18) THEN
1052 nubeam =
max(nubeam,nubeam0 + nip*nuvar)
1053 ENDIF
1054 ENDDO
1055
1056 CASE DEFAULT
1057
1058 END SELECT
1059
1060 ENDDO
1061 ENDIF
1062
1063
1064
1065
1066
1067
1069
1070 IF ( nb_inispri > 0 ) THEN
1071
1073
1074 DO i=1,nb_inispri
1075
1077 . keyword2 = key)
1078
1079
1080 SELECT CASE (key(1:len_trim(key)))
1081
1082
1083 CASE ( 'FULL' )
1084
1085
1086 CALL hm_get_intv(
'size_spring',nb_elements,is_available,lsubmodel)
1087
1088 numspri = numspri + nb_elements
1089
1090 DO j=1,nb_elements
1091
1094
1095
1096 IF (igtyp == 4) THEN
1097
1098 nvspri = nvspri + 10
1099
1100 ELSEIF (igtyp == 12) THEN
1101
1102 nvspri = nvspri + 11
1103
1104 ELSEIF (igtyp == 26) THEN
1105
1106 nvspri = nvspri + 9
1107
1108 ELSEIF (igtyp == 8 .OR. igtyp == 13 .OR.
1109 . igtyp == 23 .OR. igtyp == 25) THEN
1110
1111 nvspri = nvspri + 43
1112
1113
1114 ELSEIF (igtyp == 29 .OR. igtyp == 30 .OR. igtyp == 31 .OR.
1115 . igtyp == 32 .OR. igtyp == 33 .OR. igtyp == 35 .OR.
1116 . igtyp == 36 .OR. igtyp == 44 .OR. igtyp == 45 .OR.
1117 . igtyp == 46) THEN
1118
1119 nvspri = nvspri + 16 + nuvar
1120
1121 ENDIF
1122
1123 ENDDO
1124
1125 CASE DEFAULT
1126
1127 END SELECT
1128
1129 ENDDO
1130 ENDIF
1131
1132
1133
1134
1135
1136
1138
1139 IF ( nb_iniqua > 0 ) THEN
1140
1142
1143 DO i=1,nb_iniqua
1144
1146 . keyword2 = key)
1147
1148 CALL hm_get_intv(
'no_blocks',nb_elements,is_available,lsubmodel)
1149
1150
1151 numquad = numquad + nb_elements
1152
1153 ENDDO
1154
1155 ENDIF
1156
1157
1158
1159
1160
1161
1163
1164 IF ( nb_inisphcel > 0 ) THEN
1165
1167
1168 DO i=1,nb_inisphcel
1169
1171 . keyword2 = key)
1172
1173 CALL hm_get_intv(
'no_blocks',nb_elements,is_available,lsubmodel)
1174
1175 numsphy = numsphy + nb_elements
1176
1177 SELECT CASE (key(1:len_trim(key)))
1178
1179
1180 CASE ( 'FULL' )
1181
1182
1183 DO j=1,nb_elements
1184
1186
1187 nusphcel =
max(nusphcel,nuvar)
1188 ENDDO
1189
1190 CASE DEFAULT
1191
1192 END SELECT
1193
1194 ENDDO
1195
1196 ENDIF
1197
1198
1199
1200 ENDIF
1201
1202 RETURN
1203 399 CONTINUE
1205 . msgtype=msgerror,
1206 . anmode=aninfo_blind_1)
1207
1208 RETURN
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_count(entity_type, hm_option_number)
subroutine hm_option_start(entity_type)
void my_orders(int *mode, int *iwork, int *data, int *index, int *n, int *irecl)
integer, parameter ncharkey
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)
integer function uel2sys(iu, ksysusr, numel)