42
43
44
49 USE defaults_mod
51
52
53
54#include "implicit_f.inc"
55
56
57
58#include "units_c.inc"
59#include "com04_c.inc"
60#include "param_c.inc"
61#include "tablen_c.inc"
62
63
64
65 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
66 INTEGER IGEO(NPROPGI),IG,ISKN(LISKN,*),SUB_ID,IGTYP
69 TYPE(SUBMODEL_DATA) LSUBMODEL(*)
70 TYPE(PROP_TAG_) , DIMENSION(0:MAXPROP) :: PROP_TAG
71 TYPE(SOLID_DEFAULTS_), INTENT(IN) :: DEFAULTS_SOLID
72
73
74
75 INTEGER IHBE,ISMSTR,IPLAST,ICPRE,ICSTR,NPT,NPTR,NPTS,NPTT,
76 . IINT,JCVT,IP,ISK,IREP,IDSK,ISTRAIN,NLY
78 . cvis,qa,qb,vx,vy,vz,angle,dtmin,pun,vdefmin,vdefmax,aspmax,asptet
79 INTEGER J,IHBE_DS,ISST_DS,ICONTROL_D,ICONTROL
80 LOGICAL , IS_ENCRYPTED
81 CHARACTER(LEN=NCHARTITLE)::IDTITL
82
83
84
85 DATA pun/0.1/
86
87
88
89
90
91
92 is_encrypted = .false.
93 is_available = .false.
94
95
96
97 istrain = 1
98 iplast = 2
99 jcvt = 2
100 iint = 1
101 icpre = 0
102
103
104 ihbe_ds= defaults_solid%ISOLID
105 isst_ds= defaults_solid%ISMSTR
106 icontrol_d=defaults_solid%ICONTROL
107
108 igeo( 1)=ig
109 igeo(11)=igtyp
110 geo(12) =igtyp+pun
111
112 npt = 0
113
114
115
116
118
119
120
121 CALL hm_get_intv(
'ISOLID',ihbe,is_available,lsubmodel)
122 CALL hm_get_intv(
'Ismstr',ismstr,is_available,lsubmodel)
123 CALL hm_get_intv(
'Icstr',icstr,is_available,lsubmodel)
125 CALL hm_get_intv(
'SKEW_CSID',idsk,is_available,lsubmodel)
126 CALL hm_get_intv(
'Iorth',irep,is_available,lsubmodel)
127 CALL hm_get_intv(
'Icontrol',icontrol,is_available,lsubmodel)
128
129
130
132 CALL hm_get_floatv(
'VECTOR_X',vx,is_available,lsubmodel,unitab)
133 CALL hm_get_floatv(
'VECTOR_Y',vy,is_available,lsubmodel,unitab)
134 CALL hm_get_floatv(
'VECTOR_Z',vz,is_available,lsubmodel,unitab)
135 CALL hm_get_floatv(
'MAT_BETA',angle,is_available,lsubmodel,unitab)
138 CALL hm_get_floatv('deltat_min
',DTMIN,IS_AVAILABLE,LSUBMODEL,UNITAB)
139 CALL HM_GET_FLOATV('vdef_min',VDEFMIN,IS_AVAILABLE,LSUBMODEL,UNITAB)
140 CALL HM_GET_FLOATV('vdef_max',VDEFMAX,IS_AVAILABLE,LSUBMODEL,UNITAB)
141 CALL HM_GET_FLOATV('asp_max',ASPMAX,IS_AVAILABLE,LSUBMODEL,UNITAB)
142 CALL HM_GET_FLOATV('col_min',ASPTET,IS_AVAILABLE,LSUBMODEL,UNITAB)
143
144
145
146 IF (SUB_ID /= 0)
147 . CALL SUBROTVECT(VX,VY,VZ,RTRANS,SUB_ID,LSUBMODEL)
148
149
150
151
152
153 IF (IHBE == 0) IHBE = IHBE_DS
154.AND. IF (IHBE /= 14 IHBE /= 15) THEN
155
156
157
158 CALL ANCMSG(MSGID=549,
159 . MSGTYPE=MSGERROR,
160 . ANMODE=ANINFO_BLIND_1,
161 . I1=IG,
162 . C1=IDTITL,
163 . I2=IHBE,
164 . I3=21)
165 ENDIF
166
167
168 IF(ISMSTR == 0) ISMSTR=ISST_DS
169 IF(ISMSTR == 0) ISMSTR=4
170.OR. IF (ISST_DS == -2ISMSTR<0) ISMSTR=4
171
172
173
174
175 IP = 0
176.AND. IF (IHBE == 14 ICSTR == 0) ICSTR = 10
177.AND. IF (IHBE == 14
178.AND..AND. . (ICSTR /= 1ICSTR /= 10ICSTR /= 100)) THEN
179 CALL ANCMSG(MSGID=677,
180 . MSGTYPE=MSGERROR,
181 . ANMODE=ANINFO_BLIND_1,
182 . I1=IG,
183 . C1=IDTITL,
184 . I2=ICSTR)
185 ELSE
186 SELECT CASE (ICSTR)
187 CASE(100)
188 IP = 2
189 CASE(10)
190 IP = 3
191 CASE(1)
192 IP = 1
193 END SELECT
194 END IF
195
196
197
198 NLY = 0
199 SELECT CASE (IHBE)
200 CASE(15)
201 IF (NPT == 0) NPT = 3
202.OR. IF (NPT < 1 NPT > 9) THEN
203 CALL ANCMSG(MSGID=563,
204 . MSGTYPE=MSGERROR,
205 . ANMODE=ANINFO_BLIND_1,
206 . I1=IG,
207 . C1=IDTITL,
208 . I2=NPT,
209 . I3=IHBE)
210 ENDIF
211 NLY = NPT
212 CASE(14)
213 IF (NPT == 0) NPT = 222
214 NPTR= NPT/100
215 NPTS= MOD(NPT/10,10)
216 NPTT= MOD(NPT,10)
217 SELECT CASE(ICSTR)
218 CASE(1)
219 NLY = NPTT
220 CASE(10)
221 NLY = NPTS
222 CASE(100)
223 NLY = NPTR
224 END SELECT
225.AND. IF (IHBE == 14
226.OR..OR..OR. . (NPTR < 1 NPTS < 1 NPTT < 1
227.OR..OR. . NPTR > 9 NPTS > 9 NPTT > 9)) THEN
228 CALL ANCMSG(MSGID=563,
229 . MSGTYPE=MSGERROR,
230 . ANMODE=ANINFO_BLIND_1,
231 . I1=IG,
232 . C1=IDTITL,
233 . I2=NPT,
234 . I3=IHBE)
235 ENDIF
236 END SELECT
237!
238 IF (ICONTROL==0) ICONTROL=ICONTROL_D
239 IF (ICONTROL>1) ICONTROL=0
240
241
242
243
244 IF (CVIS == ZERO) THEN
245 CVIS = EM01
246 ENDIF
247
248.AND. IF(QA == ZERO QB == ZERO) IGEO(31) = 1
249 IF (QA == ZERO) QA = ONEP1
250 IF (QB == ZERO) QB = FIVEEM2
251
252
253
254 IF (IHBE /= 14) IP = 3
255
256 ISK = 0
257 IF (IDSK/=0) THEN
258 DO J=0,NUMSKW
259 IF(IDSK==ISKN(4,J+1)) THEN
260 ISK=J+1
261 GO TO 10
262 ENDIF
263 ENDDO
264 CALL ANCMSG(MSGID=184,
265 . MSGTYPE=MSGERROR,
266 . ANMODE=ANINFO,
267 . C1='property',
268 . I1=IG,
269 . C2='property',
270 . C3=IDTITL,
271 . I2=IDSK)
272 10 CONTINUE
273 ENDIF
274 IF (IP <= 0) THEN
275 DO J=0,NUMSKW
276 IF(ISK == ISKN(4,J+1)) THEN
277 IP=-(J+1)
278 GO TO 100
279 ENDIF
280 ENDDO
281 CALL ANCMSG(MSGID=137,ANMODE=ANINFO,MSGTYPE=MSGERROR,
282 . C1='property',
283 . C2='property',
284 . I2=ISK,
285 . I1=IG,
286 . C3=IDTITL)
287100 CONTINUE
288 ENDIF
289 IGEO(2) = IP
290 IGEO(4) = NPT
291 IGEO(5) = ISMSTR
292 IGEO(6) = IREP
293 IGEO(7) = ISK
294 IGEO(9) = IPLAST-1
295 IGEO(10) = IHBE
296 IGEO(12) = ISTRAIN
297 IGEO(13) = ICPRE
298 IGEO(14) = ICSTR
299 IGEO(15) = IINT
300 IGEO(16) = JCVT-1
301 IGEO(30) = NLY
302 IGEO(97) = ICONTROL
303
304 GEO(1) = ANGLE
305 GEO(7) = VX
306 GEO(8) = VY
307 GEO(9) = VZ
308 GEO(13) = CVIS
309 GEO(14) = QA
310 GEO(15) = QB
311 GEO(172) = DTMIN
312 GEO(172) = DTMIN
313 GEO(190)= VDEFMIN
314 GEO(191)= VDEFMAX
315 GEO(192)= ASPMAX
316 GEO(193)= ASPTET
317
318.NOT. IF(IS_ENCRYPTED)THEN
319 IF(IGEO(31) == 1)THEN
320 WRITE(IOUT,1100)IG,IHBE,ISMSTR,NPT,ICSTR,
321 . CVIS,QA,QB,DTMIN,ICONTROL
322 ELSE
323 WRITE(IOUT,1000)IG,IHBE,ISMSTR,NPT,ICSTR,
324 . CVIS,QA,QB,DTMIN,ICONTROL
325 ENDIF
326 IF(ISK == 0)THEN
327 WRITE(IOUT,1002) GEO(7),GEO(8),GEO(9),IREP,ANGLE
328 ELSE
329 WRITE(IOUT,1001) IDSK,IREP,ANGLE
330 ENDIF
331 ELSE
332 WRITE(IOUT,1099) IG
333 ENDIF
334 IF((VDEFMIN+VDEFMAX+ASPMAX+ASPTET)>ZERO) THEN
335 IF (VDEFMAX==ZERO) VDEFMAX=EP10
336 IF (ASPMAX==ZERO) ASPMAX=EP10
337 WRITE(IOUT,3000) VDEFMIN,VDEFMAX,ASPMAX,ASPTET
338 END IF
339
340.AND. IF(GEO( 3)/=ZEROIGEO( 5)== 0) IGEO( 5)=NINT(GEO( 3))
341.AND. IF(GEO(39)/=ZEROIGEO( 9)== 0) IGEO( 9)=NINT(GEO(39))
342.AND. IF(GEO(171)/=ZEROIGEO(10)== 0)IGEO(10)=NINT(GEO(171))
343
344.OR. IF (GEO(16) /= ZERO GEO(17) /= ZERO) THEN
345 IGEO(33) = 1 ! ISVIS flag
346 ENDIF
347
348 IGEO(17)=1
349
350
351
352
353 PROP_TAG(IGTYP)%G_SIG = 6
354 PROP_TAG(IGTYP)%G_VOL = 1
355 PROP_TAG(IGTYP)%G_EINT = 1
356 PROP_TAG(IGTYP)%G_QVIS = 1
357 PROP_TAG(IGTYP)%L_SIG = 6
358 PROP_TAG(IGTYP)%L_EINT = 1
359 PROP_TAG(IGTYP)%L_VOL = 1
360 PROP_TAG(IGTYP)%L_QVIS = 1
361 PROP_TAG(IGTYP)%G_FILL = 1
362
363 PROP_TAG(IGTYP)%G_GAMA = 6
364 PROP_TAG(IGTYP)%L_SIGL = 6
365
366
367 PROP_TAG(IGTYP)%L_GAMA = 6
368
369
370
371 RETURN
372
373 1000 FORMAT(
374 & 5X,'orthotropic thick shell property set'/,
375 & 5X,'property set number . . . . . . . . . .=',I10/,
376 & 5X,'formulation flag. . . . . . . . . . . .=',I10/,
377 & 5X,'small strain flag . . . . . . . . . . .=',I10/,
378 & 5X,'number of integration points. . . . .=',I10/,
379 & 5X,'constant stress flag. . . . . . . . . .=',I10/,
380 & 5X,'hourglass numerical
damping . . . . . .=
',1PG20.13/,
381 & 5X,'quadratic bulk viscosity. . . . . . . .=',1PG20.13/,
382 & 5X,'linear bulk viscosity . . . . . . . . .=',1PG20.13/,
383 & 5X,'brick minimum time step................=',1PG20.13/,
384 & 5X,'solid distortion control flag . . . . .=',I10/)
385 1001 FORMAT(
386 & 5X,'orthotropic skew frame. . . . . . . . .=',I10/,
387 & 5X,'local orthotropy system formulation . .=',I10/,
388 & 5X,'orthotropic angle . . . . . . . . . . .=',1PG20.13/)
389 1002 FORMAT(
390 & 5X,'reference vector vx . . . . . . . . . .=',1PG20.13/,
391 & 5X,'reference vector vy . . . . . . . . . .=',1PG20.13/,
392 & 5X,'reference vector vz . . . . . . . . . .=',1PG20.13/,
393 & 5X,'local orthotropy system formulation . .=',I10/,
394 & 5X,'orthotropic angle . . . . . . . . . . .=',1PG20.13/)
395 1099 FORMAT(
396 & 5X,'orthotropic thick shell property set'/,
397 & 5X,'property set number . . . . . . . . . .=',I8/,
398 & 5X,'confidential data'//)
399 1100 FORMAT(
400 & 5X,'orthotropic thick shell property set'/,
401 & 5X,'property set number . . . . . . . . . .=',I10/,
402 & 5X,'formulation flag. . . . . . . . . . . .=',I10/,
403 & 5X,'small strain flag . . . . . . . . . . .=',I10/,
404 & 5X,'number of integration points. . . . .=',I10/,
405 & 5X,'constant stress flag. . . . . . . . . .=',I10/,
406 & 5X,'hourglass numerical
damping . . . . . .=
',1PG20.13/,
407 & 5X,'default
VALUE for quadratic bulk. . . .
',/,
408 & 5X,' viscosity(qa) will be used. . . .=',1PG20.13/,
409 & 5X,'except in CASE law 70 WHERE qa = 0. ',/,
410 & 5X,'default
VALUE for linear bulk
',/,
411 & 5X,' viscosity(qb) will be used . . . =',1PG20.13/,
412 & 5X,'except in CASE law 70 WHERE qb = 0. ',/,
413 & 5X,'brick minimum time step................=',1PG20.13/,
414 & 5X,'solid distortion control flag . . . . .=',I10/)
415 3000 FORMAT(
416 & 5X,'solid minimum volumetric strain........=',1PG20.13/,
417 & 5X,'solid maximum volumetric strain........=',1PG20.13/,
418 & 5X,'solid maximum aspect ratio.............=',1PG20.13/,
419 & 5X,'solid minimum collapse ratio...........=',1PG20.13/)
420
subroutine damping(nodft, nodlt, v, vr, a, ar, damp, ms, in, igrnod, dim, itask, weight, tagslv_rby, wfext)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle