40 . MAXFUNC ,IFUNC ,MTAG ,PARMAT ,
41 . UNITAB ,LSUBMODEL,MAT_ID ,TITR )
65#include "implicit_f.inc"
74 INTEGER,
INTENT(IN) :: MAT_ID,MAXFUNC
75 CHARACTER(LEN=NCHARTITLE) ,
INTENT(IN) :: TITR
76 INTEGER,
INTENT(INOUT) :: NUVAR,NFUNC
77 INTEGER,
DIMENSION(MAXFUNC) ,
INTENT(INOUT) :: IFUNC
78 my_real,
DIMENSION(100) ,
INTENT(INOUT) :: parmat
80 TYPE (UNIT_TYPE_) ,
INTENT(IN) :: UNITAB
82 TYPE(matparam_struct_) ,
INTENT(INOUT) :: MATPARAM
86 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
87 INTEGER :: I,ILAW,NC,NT,ISENS,ILOAD,ULOAD
88 my_real :: rho0,rhor,young,ec,et,bc,bt,g,g0,gt,gb,gsh,gfrot,
89 . kc,kt,kkc,kkt,kfc,kft,flex,flex1,flex2,embc,embt,
90 . lc0,lt0,dc0,dt0,hc0,ht0,cosin,tan_lock,phi_lock,
91 . visce,viscg,areamin1,areamin2,zerostress,stress_unit
94 is_encrypted = .false.
95 is_available = .false.
103 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
104 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
106 CALL hm_get_floatv(
'MAT_E1' ,ec ,is_available, lsubmodel, unitab)
107 CALL hm_get_floatv(
'MAT_B1' ,bc ,is_available, lsubmodel, unitab)
108 CALL hm_get_floatv(
'MAT_E2' ,et ,is_available, lsubmodel, unitab)
109 CALL hm_get_floatv(
'MAT_B2' ,bt ,is_available, lsubmodel, unitab)
110 CALL hm_get_floatv(
'MAT_F' ,flex ,is_available, lsubmodel, unitab)
112 CALL hm_get_floatv(
'MAT_G0' ,g0 ,is_available, lsubmodel, unitab)
113 CALL hm_get_floatv(
'MAT_GI' ,gt ,is_available, lsubmodel, unitab)
114 CALL hm_get_floatv(
'MAT_ALPHA' ,phi_lock ,is_available, lsubmodel, unitab)
115 CALL hm_get_floatv(
'MAT_G5' ,gsh ,is_available, lsubmodel, unitab)
116 CALL hm_get_intv (
'ISENSOR' ,isens ,is_available,lsubmodel)
118 CALL hm_get_floatv(
'MAT_Df' ,visce ,is_available, lsubmodel, unitab)
119 CALL hm_get_floatv(
'MAT_dS' ,viscg ,is_available, lsubmodel, unitab)
120 CALL hm_get_floatv(
'Friction_phi' ,gfrot ,is_available, lsubmodel, unitab)
121 CALL hm_get_floatv(
'M58_Zerostress',zerostress,is_available, lsubmodel, unitab)
123 CALL hm_get_intv (
'N1_warp' ,nc ,is_available,lsubmodel)
124 CALL hm_get_intv (
'N2_weft' ,nt ,is_available,lsubmodel)
125 CALL hm_get_floatv(
'S1' ,embc ,is_available, lsubmodel, unitab)
126 CALL hm_get_floatv(
'S2' ,embt ,is_available, lsubmodel, unitab)
127 CALL hm_get_floatv(
'MAT_C4' ,flex1 ,is_available, lsubmodel, unitab)
128 CALL hm_get_floatv(
'MAT_C5' ,flex2 ,is_available, lsubmodel, unitab)
132 CALL hm_get_intv (
'FUN_A1' ,ifunc(1) ,is_available,lsubmodel)
133 CALL hm_get_floatv(
'MAT_C1' ,yfac(1) ,is_available, lsubmodel, unitab)
135 CALL hm_get_intv (
'FUN_A2' ,ifunc(2) ,is_available,lsubmodel)
136 CALL hm_get_floatv(
'MAT_C2' ,yfac(2) ,is_available, lsubmodel, unitab)
138 CALL hm_get_intv (
'FUN_A3' ,ifunc(3) ,is_available,lsubmodel)
139 CALL hm_get_floatv(
'MAT_C3' ,yfac(3) ,is_available, lsubmodel, unitab)
141 CALL hm_get_intv (
'FUN_A4' ,ifunc(4) ,is_available,lsubmodel)
142 CALL hm_get_intv (
'FUN_A5' ,ifunc(5) ,is_available,lsubmodel)
143 CALL hm_get_floatv(
'scale4' ,yfac(4) ,is_available, lsubmodel, unitab)
144 CALL hm_get_floatv(
'scale5' ,yfac(5) ,is_available, lsubmodel, unitab)
145 CALL hm_get_intv (
'FUN_A6' ,ifunc(6) ,is_available,lsubmodel)
146 CALL hm_get_floatv(
'scale6' ,yfac(6) ,is_available, lsubmodel, unitab)
154 IF (ifunc(1) /= 0 .or. ifunc(2) /= 0 .or. ifunc(3) /= 0)
THEN
157 IF (ifunc(4) /= 0 .or. ifunc(5) /= 0 .or. ifunc(6) /= 0)
THEN
163 IF (ifunc(4) == 0)
THEN
167 IF (ifunc(5) == 0)
THEN
171 IF (ifunc(6) == 0)
THEN
176 IF (ifunc(1) == 0)
THEN
179 . anmode=aninfo_blind_2,
183 IF (ifunc(2) == 0)
THEN
186 . anmode=aninfo_blind_2,
190 IF (ifunc(3) == 0)
THEN
193 . anmode=aninfo_blind_2,
205 IF (YFAC(I) == ZERO) YFAC(I) = ONE * STRESS_UNIT
210 IF (EMBC == ZERO) EMBC = EM01
211 IF (EMBT == ZERO) EMBT = EM01
212 IF (FLEX == ZERO) FLEX = EM03
213.AND.
IF (FLEX1 == ZERO FLEX2 == ZERO)THEN
216.AND.
ELSEIF (FLEX1 == ZERO FLEX2 /= ZERO)THEN
218.AND.
ELSEIF (FLEX2 == ZERO FLEX1 /= ZERO)THEN
227 IF (GT == ZERO) GT = FOURTH*(EC + ET)
233 HC0 = SQRT(DC0*DC0 - LC0*LC0)
234 HT0 = SQRT(DT0*DT0 - LT0*LT0)
241 KFC = FLEX1*KC*HC0/DC0
242 KFT = FLEX2*KT*HT0/DT0
245 IF (PHI_LOCK == ZERO) THEN
246 COSIN = HALF*(HC0/LC0 + HT0/LT0)
247 TAN_LOCK = SQRT(ONE - COSIN*COSIN) / COSIN
248 PHI_LOCK = ATAN(TAN_LOCK)
250 PHI_LOCK = PHI_LOCK*PI/HUNDRED80
251 TAN_LOCK = TAN(PHI_LOCK)
254 G = GT / (ONE + TAN_LOCK*TAN_LOCK)
255 IF (G0 == ZERO) G0 = G
256 GB = TAN_LOCK*(G0 - G)
258.and.
IF (GFROT == ZERO ILOAD == 0) GFROT = G0
259.and.
IF (GSH == ZERO ILOAD == 0) GSH = G0
263 MATPARAM%NUPARAM = 46 ! 4pts for intersection +flag +pr shear
265 MATPARAM%NFUNC = NFUNC
267 ALLOCATE (MATPARAM%UPARAM(MATPARAM%NUPARAM))
268 ALLOCATE (MATPARAM%IPARAM(MATPARAM%NIPARAM))
269 MATPARAM%UPARAM(:) = ZERO
270 MATPARAM%IPARAM(:) = 0
272 MATPARAM%IPARAM(1) = ULOAD
273 MATPARAM%IPARAM(2) = ISENS
274 MATPARAM%IPARAM(3) = NC
275 MATPARAM%IPARAM(4) = NT
277 MATPARAM%UPARAM( 1) = LC0
278 MATPARAM%UPARAM( 2) = LT0
279 MATPARAM%UPARAM( 3) = DC0
280 MATPARAM%UPARAM( 4) = DT0
281 MATPARAM%UPARAM( 5) = HC0
282 MATPARAM%UPARAM( 6) = HT0
283 MATPARAM%UPARAM( 7) = 0 ! moved to IPARAM (NC)
284 MATPARAM%UPARAM( 8) = 0 ! moved to IPARAM (NT)
285 MATPARAM%UPARAM( 9) = KC
286 MATPARAM%UPARAM(10) = KT
287 MATPARAM%UPARAM(11) = KFC
288 MATPARAM%UPARAM(12) = KFT
289 MATPARAM%UPARAM(13) = G0
290 MATPARAM%UPARAM(14) = G
291 MATPARAM%UPARAM(15) = GB
292 MATPARAM%UPARAM(16) = TAN_LOCK
293 MATPARAM%UPARAM(17) = VISCE
294 MATPARAM%UPARAM(18) = VISCG
295 MATPARAM%UPARAM(19) = KKC
296 MATPARAM%UPARAM(20) = KKT
297 MATPARAM%UPARAM(21) = GFROT
298 MATPARAM%UPARAM(22) = AREAMIN1
299 AREAMIN2 = ONE + HALF*(AREAMIN1-ONE)
300 IF (AREAMIN2 > AREAMIN1) THEN
301 MATPARAM%UPARAM(23)= ONE / (AREAMIN2-AREAMIN1)
303 MATPARAM%UPARAM(23)= ZERO
305 MATPARAM%UPARAM(24) = ZEROSTRESS
306 MATPARAM%UPARAM(25) = 0 ! not used
307 MATPARAM%UPARAM(26) = FLEX1
308 MATPARAM%UPARAM(27) = FLEX2
309 MATPARAM%UPARAM(28) = YFAC(1)
310 MATPARAM%UPARAM(29) = YFAC(2)
311 MATPARAM%UPARAM(30) = YFAC(3)
312 MATPARAM%UPARAM(31) = 0 ! not used
313 MATPARAM%UPARAM(32) = GSH
314 MATPARAM%UPARAM(33) = YFAC(4)
315 MATPARAM%UPARAM(34) = YFAC(5)
316 MATPARAM%UPARAM(35) = 0 ! not used
317 MATPARAM%UPARAM(42) = YFAC(6)
321 PARMAT(1) = YOUNG/THREE
329 MATPARAM%YOUNG = YOUNG
331 CALL INIT_MAT_KEYWORD(MATPARAM,"ANISOTROPIC")
333 ! Properties compatibility
334 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ANISOTROPIC")
340 WRITE(IOUT,1000) TRIM(TITR),MAT_ID,58
342 IF (IS_ENCRYPTED) THEN
343 WRITE(IOUT,'(5x,a,//)
')'confidential data
'
345 WRITE(IOUT,1200) RHO0
346 WRITE(IOUT,1250) EC,ET
348 WRITE(IOUT,1300) BC,BT,G0,GT,PHI_LOCK*HUNDRED80/PI
350 WRITE(IOUT,1400) IFUNC(1),IFUNC(2),IFUNC(3),YFAC(1),YFAC(2),YFAC(3)
352 . WRITE(IOUT,1500) IFUNC(4),IFUNC(5),IFUNC(6),YFAC(4),YFAC(5),YFAC(6)
354 WRITE(IOUT,1600) VISCE,VISCG,GFROT,GSH,ZEROSTRESS,
355 . EMBC,EMBT,NC,NT,ISENS,FLEX1,FLEX2
360 & 5X,'material number. . . . . . . . . . . . . . . . . =
',I10/,
361 & 5X,'material law . . . . . . . . . . . . . . . . . . =
',I10/)
363 &(5X,'material model : anisotropic fabric(law58)
',/,
364 & 5X,'--------------------------------------------
',/)
366 & 5X,'initial density . . . . . . . . . . . . . . . .=
',1PG20.13/)
368 & 5X,'young modulus e1(warp direction) . . . . . . . .=
',1PG20.13/
369 & 5X,'young modulus e2(weft direction) . . . . . . . .=
',1PG20.13/)
371 & 5X,'softening coefficient b1. . . . . . . . . . . . .=
',1PG20.13/
372 & 5X,'softening coefficient b2. . . . . . . . . . . . .=
',1PG20.13/
373 & 5X,'initial shear modulus . . . . . . . . . . . . . .=
',1PG20.13/
374 & 5X,'lock shear modulus. . . . . . . . . . . . . . . .=
',1PG20.13/
375 & 5X,'shear lock angle. . . . . . . . . . . . . . . . .=
',1PG20.13/)
377 & 5X,'loading stress
FUNCTION id in warp direction. . .=
',I10/
378 & 5X,'loading stress function
id in weft direction. . .=
',I10/
379 & 5X,'loading stress function
id in shear . . . . . . .=
',I10/
380 & 5X,'loading function scale factor (WARP). . . . . . .=
',1PG20.13/
381 & 5X,'loading function scale factor (WEFT). . . . . . .=
',1PG20.13/
382 & 5X,'loading function scale factor (SHEAR) . . . . . .=
',1PG20.13/)
384 & 5X,'unloading stress function
id in warp direction. .=
',I10/
385 & 5X,'unloading stress function
id in weft direction. .=
',I10/
386 & 5X,'unloading stress function
id in shear direction .=
',I10/
387 & 5X,'unloading function scale factor (WARP). . . . . .=
',1PG20.13/
388 & 5X,'unloading function scale factor (WEFT). . . . . .=
',1PG20.13/
389 & 5X,'unloading function scale factor (SHEAR) . . . . .=
',1PG20.13/)
391 & 5X,'fiber viscosity coef. . . . . . . . . . . . . . .=
',1PG20.13/
392 & 5X,'shear friction coef . . . . . . . . . . . . . . .=
',1PG20.13/
393 & 5X,'shear friction modulus. . . . . . . . . . . . . .=
',1PG20.13/
394 & 5X,'transverse shear modulus. . . . . . . . . . . . .=
',1PG20.13/
395 & 5X,'ref-state stress relaxation factor. . . . . . . .=
',1PG20.13/
396 & 5X,'nominal warp stretch. . . . . . . . . . . . . . .=
',1PG20.13/
397 & 5X,'nominal weft stretch. . . . . . . . . . . . . . .=
',1PG20.13/
398 & 5X,'fiber density in warp direction . . . . . . . . .=
',I10/
399 & 5X,'fiber density in weft direction . . . . . . . . .=
',I10/
400 & 5X,'sensor
id',I10/
401 & 5X,'flex modulus reduction factor (WARP). . . . . . .=
',1PG20.13/
402 & 5X,'flex modulus reduction factor (WEFT). . . . . . .=
',1PG20.13)
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)