44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
77 USE multi_fvm_mod
78 USE defaults_mod
80
81
82
83#include "implicit_f.inc"
84
85
86
87#include "units_c.inc"
88#include "com01_c.inc"
89#include "com04_c.inc"
90#include "param_c.inc"
91#include "scr17_c.inc"
92#include "sphcom.inc"
93#include "tablen_c.inc"
94#include "tabsiz_c.inc"
95
96
97
98 INTEGER,INTENT(INOUT) :: IGEO(NPROPGI)
99 INTEGER,INTENT(IN) :: IG
100 INTEGER,INTENT(IN) :: ISKN(LISKN,SISKWN/LISKN)
101 INTEGER,INTENT(IN) :: IPART(LIPART1,NPART+NTHPART)
102 INTEGER,INTENT(IN) :: IGTYP
103 INTEGER,INTENT(IN) :: SUB_ID
104 INTEGER,INTENT(IN) :: SUB_INDEX
105
106 my_real,
INTENT(INOUT) :: geo(npropg)
107 my_real,
INTENT(IN) :: rtrans(ntransf,nrtrans)
108
109 CHARACTER(LEN=NCHARTITLE),INTENT(IN) :: IDTITL
110
111 TYPE(PROP_TAG_) , DIMENSION(0:MAXPROP),INTENT(INOUT) :: PROP_TAG
112 TYPE(MULTI_FVM_STRUCT),INTENT(IN) :: MULTI_FVM
113 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(NSUBMOD)
114 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
115 TYPE(SOLID_DEFAULTS_), INTENT(IN) :: DEFAULTS_SOLID
116
117
118
119 INTEGER IHBE,ISMSTR,IPLAS,ICPRE,ICSTR,IINT,IP,ISK,IREP,JCVT,
120 . NPT,NPTR,NPTS,NPTT,ITET4,IET,ISTR,IHBE_OLD,ITET10,
121 . ISHEAR,ISORTH,ICONTROL_D,ICONTROL
123 . cvis,qa,qb,qh,vx,vy,vz,angle,dtmin,px,py,pz,vn,
124 . vdefmin,vdefmax,aspmax,asptet
125 INTEGER K,NSPHDIR,ID_PARTSPH,IPARTSPH,J
126 INTEGER IHBE_DS,ISST_DS,IPLA_DS,IFRAME_DS, IMAS_DS,
127 . ITET4_D,ITET10_D,ICPRE_D
128 LOGICAL IS_AVAILABLE, IS_ENCRYPTED
129
130 is_encrypted = .false.
131 is_available = .false.
132
133 isorth=1
134 ismstr=0
135 ihbe=0
136
137 ihbe_ds= defaults_solid%ISOLID
138 isst_ds= defaults_solid%ISMSTR
139 icpre_d= defaults_solid%ICPRE
140 itet4_d= defaults_solid%ITETRA4
141 itet10_d= defaults_solid%ITETRA10
142 iframe_ds= defaults_solid%IFRAME
143 icontrol_d=defaults_solid%ICONTROL
144
145
146 geo(3)=ismstr
147
148 igeo( 1)=ig
149 igeo(10)=ihbe
150 igeo(11)=igtyp
151 geo(12) =igtyp+em01
152 geo(171)=ihbe
153
154 icstr = 0
155
156
157
159
160
161
162 CALL hm_get_intv(
'ISOLID',ihbe,is_available,lsubmodel)
163 CALL hm_get_intv(
'Ismstr',ismstr,is_available,lsubmodel)
164
165
166
167
168 CALL hm_get_intv(
'Itetra10',itet10,is_available,lsubmodel)
169 CALL hm_get_intv(
'Itetra4',itet4,is_available,lsubmodel)
170 CALL hm_get_intv(
'Icpre',icpre,is_available,lsubmodel)
171 CALL hm_get_intv(
'Inpts_R',nptr,is_available,lsubmodel)
172 CALL hm_get_intv(
'Inpts_S',npts,is_available,lsubmodel)
173 CALL hm_get_intv(
'Inpts_T',nptt,is_available,lsubmodel)
174 CALL hm_get_intv(
'SKEW_CSID',isk,is_available,lsubmodel)
175 CALL hm_get_intv(
'REFPLANE',ip,is_available,lsubmodel)
176 CALL hm_get_intv(
'Iframe',jcvt,is_available,lsubmodel)
177 CALL hm_get_intv(
'ORTHTROP',irep,is_available,lsubmodel)
178
179
180 CALL hm_get_intv(
'Ndir',nsphdir,is_available,lsubmodel)
181 CALL hm_get_intv(
'SPHPART_ID',id_partsph,is_available,lsubmodel)
182 CALL hm_get_intv(
'Icontrol',icontrol,is_available,lsubmodel)
183
184
185
190 CALL hm_get_floatv(
'MAT_BETA',angle,is_available,lsubmodel,unitab)
194 CALL hm_get_floatv(
'deltaT_min',dtmin,is_available,lsubmodel,unitab)
196 CALL hm_get_floatv(
'vdef_max',vdefmax,is_available,lsubmodel,unitab)
197 CALL hm_get_floatv(
'ASP_max',aspmax,is_available,lsubmodel,unitab)
202
203 IF(isk == 0 .AND. sub_index /= 0 ) isk = lsubmodel(sub_index)%SKEW
204
206 iplas = 2
207 iet = 0
208
209 IF(itet4 == 0) itet4 = itet4_d
210 IF(itet10 == 0) itet10 = itet10_d
211
212
213 IF (sub_id /= 0)
214 .
CALL subrotvect(vx,vy,vz,rtrans,sub_id,lsubmodel)
215
216 ipartsph=0
217 IF(id_partsph > 0) THEN
218 DO j=1,npart
219 IF(ipart(4,j)==id_partsph) THEN
220 ipartsph=j
221 GOTO 175
222 ENDIF
223 ENDDO
225 . msgtype=msgerror,
226 . anmode=aninfo,
227 . i1=ig,
228 . c1=idtitl,
229 . i2=id_partsph)
231175 CONTINUE
232 END IF
233
234
235
236
237 iint = 1
238
239 IF (ihbe == 18 ) iint = 2
240 cvis = zero
241
242
243
244 IF (ihbe == 0) ihbe = ihbe_ds
245
246
247 IF(ihbe == 101) THEN
248 ihbe=1
249 jcvt=2
250 END IF
251 IF(ihbe == 102) THEN
252 ihbe=2
253 jcvt=2
254 END IF
255 IF(ihbe == 104) THEN
256 ihbe=24
257 jcvt=2
258 END IF
259 IF(ihbe == 112) THEN
260 ihbe=12
261 jcvt=2
262 END IF
263
264 IF(n2d>0 .AND. ihbe/=0 .AND. ihbe/=2.AND. ihbe/=17)THEN
265 ihbe_old=ihbe
266 ihbe=0
268 . msgtype=msgwarning,
269 . anmode=aninfo_blind_2,
270 . i1=ig,
271 . c1=idtitl,
272 . i2=ihbe_old,
273 . i3=ihbe)
274 ELSEIF (ihbe/= 1.AND.ihbe/= 2.AND.ihbe/=14.AND.ihbe/= 24
275 . .AND.ihbe/= 17.AND.ihbe/= 18) THEN
277 . msgtype=msgwarning,
278 . anmode=aninfo_blind_1,
279 . i1=ig,
280 . c1=idtitl,
281 . i2=ihbe)
282 ihbe=1
283 ENDIF
284
285
286
287 IF (jcvt == 0) jcvt = iframe_ds
288 IF (ihbe == 14.OR.ihbe == 18) jcvt = 2
289 IF (ihbe == 24) jcvt = 2
290 IF (iframe_ds == -2.OR.jcvt<0) jcvt = -1
291
292
293
294 IF(ismstr == 0) ismstr=isst_ds
295 IF(ismstr == 0.AND.ihbe /= 18) ismstr=4
296 IF (isst_ds == -2) ismstr = -1
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320 IF (icpre == 0) icpre = icpre_d
321 IF((n2d > 0 .AND. ihbe == 17) ) THEN
322 IF(icpre/=1 .AND. icpre/=2) icpre=0
323
324 IF(n2d == 1 .AND. ihbe == 17) icpre=0
325 ELSE
326 IF (ihbe /= 14 .AND. ihbe /= 24 .AND. ihbe /= 17 .AND. ihbe /= 18) icpre = 0
327 IF (ihbe == 17 ) THEN
328 IF (icpre == 0 ) THEN
329 icpre = 1
330 ELSEIF(icpre == 3 ) THEN
331 icpre = 0
332 ENDIF
333 ENDIF
334 IF (icpre == 3 .AND. ihbe /= 18) icpre =0
336 icstr = 0
337 IF (icpre_d == -2) icpre = -1
338
339
340
341 SELECT CASE (ihbe)
342 CASE(14,16)
343 IF(nptr == 0) nptr = 2
344 IF(npts == 0) npts = 2
345 IF(nptt == 0) nptt = 2
346 npt=nptr*100+npts*10+nptt
347 IF (ihbe == 14 .AND.
348 . (nptr < 1 .OR. npts < 1 .OR. nptt < 1 .OR.
349 . nptr > 9 .OR. npts > 9 .OR. nptt > 9)) THEN
351 . msgtype=msgerror,
352 . anmode=aninfo_blind_1,
353 . i1=ig,
354 . c1=idtitl,
355 . i2=npt,
356 . i3=ihbe)
357 ELSEIF (ihbe == 16 .AND.
358 . (nptr < 1 .OR. npts < 1 .OR. nptt < 1 .OR.
359 . nptr > 3 .OR. npts > 9 .OR. nptt > 3)) THEN
361 . msgtype=msgerror,
362 . anmode=aninfo_blind_1,
363 . i1=ig,
364 . c1=idtitl,
365 . i2=npt,
366 . i3=ihbe)
367 ENDIF
368 CASE(1,2,24)
369 npt = 1
370 CASE(12,13,17,18)
371 npt = 8
372 END SELECT
373
374 IF((n2d > 0 .AND. ihbe == 17) .OR.
375 . (n2d == 1 .AND. ihbe == 22)) THEN
376 npt = 4
377 ENDIF
378
379
380
381
382 IF(qa == zero .AND. qb == zero) igeo(31) = 1
383 IF (qa == zero) qa = onep1
384 IF (qb == zero) qb = fiveem2
385 IF (qh == zero) qh = em01
386
387
388
389 IF (ihbe == 24) THEN
390 IF (cvis == zero) cvis = em01
391 geo(13) = cvis
392 qh = zero
393 iint = iet
394 ELSEIF (ihbe==1.OR.ihbe==2) THEN
395 geo(13) = qh
396 ELSE
397 qh = zero
398 geo(13) = zero
399 ENDIF
400
401
402
403
404 IF (ip == 23 .OR. ip == 24) THEN
405
406 vn = vx*vx+vy*vy+vz*vz
407 IF (vn<em20) THEN
409 . msgtype=msgerror,
410 . anmode=aninfo_blind_1,
411 . i1=ig,
412 . c1=idtitl,
413 . i2=ip)
414 ENDIF
415 END IF
416 IF (ip == 0) THEN
418 IF(isk == iskn(4,k+1)) THEN
419 ip=-(k+1)
420 isk=k+1
421 GO TO 100
422 ENDIF
423 ENDDO
424 CALL ancmsg(msgid=137,anmode=aninfo,msgtype=msgerror,
425 . c1='PROPERTY',
426 . c2='PROPERTY',
427 . i1=ig,i2=isk,c3=idtitl)
428100 CONTINUE
429 ENDIF
430
431
432 IF (icontrol==0) icontrol=icontrol_d
433 IF (icontrol>1) icontrol=0
434
435 igeo(2) = ip
436 igeo(4) = npt
437 igeo(5) = ismstr
438 igeo(6) = irep
439 igeo(9) = iplas-1
440 igeo(10) = ihbe
442 igeo(13) = icpre
443 igeo(14) = icstr
444 igeo(15) = iint
445 igeo(16) = jcvt-1
446 igeo(37) = nsphdir
447 igeo(38) = ipartsph
448 igeo(97) = icontrol
449
450 geo(1) = angle
451 geo(7) = vx
452 geo(8) = vy
453 geo(9) = vz
454 geo(14) = qa
455 geo(15) = qb
456 geo(172)= dtmin
457 geo(33) = px
458 geo(34) = py
459 geo(35) = pz
460 geo(190)= vdefmin
461 geo(191)= vdefmax
462 geo(192)= aspmax
463 geo(193)= asptet
464
465 IF(.NOT. is_encrypted)THEN
466 IF(igeo(31) == 1)THEN
467 WRITE(iout,1100)ig,ihbe,ismstr,iplas,npt,jcvt,itet4,itet10,
468 . icpre,icstr,cvis,qa,qb,qh,dtmin,irep,
istr,icontrol
469 ELSE
470 WRITE(iout,1000)ig,ihbe,ismstr,iplas,npt,jcvt,itet4,itet10,
471 . icpre,icstr,cvis,qa,qb,qh,dtmin,irep,
istr,icontrol
472 ENDIF
473 IF((vdefmin+vdefmax+aspmax+asptet)>zero) THEN
474 IF (vdefmax==zero) vdefmax=ep10
475 IF (aspmax==zero) aspmax=ep10
476 WRITE(iout,3000) vdefmin,vdefmax,aspmax,asptet
477 END IF
478 IF(ip < 0) THEN
479 WRITE(iout,1001) iskn(4,isk)
480 ELSEIF(ip == 1 .OR. ip == 2 .OR. ip == 3) THEN
481 WRITE(iout,1002) ip,angle
482 ELSEIF(ip == 11 .OR. ip == 12 .OR. ip == 13) THEN
483 WRITE(iout,1003) ip,vx,vy,vz
484 ELSEIF(ip == 20) THEN
485 WRITE(iout,2001) ip
486 ELSEIF(ip == 21) THEN
487 WRITE(iout,2002) ip,px,py,pz
488 ELSEIF(ip == 23) THEN
489 WRITE(iout,2003) ip,angle,vx,vy,vz
490 ELSEIF(ip == 24) THEN
491 WRITE(iout,2004) ip,px,py,pz,vx,vy,vz
492 ENDIF
493 IF (iet > 0) WRITE(iout,2010) iet
494 IF(nsphdir/=0)WRITE(iout,2020)nsphdir, id_partsph
495 ELSE
496 WRITE(iout,1099) ig
497 ENDIF
498
499 IF (itet4 == 1000) itet4 = 0
500 igeo(20) = itet4
501 IF (itet10 == 1000) itet10 = 0
502 igeo(50) = itet10
503
504 prop_tag(igtyp)%G_SIG = 6
505 prop_tag(igtyp)%L_SIG = 6
506 prop_tag(igtyp)%G_EINT = 1
507 prop_tag(igtyp)%G_QVIS = 1
508 prop_tag(igtyp)%L_EINT = 1
509 prop_tag(igtyp)%G_VOL = 1
510 prop_tag(igtyp)%L_VOL = 1
511 prop_tag(igtyp)%L_QVIS = 1
512 IF (multi_fvm%IS_USED) THEN
513 prop_tag(igtyp)%G_MOM = 3
514 ENDIF
515
516 prop_tag(igtyp)%G_FILL = 1
517 prop_tag(igtyp)%L_STRA = 6
518 IF (n2d /= 0 .AND. multi_fvm%IS_USED) THEN
519
520 prop_tag(igtyp)%G_AREA = 1
521 ENDIF
522 prop_tag(igtyp)%G_GAMA = 6
523 prop_tag(igtyp)%L_SIGL = 6
524 IF (geo(16) /= zero .OR. geo(17) /= zero) THEN
525 igeo(33) = 1
526 ENDIF
527
528
529 igeo(1) =ig
530 igeo(11)=igtyp
531 igeo(17)=isorth
532 IF(geo( 3)/=zero.AND.igeo( 5)== 0) igeo( 5)=nint(geo( 3))
533 IF(geo(39)/=zero.AND.igeo( 9)== 0) igeo( 9)=nint(geo(39))
534 IF(geo(171)/=zero.AND.igeo(10)== 0) igeo(10)=nint(geo(171))
535
536
537 RETURN
538
539 1000 FORMAT(
540 & 5x,'ORTHOTROPIC SOLID PROPERTY SET'/,
541 & 5x,'PROPERTY SET NUMBER . . . . . . . . . .=',i10/,
542 & 5x,'SOLID FORMULATION FLAG. . . . . . . . .=',i10/,
543 & 5x,'SMALL STRAIN FLAG . . . . . . . . . . .=',i10/,
544 & 5x,'SOLID STRESS PLASTICITY FLAG. . . . . .=',i10/,
545 & 5x,'NUMBER OF INTEGRATION POINTS. . . . .=',i10/,
546 & 5x,'COROTATIONAL SYSTEM FLAG. . . . . . . .=',i10/,
547 & 5x,'TETRA4 FORMULATION FLAG. . . . . . . .=',i10/,
548 & 5x,'TETRA10 FORMULATION FLAG . . . . . . .=',i10/,
549 & 5x,'CONSTANT PRESSURE FLAG. . . . . . . . .=',i10/,
550 & 5x,'CONSTANT STRESS FLAG. . . . . . . . . .=',i10/,
551 & 5x,'HOURGLASS NUMERICAL DAMPING . . . . . .=',1pg20.13/,
552 & 5x,'QUADRATIC BULK VISCOSITY. . . . . . . .=',1pg20.13/,
553 & 5x,'LINEAR BULK VISCOSITY . . . . . . . . .=',1pg20.13/,
554 & 5x,'HOURGLASS VISCOSITY . . . . . . . . . .=',1pg20.13/,
555 & 5x,'BRICK MINIMUM TIME STEP................=',1pg20.13/,
556 & 5x,'LOCAL ORTHOTROPY SYSTEM FORMULATION . .=',i10/,
557 & 5x,'POST PROCESSING STRAIN FLAG . . . . . .=',i10/,
558 & 5x,'SOLID DISTORTION CONTROL FLAG . . . . .=',i10/)
559 1099 FORMAT(
560 & 5x,'ORTHOTROPIC SOLID PROPERTY SET'/,
561 & 5x,'PROPERTY SET NUMBER . . . . . . . . . .=',i8/,
562 & 5x,'CONFIDENTIAL DATA'//)
563 1100 FORMAT(
564 & 5x,'ORTHOTROPIC SOLID PROPERTY SET'/,
565 & 5x,'PROPERTY SET NUMBER . . . . . . . . . .=',i10/,
566 & 5x,'SOLID FORMULATION FLAG. . . . . . . . .=',i10/,
567 & 5x,'SMALL STRAIN FLAG . . . . . . . . . . .=',i10/,
568 & 5x,'SOLID STRESS PLASTICITY FLAG. . . . . .=',i10/,
569 & 5x,'NUMBER OF INTEGRATION POINTS. . . . .=',i10/,
570 & 5x,'COROTATIONAL SYSTEM FLAG. . . . . . . .=',i10/,
571 & 5x,'tetra4 formulation flag. . . . . . . .=',I10/,
572 & 5X,'tetra10 formulation flag . . . . . . .=',I10/,
573 & 5X,'constant pressure flag. . . . . . . . .=',i10/,
574 & 5x,'CONSTANT STRESS FLAG. . . . . . . . . .=',i10/,
575 & 5x,'HOURGLASS NUMERICAL DAMPING . . . . . .=',1pg20.13/,
576 & 5x,'DEFAULT VALUE FOR QUADRATIC BULK. . . . ',/,
577 & 5x,' VISCOSITY (QA) WILL BE USED. . . .=',1pg20.13/,
578 & 5x,'EXCEPT IN CASE LAW 70 WHERE QA = 0. ',/,
579 & 5x,'DEFAULT VALUE FOR LINEAR BULK . . . . . ',/,
580 & 5x,' VISCOSITY (QB) WILL BE USED . . . =',1pg20.13/,
581 & 5x,'EXCEPT IN CASE LAW 70 WHERE QB = 0. ',/,
582 & 5x,'HOURGLASS VISCOSITY . . . . . . . . . .=',1pg20.13/,
583 & 5x,'BRICK MINIMUM TIME STEP................=',1pg20.13/,
584 & 5x,'LOCAL ORTHOTROPY SYSTEM FORMULATION . .=',i10/,
585 & 5x,'POST PROCESSING STRAIN FLAG . . . . . .=',i10/,
586 & 5x,'SOLID DISTORTION CONTROL FLAG . . . . .=',i10/)
587 1001 FORMAT(
588 & 5x,'ORTHOTROPIC SKEW FRAME. . . . . . . . .=',i10)
589 1002 FORMAT(
590 & 5x,'ORTHOTROPIC PLANE NUMBER. . . . . . . .=',i10/,
591 & 5x,' 1=(R,S) 2=(S,T) 3=(T,R) ',/,
592 & 5x,'ORTHOTROPIC ANGLE . . . . . . . . . . .=',1pg20.13)
593 1003 FORMAT(
594 & 5x,'ORTHOTROPIC PLANE NUMBER. . . . . . . .=',i10/,
595 & 5x,' 1=(R,S) 2=(S,T) 3=(T,R) ',/,
596 & 5x,'REFERENCE VECTOR VX . . . . . . . . . .=',1pg20.13/,
597 & 5x,'REFERENCE VECTOR VY . . . . . . . . . .=',1pg20.13/,
598 & 5x,'REFERENCE VECTOR VZ . . . . . . . . . .=',1pg20.13)
599 2010 FORMAT(
600 & 5x,'HOURGLASS MODULUS FLAG. . . . . . . . .=',i10/)
601 2020 FORMAT(
602 & 5x,'NUMBER OF SPH PARTICLES PER DIRECTION .=',i10/,
603 & 5x,'CORRESPONDING PART FOR SPH PARTICLES. .=',i10/)
604 2001 FORMAT(
605 & 5x,'ORTHOTROPIC DIRECTIONS BY ELEMENT CONNECTIVITY,IP='i10)
606 2002 FORMAT(
607 & 5x,'ORTHOTROPIC DIRECTION FLAG IP. . . . . =',i10/,
608 & 5x,'REFERENCE POINT PX . . . . . . . . . . =',1pg20.13/,
609 & 5x,'REFERENCE POINT PY . . . . . . . . . . =',1pg20.13/,
610 & 5x,'REFERENCE POINT PZ . . . . . . . . . . =',1pg20.13)
611 2003 FORMAT(
612 & 5x,'orthotropic direction flag ip . . . . .=',I10/,
613 & 5X,'orthotropic angle . . . . . . . . . . .=',1PG20.13/,
614 & 5X,'reference vector vx . . . . . . . . . .=',1PG20.13/,
615 & 5X,'reference vector vy . . . . . . . . . .=',1PG20.13/,
616 & 5X,'reference vector vz . . . . . . . . . .=',1PG20.13)
617 2004 FORMAT(
618 & 5X,'orthotropic direction flag ip. . . . . =',I10/,
619 & 5X,'reference point px . . . . . . . . . . =',1PG20.13/,
620 & 5X,'reference point py . . . . . . . . . . =',1PG20.13/,
621 & 5X,'reference point pz . . . . . . . . . . =',1PG20.13/,
622 & 5X,'reference vector vx . . . . . . . . . .=',1PG20.13/,
623 & 5X,'reference vector vy . . . . . . . . . .=',1PG20.13/,
624 & 5X,'reference vector vz . . . . . . . . . .=',1PG20.13)
625 3000 FORMAT(
626 & 5X,'solid minimum volumetric strain........=',1PG20.13/,
627 & 5X,'solid maximum volumetric strain........=',1PG20.13/,
628 & 5X,'solid maximum aspect ratio.............=',1PG20.13/,
629 & 5X,'solid minimum collapse ratio...........=',1PG20.13/)
630
if(complex_arithmetic) id
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)
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)