50
51
52
61 USE defaults_mod
62
63
64
65#include "implicit_f.inc"
66
67
68
69#include "units_c.inc"
70#include "com04_c.inc"
71#include "param_c.inc"
72#include "scr17_c.inc"
73
74
75
76 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
77 INTEGER IX(*),ITABM1(*),ISKN(LISKN,*),
78 . IGEO_STACK(NPROPGI,NUMSTACK + NUMPLY),IPM(NPROPMI,NUMMAT),NPC(*),
79 . IPART(LIPART1,*),IDRAPEID(*),PLY_INFO(3,NUMPLY),
80 . NPROP_STACK,NUMGEO_STACK(NUMGEO+NUMSTACK)
81 my_real geo_stack(npropg,numstack+numply), x(*), pm(npropm,nummat),pld(*),rtrans(ntransf,*)
82 TYPE(STACK_INFO_ ) , DIMENSION (1:NPROP_STACK) :: STACK_INFO
83 TYPE(SUBMODEL_DATA), DIMENSION(NSUBMOD), INTENT(IN) :: LSUBMODEL
84 TYPE(DEFAULTS_) , INTENT(IN) :: DEFAULTS
85
86
87
88 LOGICAL lFOUND
89 CHARACTER(LEN=NCHARTITLE) :: IDTITL,TITR1
90 CHARACTER MESS*40
91 INTEGER I, IG, IGTYP, J, IHBE, K, IDS, IUNIT, UID, ISORTH
92 INTEGER NSTACK, ISTACK, NUMS, IFLAGUNIT, JPID, N1, SUB_ID, JPID1, JPID2, NISUB, II, IPOS
94
95
96
97 DATA mess/'PID DEFINITION '/
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151 WRITE(iout,1000)
152
153 sub_id = 0
154 rbid=zero
155
157 DO i=1,numstack
159 isorth = 0
160 iflagunit = 0
161
162 DO iunit=1,unitab%NUNITS
163 IF (unitab%UNIT_ID(iunit) == uid) THEN
164 iflagunit = 1
165 EXIT
166 ENDIF
167 ENDDO
168
169 IF (uid /= 0 .AND. iflagunit == 0) THEN
170 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
171 . i1=ig, i2=uid,
172 . c1='STACK', c2='STACK', c3=idtitl)
173 ENDIF
174
175
176 igtyp = 52
177
178
179
180
181
182
183
184
185
186
187
188
189 CALL fretitl(idtitl,igeo_stack(npropgi-ltitr+1,i),ltitr)
190 nums = numgeo_stack(numgeo + i)
192 . geo_stack(1,i) ,igeo_stack(1,i) ,ipm ,iskn ,
193 . ig ,rtrans ,sub_id ,stack_info(nums) ,
194 . idtitl ,unitab ,lsubmodel,defaults%SHELL )
195
196
197
198
199
200
201
202 igeo_stack(17,i)=isorth
203 IF(geo_stack(39,i) /= zero .AND. igeo_stack(9,i) == 0) igeo_stack( 9,i)=nint(geo_stack(39,i))
204 IF(geo_stack(171,i) /= zero .AND. igeo_stack(10,i) == 0) igeo_stack(10,i)=nint(geo_stack(171,i))
205
206 END do
207
208
209
210
211 i = numstack
213 DO ii = 1, numply
214 CALL hm_option_read_key(lsubmodel, option_id = ig, unit_id = uid, option_titr = idtitl)
215 isorth = 0
216 iflagunit = 0
217 DO iunit=1,unitab%NUNITS
218 IF (unitab%UNIT_ID(iunit) == uid) THEN
219 iflagunit = 1
220 EXIT
221 ENDIF
222 ENDDO
223
224
226 IF (uid /=0 .AND. iflagunit == 0) THEN
227 CALL ancmsg(msgid=659,anmode=aninfo,msgtype=msgerror,
228 . i1=ig, i2=uid,
229 . c1='PLY',c2='PLY',c3=idtitl)
230 ENDIF
231 igtyp = 19
232 i = i + 1
233 ihbe = 0
234 igeo_stack( 1,i) = ig
235 istack = 1
236
237 CALL fretitl(idtitl,igeo_stack(npropgi-ltitr+1,i),ltitr)
238
239 CALL lcgeo19(geo_stack(1,i), igeo_stack(1,i), pm, ipm, unitab, iunit, istack,idrapeid, lsubmodel)
240 IF(igeo_stack(4,i) > 10) THEN
241 CALL ancmsg(msgid=1146,msgtype=msgerror,anmode=aninfo,i1=ig,c1=idtitl)
243 ENDIF
247 igeo_stack(1,i) =ig
248 ENDDO
249
250
251 nplymax =
max(nplymax,numply)
252
253 DO i = 1, numstack
254 geo_stack(100,i) = sqrt(geo_stack(38,i))
255 END DO
256
257
258 DO i = 1,numstack
259 igtyp=igeo_stack(11,i)
260 nums= numgeo_stack(numgeo + i)
261 IF(igtyp == 52) THEN
262
263 geo_stack(1,i) = zero
264
265 ipos =igeo_stack(99,i)
266 zshift = geo_stack(199, i)
267 IF(ipos == 0 )THEN
268 zshift = - half
269 ELSEIF(ipos == 3) THEN
270 zshift = -one
271 ELSEIF(ipos == 4) THEN
272 zshift = zero
273 ENDIF
274 geo_stack(199, i) = zshift
275 n1 = igeo_stack(4,i)
276 DO j =1 , n1
277
278 jpid = stack_info(nums)%PID(j)
279 lfound = .false.
280 IF(jpid > 0)THEN
281 DO k=1,numply
282 IF (igeo_stack(1,numstack + k) == jpid) THEN
283 stack_info(nums)%PID(j) = numstack + k
284
285 ids = igeo_stack(42,numstack + k)
286 igeo_stack(42 ,numstack + k) = i
287 IF(ids > 0 .AND. ids /= i) THEN
288 CALL fretitl2(titr1,igeo_stack(npropgi-ltitr+1,numstack+k),ltitr)
289 CALL ancmsg(msgid=1148,msgtype=msgerror,anmode=aninfo_blind_1,
290 . i1=igeo_stack(1,numstack + k), i2= igeo_stack(1,ids), i3= igeo_stack(1,i),
291 . c1=titr1, c2='PLY')
292 ENDIF
293
294 geo_stack(1,i) = geo_stack(1,i) + geo_stack(1,numstack + k)
295 lfound = .true.
296 EXIT
297 ENDIF
298 ENDDO
299 IF(.NOT.lfound)THEN
300 CALL fretitl2(titr1,igeo_stack(npropgi-ltitr+1,i),ltitr)
301 CALL ancmsg(msgid=1149,msgtype=msgerror,anmode=aninfo_blind_1,
302 . i1=igeo_stack(1,i), i2=jpid,
303 . c1=titr1, c2='STACK')
304 ENDIF
305 endif
306 END do
307
308 nisub = igeo_stack(44,i)
309 IF (nisub > 0) THEN
310 DO j =1 , nisub
311 jpid1 = stack_info(nums)%ISUB( 3*(j-1) + 1
312 jpid2 = stack_info(nums)%ISUB( 3*(j-1) + 2 )
313 IF (jpid1 > 0 .OR. jpid2 > 0) THEN
314 DO k=1,numply
315 nstack = 0
316 lfound=.false.
317 IF (igeo_stack(1,numstack + k) == jpid1) THEN
318 stack_info(nums)%ISUB (3*(j-1) + 1) = numstack + k
319 lfound=.true.
320 EXIT
321 ELSEIF (igeo_stack(1,numstack + k) == jpid2) THEN
322 stack_info(nums)%ISUB (3*(j-1) + 2) = numstack + k
323 lfound=.true.
324 EXIT
325 ENDIF
326 ENDDO
327 IF(.NOT.lfound)THEN
328 CALL fretitl2(titr1,igeo_stack(npropgi-ltitr+1,i),ltitr)
329 CALL ancmsg(msgid=1149,msgtype=msgerror,anmode=aninfo_blind_1,
330 . i1=igeo_stack(1,i), i2=jpid1,
331 . c1=titr1, c2='STACK')
332 CALL fretitl2(titr1,igeo_stack(npropgi-ltitr+1,i),ltitr)
333 CALL ancmsg(msgid=1149,msgtype=msgerror,anmode=aninfo_blind_1,
334 . i1=igeo_stack(1,i), i2=jpid2,
335 . c1=titr1, c2='STACK')
336 ENDIF
337 ENDIF
338 ENDDO
339 ENDIF
340
341 DO j=1,n1
342 jpid = stack_info(nums)%PID(j)
343 stack_info(nums)%THK(j) = geo_stack(1,jpid)
344 stack_info(nums)%DIR(j) = geo_stack(212,jpid)
345 stack_info(nums)%MID(j) = igeo_stack(101,jpid)
346 ENDDO
347
348 ENDIF
349 ENDDO
350
351
352
353 ids = 79
354 i = 0
355 j = 0
356
357 CALL vdouble(igeo_stack(1,1),npropgi,numstack,mess,0,rbid)
358 CALL vdouble(igeo_stack(1,numstack+1),npropgi,numply,mess,0,rbid)
359
360
361 RETURN
362
363 1000 FORMAT(//
364 & 5x,' STACK OBJECT FOR PLY-BASED SHELL ELEMENT SETS'/,
365 & 5x,' ----------------------------------------------'//)
subroutine hm_option_start(entity_type)
subroutine hm_read_stack(geo_stack, igeo_stack, ipm, iskn, prop_id, rtrans, sub_id, stack_info, titr, unitab, lsubmodel, defaults_shell)
subroutine lcgeo19(geo, igeo, pm, ipm, unitab, iunit, istack, idrapeid, lsubmodel)
integer, parameter nchartitle
integer, dimension(:,:), allocatable ply_info
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)
subroutine vdouble(list, ilist, nlist, mess, ir, rlist)