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