40
41
42
43
47 USE defaults_mod
49
50
51
52#include "implicit_f.inc"
53
54
55
56#include "com04_c.inc"
57#include "param_c.inc"
58#include "scr03_c.inc"
59
60
61
62 INTEGER IGEO(NPROPGI,*),NSPHSOL
63 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
64 INTEGER ,DIMENSION (NUMGEO + NUMSTACK) :: NPLY,NSUB,NISUB
65 TYPE(DEFAULTS_), INTENT(IN) :: DEFAULTS
66
67
68
69 INTEGER I, IG, IGTYP, ISMSTR, NIP, J, IR1X, IR1Y, IR1Z, IREP,
70 . IR2X, IR2Y, IR2Z, ISHEAR, IRX, IROT, , IP, ISTRAIN,I8PT,
71 . ISK,ITU,IRB,IHON,IHBE,IPLAST,ITHK,IBID,IHBEOUTP,K,N,LAMINATE,
72 . IGFLU, IDS, , NSHSUP, NSHINF, FLGBADI, NBADI,UID,
73 . NSST_D, NSST_DS, NPSH, ICPRE, ICSTR ,NPTS,ISEN,ISORTH,
74 . NSPHDIR, ID_SENS,D1,D2,D3,N1,N2,N3,INTRULE,NN,NS,NIS, NUMS,
75 . NLAM,NINTS,IFRAM,CPT,INUM,ID,IS,LAMINAT
76 DATA nshell /0/, nshsup /0/, nshinf /0/
78 . fn, ft, dx, angl,pun,htest,hclos,cvis,rbid,vx,vy,vz,
79 . knot1,knot2,knot3,r5(5),dn
80 CHARACTER(LEN=NCHARTITLE) :: IDTITL
81 CHARACTER(LEN=NCHARLINE) :: KEY, SOLVERKEYWORD
82 CHARACTER(LEN=NCHARFIELD) :: STRING
83 CHARACTER :: CHROT*7,MESS*40
84 INTEGER ISH3N,ITET4,IPLAS,NPT,ISROT,NP,LAMIN,NSUB_STACK,NISUB_STACK,NPLY_STACK,NPLY_SUB,ITET4_D
85 LOGICAL IS_AVAILABLE
86
87
88
89
93
94 nsub(:) = 0
95 nisub(:) = 0
96 nply(:) = 0
97 itet4_d= defaults%SOLID%ITETRA4
98
99 is_available = .false.
100
101
102
104
105
106
107 numeltg6 = 0
108 i = 0
109 DO cpt=1,hm_numgeo
110 i = i + 1
111 key = ''
112 solverkeyword = ''
113 idtitl = ''
114
115
116
118 . option_id = ig,
119 . keyword2 = key)
120
121 SELECT CASE(key(1:len_trim(key)))
122 CASE ('TYPE0','VOID')
123
124
125
126 CASE ('TYPE1','TYPE01','SHELL','TYPE9','TYPE09','SH_ORTH','TYPE11','SH_SANDW',
127 . 'SH_FABR','TYPE16')
128
129
130
131 CALL hm_get_intv(
'Ishell',ihbe,is_available,lsubmodel)
132 CALL hm_get_intv(
'ISMSTR',ismstr,is_available,lsubmodel)
133 CALL hm_get_intv(
'ISH3',ish3n,is_available,lsubmodel)
134 CALL hm_get_intv(
'CVIS',cvis,is_available,lsubmodel)
135 IF(ish3n==31.AND.numeltg>0) numeltg6 = 1
136
137 CASE ('TYPE17','STACK')
138
139
140
141 igtyp=17
144
145 CALL hm_get_intv(
'laminateconfig' ,lamin, is_available, lsubmodel)
146
147 nsub_stack = 0
148 nisub_stack = 0
149 nply_stack = 0
150 IF (lamin > 0) THEN
151 CALL hm_get_intv(
'sublaminateidlistmax' ,nsub_stack, is_available, lsubmodel)
152 CALL hm_get_intv(
'interfacepairsize' ,nisub_stack, is_available, lsubmodel)
153
154 DO is = 1,nsub_stack
156 nply_stack = nply_stack + nply_sub
157 END DO
158
159 ELSE
160 CALL hm_get_intv(
'plyidlistmax' ,nply_stack ,is_available ,lsubmodel)
161 END IF
165
166
167
168 CASE ('TYPE6','SOL_ORTH')
169 CALL hm_get_intv(
'Itetra4',itet4,is_available,lsubmodel)
170 IF(itet4 == 0) itet4 = itet4_d
171 IF(itet4 == 1)iisrot = 1
172 CALL hm_get_intv(
'Ndir',nsphdir,is_available,lsubmodel)
173 igeo(1,i) =ig
174 igeo(37,i)=nsphdir
175 IF(nsphdir/=0)nsphsol=1
176
177
178
179 CASE ('TYPE51')
182
183 CALL hm_get_intv(
'laminateconfig' ,laminate, is_available, lsubmodel)
184 IF (laminate > 0) THEN
185 CALL hm_get_intv('sublaminateidlistmax
' ,NLAM, IS_AVAILABLE, LSUBMODEL)
186 CALL HM_GET_INTV('interfacepairsize' ,NINTS, IS_AVAILABLE, LSUBMODEL)
187 NSUB(NPROP_STACK) = NLAM
188 NISUB(NPROP_STACK) = NINTS
189 DO IS = 1,NLAM
190 CALL HM_GET_INT_ARRAY_2INDEXES('plyidlistmax',NP,IS,1,IS_AVAILABLE,LSUBMODEL)
191 NPLY(NPROP_STACK) = NPLY(NPROP_STACK) + NP
192 END DO
193 ELSE
194 CALL HM_GET_INTV('plyidlistmax' ,NP, IS_AVAILABLE, LSUBMODEL)
195 NPLY(NPROP_STACK) = NPLY(NPROP_STACK) + NP
196 END IF
197
198
199
200 CASE ('type14','solid')
201 CALL HM_GET_INTV('i_rot',ITET4,IS_AVAILABLE,LSUBMODEL)
202 IF(ITET4 == 0) ITET4 = ITET4_D
203 IF(ITET4 == 1)IISROT = 1
204 CALL HM_GET_INTV('ndir',NSPHDIR,IS_AVAILABLE,LSUBMODEL)
205 IGEO(1,I) =IG
206 IGEO(37,I)=NSPHDIR
207 IF(NSPHDIR/=0)NSPHSOL=1
208
209 CASE ('pcompp')
210 IGTYP=52
211
212 CASE ('type29','type30','type31',
213 . 'user1' ,'user2' ,'user3')
214 IISROT = 1
215
216 END SELECT
217 ENDDO
218
219
220
221
222 IF(NUMSTACK > 0) THEN
223 CALL HM_OPTION_START('/stack')
224 DO 700 I=1,NUMSTACK
225 CALL HM_OPTION_READ_KEY(LSUBMODEL,OPTION_ID = IG,KEYWORD2 = KEY)
226 NPROP_STACK = NPROP_STACK + 1
227 NUMGEOSTACK(NUMGEO + I) = NPROP_STACK
228 CALL HM_GET_INTV('laminateconfig' ,LAMINATE, IS_AVAILABLE, LSUBMODEL)
229 CALL HM_GET_INTV('laminateconfig' ,LAMIN , IS_AVAILABLE, LSUBMODEL)
230
231 IF (LAMINATE > 0) THEN
232 CALL HM_GET_INTV('sublaminateidlistmax' ,NLAM, IS_AVAILABLE, LSUBMODEL)
233 CALL HM_GET_INTV('interfacepairsize' ,NINTS, IS_AVAILABLE, LSUBMODEL)
234 NSUB(NPROP_STACK) = NLAM
235 NISUB(NPROP_STACK) = NINTS
236 DO IS = 1,NLAM
237 CALL HM_GET_INT_ARRAY_2INDEXES('plyidlistmax',NP,IS,1,IS_AVAILABLE,LSUBMODEL)
238 NPLY(NPROP_STACK) = NPLY(NPROP_STACK) + NP
239 END DO
240 ELSE
241 CALL HM_GET_INTV('plyidlistmax' ,NP, IS_AVAILABLE, LSUBMODEL)
242 NPLY(NPROP_STACK) = NPLY(NPROP_STACK) + NP
243 END IF
244
245 700 CONTINUE
246 ENDIF
247
248
249
250
251
252 IF(NPROP_STACK > 0) THEN
253 ALLOCATE(STACK_INFO(NPROP_STACK))
254 DO NUMS=1,NPROP_STACK
255 NN = NPLY(NUMS)
256 NS = NSUB(NUMS)
257 NIS = NISUB(NUMS)
258 NULLIFY(STACK_INFO(NUMS)%PID,STACK_INFO(NUMS)%MID,
259 . STACK_INFO(NUMS)%MID_IP,
260 . STACK_INFO(NUMS)%SUB,STACK_INFO(NUMS)%ISUB,
261 . STACK_INFO(NUMS)%THK,STACK_INFO(NUMS)%ANG,
262 . STACK_INFO(NUMS)%POS,STACK_INFO(NUMS)%DIR,
263 . STACK_INFO(NUMS)%THKLY,STACK_INFO(NUMS)%WEIGHT)
264
265 IF(NN > 0 ) THEN
266 ALLOCATE(STACK_INFO(NUMS)%PID(NN),STACK_INFO(NUMS)%MID(NN),
267 . STACK_INFO(NUMS)%MID_IP(NN),
268 . STACK_INFO(NUMS)%THK(NN),STACK_INFO(NUMS)%ANG(NN),
269 . STACK_INFO(NUMS)%POS(NN),STACK_INFO(NUMS)%DIR(NN),
270 . STACK_INFO(NUMS)%THKLY(NN),STACK_INFO(NUMS)%WEIGHT(NN))
271 STACK_INFO(NUMS)%PID(1:NN)= 0
272 STACK_INFO(NUMS)%MID(1:NN)= 0
273 STACK_INFO(NUMS)%MID_IP(1:NN)= 0
274 STACK_INFO(NUMS)%THK(1:NN)= ZERO
275 STACK_INFO(NUMS)%ANG(1:NN)= ZERO
276 STACK_INFO(NUMS)%POS(1:NN)= ZERO
277 STACK_INFO(NUMS)%THKLY(1:NN)= ONE
278 STACK_INFO(NUMS)%WEIGHT(1:NN)= ONE
279 ENDIF
280 IF(NS > 0)THEN
281 ALLOCATE(STACK_INFO(NUMS)%SUB(2*NS))
282 STACK_INFO(NUMS)%SUB(1:2*NS)= 0
283 ENDIF
284 IF(NIS > 0)THEN
285 ALLOCATE(STACK_INFO(NUMS)%ISUB(3*NIS))
286 STACK_INFO(NUMS)%ISUB(1:3*NIS)= 0
287 ENDIF
288 ENDDO
289 ELSE
290 ALLOCATE(STACK_INFO(0))
291 ENDIF ! NPROP_STACK
292 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_start(entity_type)
integer, parameter nchartitle
integer, parameter ncharkey
integer, parameter ncharfield
integer, parameter ncharline
integer, dimension(:), allocatable numgeostack