43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
66 USE matparam_def_mod
68
69
70
71#include "implicit_f.inc"
72
73
74
75#include "units_c.inc"
76#include "param_c.inc"
77
78
79
80 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
81 my_real,
INTENT(INOUT) :: pm(npropm),parmat(100),uparam(maxuparam)
82 INTEGER, INTENT(INOUT) :: ISRATE,IFUNC(MAXFUNC),NFUNC,MAXFUNC,MAXUPARAM,NUPARAM, NUVAR
83 TYPE(MLAW_TAG_),INTENT(INOUT) :: MTAG
84 INTEGER,INTENT(IN) :: ID
85 INTEGER,INTENT(INOUT) :: IMATVIS
86 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
87 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
88 TYPE(MATPARAM_STRUCT_) ,INTENT(INOUT) :: MATPARAM
89
90
91
92 INTEGER I,BULK_FNCT,NTABLE_,NMUAL,LAWID,ILAW
94 my_real bulk,tenscut,gs,nu,fscal,zep495,fscal_unit
95 INTEGER ICHECK, NSTART
97 INTEGER IDUMMY
98 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
99
100
101
102 is_encrypted = .false.
103 is_available = .false.
104 idummy = 0
105 nstart = 0
106 errtol = zero
107 ilaw = 69
108 imatvis = 1
109
111
112
113 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
114 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
115
116 CALL hm_get_intv(
'MAT_Iflag' ,lawid ,is_available, lsubmodel)
117 CALL hm_get_intv(
'FUN_A1' ,bulk_fnct ,is_available, lsubmodel)
118 CALL hm_get_floatv(
'MAT_NU' ,nu ,is_available, lsubmodel, unitab)
119 CALL hm_get_floatv(
'MAT_FScale' ,fscal ,is_available, lsubmodel, unitab)
120 CALL hm_get_intv(
'NIP' ,nmual ,is_available, lsubmodel)
121 CALL hm_get_intv(
'Gflag' ,icheck ,is_available, lsubmodel)
122
123 CALL hm_get_intv (
'FUN_B1' ,ntable_ ,is_available, lsubmodel)
124
125
126 CALL hm_get_floatv_dim(
'MAT_FScale' ,fscal_unit ,is_available, lsubmodel, unitab)
127
128
129 nuparam = 21
130 nfunc = 2
131 nuvar = 9
132
133 zep495 = zep4 + nine*em02 + five*em03
134 IF(icheck == 0 ) icheck = -3
135 IF(nstart == 0 ) nstart = 100
136 IF(errtol == zero ) errtol = fiveem3
137 IF(nmual == 0 ) nmual = 2
138 IF(fscal == zero ) fscal = one*fscal_unit
139 IF(lawid == 0 ) lawid = -1
140 IF(lawid == -1) THEN
141 icheck = -3
142 nstart = 100
143 errtol = fiveem3
144 nmual = 2
145 ENDIF
146 IF (ntable_ == 0) THEN
148 . msgtype=msgerror,
149 . anmode=aninfo,
151 . c1=titr)
152 ENDIF
153 IF (lawid == 0) lawid = 1
154 IF (lawid /= 1 .AND. lawid /= 2 .AND. lawid /= -1 ) THEN
156 . msgtype=msgerror,
157 . anmode=aninfo,
159 . c1=titr,i2=lawid)
160 ENDIF
161
162 tenscut = ep20
163 DO i=1,5
164 mu(i)=ten*fscal_unit
165 al(i)=ten*fscal_unit
166 ENDDO
167 gs = zero
168 IF (lawid == 1) THEN
169 DO i=1,5
170 gs = gs + mu(i)*al(i)
171 ENDDO
172 ELSEIF (lawid == 2) THEN
173 DO i=1,2
174 gs = gs + mu(i)*al(i)
175 ENDDO
176 ENDIF
177
178 IF (nu == zero ) nu = zep495
179 bulk = gs*(one+nu)/
max(em20,three*(one-two*nu))
180
181 ifunc(2) = ntable_
182 parmat(1)= gs
183 parmat(2)= gs*(one+nu)
184 parmat(3)= nu
185 parmat(6)= bulk
186 mu = gs/two
187
188 IF (rhor == zero) rhor=rho0
189 pm(1) = rhor
190 pm(2) = gs
191 pm(89) = rho0
192 pm(100)= bulk
193
194 uparam(1) = mu(1)
195 uparam(2) = mu(2)
196 uparam(3) = mu(3)
197 uparam(4) = mu(4)
198 uparam(5) = mu(5)
199 uparam(6) = al(1)
200 uparam(7) = al(2)
201 uparam(8) = al(3)
202 uparam(9) = al(4)
203 uparam(10)= al(5)
204 uparam(11)= bulk
205 uparam(12)= tenscut
206 uparam(13)= lawid
207 uparam(14)= nu
208 uparam(15)= fscal
209 uparam(17)= gs
210 uparam(18)= nmual
211 uparam(19)= icheck
212 uparam(20)= nstart
213 uparam(21) = zero
214 IF(is_encrypted)uparam(21)= one
215
219
222
223 WRITE(iout,1100) trim(titr),
id,69
224 WRITE(iout,1000)
225 IF(is_encrypted)THEN
226 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
227 ELSE
228 WRITE(iout,1200) rho0
229 IF (ntable_ /= 0) THEN
230 WRITE(iout,'(5X,A,//)')'HYPERELASTIC MATERIAL CONSTANTS WILL BE DETERMINED BY NONLINEAR LEAST SQUARE FITTING '
231 WRITE(iout,1300) nu,lawid,bulk_fnct,fscal,nmual,icheck
232 ENDIF
233 ENDIF
234
235 RETURN
236
237 1000 FORMAT
238 & (5x,29h tabulated hyper-elastic law,/,
239 & 5x,29h ---------------------------,//)
240 1100 FORMAT(/
241 & 5x,a,/,
242 & 5x,'MATERIAL NUMBER . . . . . . . . . . . .=',i10/,
243 & 5x,'MATERIAL LAW. . . . . . . . . . . . . .=',i10/)
244 1200 FORMAT(
245 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/)
246 1300 FORMAT
247 &(5x,'POISSON RATIO . . . . . . . . . . . . .=',1pg20.13/
248 &,5x,'LAW TYPE. . . . . . . . . . . . . . . .=',i10/
249 &,5x,'BULK FUNCTION ID. . . . . . . . . . . .=',i10/
250 &,5x,'SCALE FACTOR FOR BULK FUNCTION. . . . .=',1pg20.13/
251 &,5x,'FIT ORDER . . . . . . . . . . . . . . .=',i10/
252 &,5x,'ICHECK = ', i10//)
253
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_floatv_dim(name, dim_fac, is_available, lsubmodel, unitab)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine init_mat_keyword(matparam, keyword)
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)