44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
68 USE multi_fvm_mod
69 USE defaults_mod
71
72
73
74#include "implicit_f.inc"
75
76
77
78#include "units_c.inc"
79#include "com04_c.inc"
80#include "param_c.inc"
81#include "tablen_c.inc"
82#include "sphcom.inc"
83
84
85
86
87 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
88 INTEGER,INTENT(IN)::IG,IGTYP,SUB_ID,ISKN(LISKN,*),IPM(NPROPMI,*)
89 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN)::TITR
91 . INTENT(IN)::rtrans(ntransf,*),pm(npropm,*)
92 TYPE(SUBMODEL_DATA),INTENT(IN)::LSUBMODEL(*)
93
94 INTEGER,INTENT(INOUT)::IGEO(*)
96 . INTENT(INOUT)::geo(*)
97 TYPE(PROP_TAG_) , DIMENSION(0:MAXPROP) :: PROP_TAG
98 TYPE(SOLID_DEFAULTS_), INTENT(IN) :: DEFAULTS_SOLID
99
100
101
102
103 INTEGER IHBE,ISMSTR,IPLAST,ICPRE,ICSTR,IINT,JCVT,
104 . NPG,NPT,NPTR,NPTS,NPTT, ISTRAIN,IET,IHBE_OLD,ID,
105 . IREP,IPOS,IHBE_DS,ISST_DS,,ICONTROL
107 . cvis,qa,qb,qh,vns1,vns2,dtmin,ashear
108 INTEGER NUML(200), NLY, NLYMAX, N, J, M1, M2, M3,ICOMPA,
109 . K, N1,IDSK, IPANG, IPTHK, IPPOS, IPMAT,IERRS,IP,ISK
111 . an, dt, thk, tmin, tmax,ang,vx,vy,vz,
112 . vdefmin,vdefmax,aspmax,asptet
113 LOGICAL IS_AVAILABLE, IS_ENCRYPTED
114
115
116
117
118 is_encrypted = .false.
119 is_available = .false.
120 nlymax= 200
121 ipang = 200
122 ipthk = ipang+nlymax
123 ippos = ipthk+nlymax
124 ipmat = 100
125
126 iplast = 2
128
129 icpre = 0
130 istrain = 1
131
132 ihbe_ds= defaults_solid%ISOLID
133 isst_ds= defaults_solid%ISMSTR
134 icontrol_d=defaults_solid%ICONTROL
135
136
137
139
140
141
142 CALL hm_get_intv(
'ISOLID',ihbe,is_available,lsubmodel)
143 CALL hm_get_intv(
'Ismstr',ismstr,is_available,lsubmodel)
144
145
147 CALL hm_get_intv(
'Icstr',icstr,is_available,lsubmodel)
148 CALL hm_get_intv(
'Inpts_R',nptr,is_available,lsubmodel)
149 CALL hm_get_intv(
'Inpts_S',npts,is_available,lsubmodel)
150 CALL hm_get_intv(
'Inpts_T',nptt,is_available,lsubmodel)
151 CALL hm_get_intv(
'Iint',iint,is_available,lsubmodel)
152 CALL hm_get_intv(
'SKEW_CSID',idsk,is_available,lsubmodel)
153 CALL hm_get_intv(
'ORTHTROP',irep,is_available,lsubmodel)
154 CALL hm_get_intv(
'Ipos',ipos,is_available,lsubmodel)
155 CALL hm_get_intv(
'Icontrol',icontrol,is_available,lsubmodel)
156
157
158
165 CALL hm_get_floatv(
'AREA_SHEAR',ashear,is_available,lsubmodel,unitab)
166 CALL hm_get_floatv(
'deltaT_min',dtmin,is_available,lsubmodel,unitab)
167 CALL hm_get_floatv(
'vdef_min',vdefmin,is_available,lsubmodel,unitab)
168 CALL hm_get_floatv(
'vdef_max',vdefmax,is_available,lsubmodel,unitab)
169 CALL hm_get_floatv(
'ASP_max',aspmax,is_available,lsubmodel,unitab)
170 CALL hm_get_floatv(
'COL_min',asptet,is_available,lsubmodel,unitab)
171
172
173
174
175
176 IF (sub_id /= 0)
177 .
CALL subrotvect(vx,vy,vz,rtrans,sub_id,lsubmodel)
178
179
180
181
182 IF (ihbe == 0) ihbe = ihbe_ds
183 IF (ihbe /= 14 .AND. ihbe /= 15 ) THEN
185 . msgtype=msgerror,
186 . anmode=aninfo_blind_1,
187 . i1=ig,
188 . c1=titr,
189 . i2=ihbe,
190 . i3=22)
191 ENDIF
192
193
194
195 IF (ihbe == 14 .OR. ihbe == 15) jcvt = 2
196
197
198
199
200 IF (ismstr == 0) ismstr=isst_ds
201 IF (ismstr == 0) ismstr=4
202 IF (isst_ds == -2.OR.ismstr<0) ismstr=4
203
204
205
206
207
208 IF (ihbe == 14 .AND. icstr == 0) icstr = 10
209 IF (icstr > 111) icstr=0
210 IF (ihbe == 14 .AND.
211 . (icstr /= 1.AND.icstr /= 10.AND.icstr /= 100)) THEN
213 . msgtype=msgerror,
214 . anmode=aninfo_blind_1,
215 . i1=ig,
216 . c1=titr,
217 . i2=icstr)
218 END IF
219
220
221
222 IF (ihbe == 15) iint = 1
223
224
225
226 nly = 0
227 ip = 0
228 SELECT CASE (ihbe)
229 CASE(15)
230
231 nly = npt
232 ip = 3
233 CASE(14)
234 SELECT CASE (icstr)
235 CASE(100)
236 nly = nptr
237 ip = 2
238 IF (npts < 2 .OR. nptt < 2 ) THEN
240 . msgtype=msgerror,
241 . anmode=aninfo_blind_1,
242 . i1=ig,
243 . c1=titr,
244 . i2=npt,
245 . i3=ihbe)
246 ENDIF
247 CASE(10)
248 nly = npts
249 ip = 3
250 IF (nptr < 2 .OR. nptt < 2 ) THEN
252 . msgtype=msgerror,
253 . anmode=aninfo_blind_1,
254 . i1=ig,
255 . c1=titr,
256 . i2=npt,
257 . i3=ihbe)
258 ENDIF
259 CASE(1)
260 nly = nptt
261 ip = 1
262 IF (npts < 2 .OR. nptr < 2 ) THEN
264 . msgtype=msgerror,
265 . anmode=aninfo_blind_1,
266 . i1=ig,
267 . c1=titr,
268 . i2=npt,
269 . i3=ihbe)
270 ENDIF
271 END SELECT
272 IF (nly ==0) THEN
273 nly =iint
274 ELSE
275 iint = 1
276 ENDIF
277 END SELECT
278 IF (nly<=0) THEN
280 . msgtype=msgerror,
281 . anmode=aninfo_blind_1,
282 . i1=ig,
283 . c1=titr)
284 ENDIF
285 IF (nly>nlymax) THEN
287 . msgtype=msgerror,
288 . anmode=aninfo_blind_1,
289 . i2=nlymax,
290 . i1=ig,
291 . c1=titr)
292 nly =nlymax
293 ENDIF
294
295 IF (icontrol==0) icontrol=icontrol_d
296 IF (icontrol>1) icontrol=0
297
298
299
300 IF (ihbe == 14) THEN
301 cvis = zero
302 ELSEIF (cvis == zero) THEN
303 cvis = em01
304 ENDIF
305
306 IF(qa == zero .AND. qb == zero) igeo(31) = 1
307 IF (qa == zero) qa = onep1
308 IF (qb == zero) qb = fiveem2
309
310 IF(ashear==zero)ashear=one
311 IF(nly==1) ashear= em10
312 an=sqrt(vx*vx+vy*vy+vz*vz)
313 IF(an < em10)THEN
314 vx=one
315 vy=zero
316 vz=zero
317 ELSE
318 an=one/an
319 vx=vx*an
320 vy=vy*an
321 vz=vz*an
322 ENDIF
323 isk = 0
324 IF (idsk/=0) THEN
326 IF(idsk==iskn(4,j+1)) THEN
327 isk=j+1
328 GO TO 10
329 ENDIF
330 ENDDO
332 . msgtype=msgerror,
333 . anmode=aninfo,
334 . c1='PROPERTY',
335 . i1=ig,
336 . c2='PROPERTY',
337 . c3=titr,
338 . i2=idsk)
339 10 CONTINUE
340 ENDIF
341 IF (ip <= 0) THEN
342 DO j=0,numskw
343 IF(isk == iskn(4,j+1)) THEN
344 ip=-(j+1)
345 GO TO 20
346 ENDIF
347 ENDDO
349 . anmode=aninfo,
350 . msgtype=msgerror,
351 . c1='PROPERTY',
352 . c2='PROPERTY',
353 . i1=ig,
354 . i2=isk,
355 . c3=titr)
35620 CONTINUE
357 ENDIF
358
359 igeo(2) = ip
360 igeo(4) = npt
361 igeo(5) = ismstr
362 igeo(6) = irep
363 igeo(7) = isk
364 igeo(9) = iplast-1
365 igeo(10) = ihbe
366 igeo(13) = icpre
367 igeo(14) = icstr
368 igeo(15) = iint
369 igeo(16) = jcvt-1
370 igeo(30) = nly
371 igeo(12) = istrain
372 igeo(97) = icontrol
373
374 geo(1) = zero
375 geo(7) = vx
376 geo(8) = vy
377 geo(9) = vz
378 geo(13) = cvis
379 geo(14) = qa
380 geo(15) = qb
381 geo(38) = ashear
382
383 geo(172) = dtmin
384 geo(190)= vdefmin
385 geo(191)= vdefmax
386 geo(192)= aspmax
387 geo(193)= asptet
388
389 thk =zero
390 DO k=1,nly
395 thk=thk+geo(ipthk+k)
396 ENDDO
397
398 ierrs = int(thk*ep02)
399 IF (iabs(ierrs-100)>1) THEN
401 . msgtype=msgerror,
402 . anmode=aninfo_blind_1,
403 . i1=ig,
404 . c1=titr)
405 ENDIF
406
407 IF (ipos>0)THEN
408 tmin = em20
409 tmax =-em20
410 DO k=1,nly
411 dt = half*geo(ipthk+k)
412 tmin =
min(tmin,geo(ippos+k)-dt)
413 tmax =
max(tmax,geo(ippos+k)+dt)
414 ENDDO
415
416 thk = abs(tmax-tmin-one)
417 IF ( tmin<-half.OR.tmax>half.OR.thk>em10) THEN
419
420 . msgtype=msgwarning,
421 . anmode=aninfo_blind_1,
422 . i1=ig,
423 . c1=titr)
424 ENDIF
425 ELSE
426
427 geo(ippos+1) = -half +half*geo(ipthk+1)
428 DO k=2,nly
429 geo(ippos+k)=geo(ippos+k-1)+
430 . half*(geo(ipthk+k)+geo(ipthk+k-1))
431 ENDDO
432 ENDIF
433
434 icompa = 0
435 DO 100 k=1,nly
436 DO j=1,nummat
437 IF(ipm(1,j)==numl(k)) THEN
438 igeo(ipmat+k)=j
439 IF(nint(pm(19,j))==14.OR.nint(pm(19,j))==24
440 . .OR.nint(pm(19,j))==25) icompa = j
441 GO TO 100
442 ENDIF
443 ENDDO
444
446 . msgtype=msgerror,
447 . anmode=aninfo_blind_1,
448 . i1=ig,
449 . c1=titr,
450 . i2=numl(k))
451 igeo(ipmat+k)=1
452 100 CONTINUE
453
454
455 IF(is_encrypted)THEN
456 WRITE(iout,1000)ig
457 ELSE
458 IF(isk==0)THEN
459 IF(igeo(31) == 1)THEN
460
461 WRITE(iout,2100)ig,ihbe,ismstr,npt,icstr,
462 . cvis,qa,qb,dtmin,nly,ipos,ashear,irep,
463 . vx,vy,vz,icontrol
464 ELSE
465 WRITE(iout,2000)ig,ihbe,ismstr,npt,icstr,
466 . cvis,qa,qb,dtmin,nly,ipos,ashear,irep,
467 . vx,vy,vz,icontrol
468 ENDIF
469 ELSE
470 IF(igeo(31) == 1)THEN
471 WRITE(iout,2101)ig,ihbe,ismstr,npt,icstr,
472 . cvis,qa,qb,dtmin,nly,ipos,ashear,irep,iskn(4,isk),icontrol
473 ELSE
474 WRITE(iout,2001)ig,ihbe,ismstr,npt,icstr,
475 . cvis,qa,qb,dtmin,nly,ipos,ashear,irep,iskn(4,isk),icontrol
476 ENDIF
477 ENDIF
478 IF((vdefmin+vdefmax+aspmax+asptet)>zero) THEN
479 IF (vdefmax==zero) vdefmax=ep10
480 IF (aspmax==zero) aspmax=ep10
481 WRITE(iout,3001) vdefmin,vdefmax,aspmax,asptet
482 END IF
483 ENDIF
484
485 DO k=1,nly
486 m1=ipang+k
487 m2=ipthk+k
488 m3=ippos+k
489 IF(.NOT.is_encrypted) WRITE(iout,3000) k,geo(m1),geo(m2),geo(m3),numl(k)
490 geo(m2)=two*geo(m2)
491 geo(m3)=two*geo(m3)
492 ENDDO
493
494 prop_tag(igtyp)%G_SIG = 6
495 prop_tag(igtyp)%L_SIG = 6
496 prop_tag(igtyp)%G_EINT = 1
497 prop_tag(igtyp)%G_QVIS = 1
498 prop_tag(igtyp)%L_EINT = 1
499 prop_tag(igtyp)%G_VOL = 1
500 prop_tag(igtyp)%L_VOL = 1
501 prop_tag(igtyp)%L_QVIS = 1
502 prop_tag(igtyp)%G_FILL = 1
503 prop_tag(igtyp)%L_STRA = 6
504 prop_tag(igtyp)%G_GAMA = 6
505 prop_tag(igtyp)%L_GAMA = 6
506
507 igeo(1) =ig
508 igeo(11)=igtyp
509 igeo(17)=1
510 geo(12)= igtyp + 0.1
511
512
513
514 RETURN
515
516 1000 FORMAT(//,
517 & 5x,'COMPOSITE LAYERED THICK SHELL PROPERTY SET'/,
518 & 5x,'------------------------------------'/,
519 & 5x,'PROPERTY SET NUMBER . . . . . . . . . .=',i10/,
520 & 5x,'CONFIDENTIAL DATA'//)
521 2000 FORMAT(//,
522 & 5x,'COMPOSITE LAYERED THICK SHELL PROPERTY SET'/,
523 & 5x,'WITH HETEROGENIOUS PROPERTY IN THICKNESS'/,
524 & 5x,'PROPERTY SET NUMBER . . . . . . . . . .=',i10
525 & 5x,'FORMULATION FLAG. . . . . . . . . . . .=',i10/,
526 & 5x,'SMALL STRAIN FLAG . . . . . . . . . . .=',i10/,
527 & 5x,'NUMBER OF INTEGRATION POINTS. . . . .=',i10/,
528 & 5x,'CONSTANT STRESS FLAG. . . . . . . . . .=',i10/,
529 & 5x,'HOURGLASS NUMERICAL DAMPING . . . . . .=',1pg20.13/,
530 & 5x,'QUADRATIC BULK VISCOSITY. . . . . . . .=',1pg20.13/,
531 & 5x,'LINEAR BULK VISCOSITY . . . . . . . . .=',1pg20.13/,
532 & 5x,'BRICK MINIMUM TIME STEP................=',1pg20.13//,
533 & 5x,'NUMBER OF LAYERS. . . . . . . . . . . .=',i10/,
534 & 5x,'POSITION INPUT FLAG . . . . . . . . . .=',i10/,
535 & 5x,'SHEAR AREA REDUCTION FACTOR . . . . . .=',1pg20.13/,
536 & 5x,'LOCAL ORTHOTROPY SYSTEM FORMULATION . .=',i10/,
537 & 5x,'X COMPONENT OF DIR 1 OF ORTHOTROPY. . .=',1pg20.13/,
538 & 5x,'Y COMPONENT OF DIR 1 OF ORTHOTROPY. . .=',1pg20.13/,
539 & 5x,'Z COMPONENT OF DIR 1 OF ORTHOTROPY. . .=',1pg20.13/,
540 & 5x,'SOLID DISTORTION CONTROL FLAG . . . . .=',i10/)
541 2001 FORMAT(//,
542 & 5x,'COMPOSITE LAYERED THICK SHELL PROPERTY SET'/,
543 & 5x,'WITH HETEROGENIOUS PROPERTY IN THICKNESS'/,
544 & 5x,'PROPERTY SET NUMBER . . . . . . . . . .=',i10/,
545 & 5x,'FORMULATION FLAG. . . . . . . . . . . .=',i10/,
546 & 5x,'SMALL STRAIN FLAG . . . . . . . . . . .=',i10/,
547 & 5x,'NUMBER OF INTEGRATION POINTS. . . . .=',i10/,
548 & 5x,'CONSTANT STRESS FLAG. . . . . . . . . .=',i10/,
549 & 5x,'HOURGLASS NUMERICAL DAMPING . . . . . .=',1pg20.13/,
550 & 5x,'QUADRATIC BULK VISCOSITY. . . . . . . .=',1pg20.13/,
551 & 5x,'LINEAR BULK VISCOSITY . . . . . . . . .=',1pg20.13/,
552 & 5x,'BRICK MINIMUM TIME STEP................=',1pg20.13/,
553 & 5x,'NUMBER OF LAYERS. . . . . . . . . . . .=',i10/,
554 & 5x,'POSITION INPUT FLAG . . . . . . . . . .=',i10/,
555 & 5x,'SHEAR AREA REDUCTION FACTOR . . . . . .=',1pg20.13/,
556 & 5x,'LOCAL ORTHOTROPY SYSTEM FORMULATION . .=',i10/,
557 & 5x,'SKEW OF THE FIRST ORTHOTROPY DIRECTION.=',i10/,
558 & 5x,'SOLID DISTORTION CONTROL FLAG . . . . .=',i10/)
559 2100 FORMAT(//,
560 & 5x,'COMPOSITE LAYERED THICK SHELL PROPERTY SET'/,
561 & 5x,'WITH HETEROGENIOUS PROPERTY IN THICKNESS'/,
562 & 5x,'PROPERTY SET NUMBER . . . . . . . . . .=',i10/,
563 & 5x,'FORMULATION FLAG. . . . . . . . . . . .=',i10/,
564 & 5x,'SMALL STRAIN FLAG . . . . . . . . . . .=',i10/,
565 & 5x,'NUMBER OF INTEGRATION POINTS. . . . .=',i10/,
566 & 5x,'CONSTANT STRESS FLAG. . . . . . . . . .=',i10/,
567 & 5x,'HOURGLASS NUMERICAL DAMPING . . . . . .=',1pg20.13/,
568 & 5x,'DEFAULT VALUE FOR QUADRATIC BULK. . . . ',/,
569 & 5x,' VISCOSITY (QA) WILL BE USED. . . .=',1pg20.13/,
570 & 5x,'EXCEPT IN CASE LAW 70 WHERE QA = 0. ',/,
571 & 5x,'DEFAULT VALUE FOR LINEAR BULK . . . . . ',/,
572 & 5x,' VISCOSITY (QB) WILL BE USED . . . =',1pg20.13/,
573 & 5x,'EXCEPT IN CASE LAW 70 WHERE QB = 0. ',/,
574 & 5x,'BRICK MINIMUM TIME STEP................=',1pg20.13//,
575 & 5x,'NUMBER OF LAYERS. . . . . . . . . . . .=',i10/,
576 & 5x,'POSITION INPUT FLAG . . . . . . . . . .=',i10/,
577 & 5x,'SHEAR AREA REDUCTION FACTOR . . . . . .=',1pg20.13/,
578 & 5x,'local orthotropy system formulation . .=',I10/,
579 & 5X,'x component of dir 1 of orthotropy. . .=',1pg20.13/,
580 & 5x,'Y COMPONENT OF DIR 1 OF ORTHOTROPY. . .=',1pg20.13/,
581 & 5x,'Z COMPONENT OF DIR 1 OF ORTHOTROPY. . .=',1pg20.13/,
582 & 5x,'SOLID DISTORTION CONTROL FLAG . . . . .=',i10/)
583 2101 FORMAT(//,
584 & 5x,'COMPOSITE LAYERED THICK SHELL PROPERTY SET'/,
585 & 5x,'WITH HETEROGENIOUS PROPERTY IN THICKNESS'/,
586 & 5x,'PROPERTY SET NUMBER . . . . . . . . . .=',i10/,
587 & 5x,'FORMULATION FLAG. . . . . . . . . . . .=',i10/,
588 & 5x,'SMALL STRAIN FLAG . . . . . . . . . . .=',i10/,
589 & 5x,'NUMBER OF INTEGRATION POINTS. . . . .=',i10/,
590 & 5x,'CONSTANT STRESS FLAG. . . . . . . . . .=',i10/,
591 & 5x,'HOURGLASS NUMERICAL DAMPING . . . . . .=',1pg20.13/,
592 & 5x,'DEFAULT VALUE FOR QUADRATIC BULK. . . . ',/,
593 & 5x,' VISCOSITY (QA) WILL BE USED. . . .=',1pg20.13/,
594 & 5x,'EXCEPT IN CASE LAW 70 WHERE QA = 0. ',/,
595 & 5x,'DEFAULT VALUE FOR LINEAR BULK . . . . . ',/,
596 & 5x,' VISCOSITY (QB) WILL BE USED . . . =',1pg20.13/,
597 & 5x,'EXCEPT IN CASE LAW 70 WHERE QB = 0. ',/,
598 & 5x,'BRICK MINIMUM TIME STEP................=',1pg20.13/,
599 & 5x,'NUMBER OF LAYERS. . . . . . . . . . . .=',i10/,
600 & 5x,'POSITION INPUT FLAG . . . . . . . . . .=',i10/,
601 & 5x,'SHEAR AREA REDUCTION FACTOR . . . . . .=',1pg20.13/,
602 & 5x,'LOCAL ORTHOTROPY SYSTEM FORMULATION . .=',i10/,
603 & 5x,'SKEW OF THE FIRST ORTHOTROPY DIRECTION.=',i10/,
604 & 5x,'SOLID DISTORTION CONTROL FLAG . . . . .=',i10/)
605 3000 FORMAT(
606 & 5x,'LAYER :',i3/,
607 & 5x,' ANGLE (DIR 1,PROJ(DIR 1 /TSHELL) .=',1pg20.13/,
608 & 5x,' THICKNESS (PER TOTAL THICKNESS). .=',1pg20.13/,
609 & 5x,' POSITION ([-0.5,+0.5]). . . . . .=',1pg20.13/,
610 & 5x,' MATERIAL NUMBER . . . . . . . . . =',i10/)
611 3001 FORMAT(
612 & 5x,'SOLID MINIMUM VOLUMETRIC STRAIN........=',1pg20.13/,
613 & 5x,'SOLID MAXIMUM VOLUMETRIC STRAIN........=',1pg20.13/,
614 & 5x,'SOLID MAXIMUM ASPECT RATIO.............=',1pg20.13/,
615 & 5x,'SOLID MINIMUM COLLAPSE RATIO...........=',1pg20.13/)
616
617
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
integer, parameter nchartitle
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 subrotvect(x, y, z, rtrans, sub_id, lsubmodel)