OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat120.F
Go to the documentation of this file.
1Copyright> OpenRadioss
2Copyright> Copyright (C) 1986-2025 Altair Engineering Inc.
3Copyright>
4Copyright> This program is free software: you can redistribute it and/or modify
5Copyright> it under the terms of the GNU Affero General Public License as published by
6Copyright> the Free Software Foundation, either version 3 of the License, or
7Copyright> (at your option) any later version.
8Copyright>
9Copyright> This program is distributed in the hope that it will be useful,
10Copyright> but WITHOUT ANY WARRANTY; without even the implied warranty of
11Copyright> MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12Copyright> GNU Affero General Public License for more details.
13Copyright>
14Copyright> You should have received a copy of the GNU Affero General Public License
15Copyright> along with this program. If not, see <https://www.gnu.org/licenses/>.
16Copyright>
17Copyright>
18Copyright> Commercial Alternative: Altair Radioss Software
19Copyright>
20Copyright> As an alternative to this open-source version, Altair also offers Altair Radioss
21Copyright> software under a commercial license. Contact Altair to discuss further if the
22Copyright> commercial version may interest you: https://www.altair.com/radioss/.
23!||====================================================================
24!|| hm_read_mat120 ../starter/source/materials/mat/mat120/hm_read_mat120.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_mat ../starter/source/materials/mat/hm_read_mat.F90
27!||--- calls -----------------------------------------------------
28!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
29!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
30!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
31!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
32!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.f
33!||--- uses -----------------------------------------------------
34!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
35!|| message_mod ../starter/share/message_module/message_mod.F
36!|| submodel_mod ../starter/share/modules1/submodel_mod.f
37!||====================================================================
38 SUBROUTINE hm_read_mat120(MTAG ,UPARAM ,MAXUPARAM,MAXTABL ,NUPARAM ,
39 . NUVAR ,NVARTMP ,NUMTABL ,ITABLE ,PARMAT ,
40 . MATPARAM ,PM ,MAT_ID ,TITR ,ISRATE ,
41 . UNITAB ,LSUBMODEL)
42C-----------------------------------------------
43C ROUTINE DESCRIPTION :
44C ===================
45C READ MAT LAW120 WITH HM READER - toughened adhesive polymere joint material
46C-----------------------------------------------
47C DUMMY ARGUMENTS DESCRIPTION:
48C ===================
49C
50C NAME DESCRIPTION
51C-----------------------------------------------
52C IPM MATERIAL ARRAY(INTEGER)
53C PM MATERIAL ARRAY(REAL)
54C UNITAB UNITS ARRAY
55C ID MATERIAL ID(INTEGER)
56C TITR MATERIAL TITLE
57C LSUBMODEL SUBMODEL STRUCTURE
58C-----------------------------------------------
59C M o d u l e s
60C-----------------------------------------------
61 USE unitab_mod
62 USE elbuftag_mod
63 USE message_mod
64 USE submodel_mod
65 USE matparam_def_mod
67C-----------------------------------------------
68C I m p l i c i t T y p e s
69C-----------------------------------------------
70#include "implicit_f.inc"
71C-----------------------------------------------
72C C o m m o n B l o c k s
73C-----------------------------------------------
74#include "param_c.inc"
75#include "units_c.inc"
76C-----------------------------------------------
77C D u m m y A r g u m e n t s
78C-----------------------------------------------
79 TYPE (UNIT_TYPE_),INTENT(IN) :: UNITAB
80 INTEGER ,INTENT(IN ) :: MAXUPARAM,MAXTABL,MAT_ID
81 INTEGER ,INTENT(INOUT) :: NUMTABL,NUPARAM,NUVAR,NVARTMP
82 INTEGER ,DIMENSION(MAXTABL) ,INTENT(INOUT) :: ITABLE
83 my_real ,INTENT(INOUT) :: pm(npropm),parmat(100),uparam(maxuparam)
84 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
85 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(*)
86 TYPE(mlaw_tag_), INTENT(INOUT) :: MTAG
87 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
88C-----------------------------------------------
89C L o c a l V a r i a b l e s
90C-----------------------------------------------
91 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
92 INTEGER :: I,ILAW,YTAB_ID,ISRATE,IFORM,ITRX,IDAM,NDIM_YLD
93 my_real :: RHO0,RHOR,E,NU,Y0,Q,B,H,G,BULK,C11,C12,EPSPMIN,EPSPMAX,SSP,
94 . fcut,a1f,a2f,a1h,a2h,as,cc,d1c,d2c,d1f,d2f,d_trx,d_jc,exp_n,
95 . xscale,yscale,yscale_unit,unit_l,xscale_unit,thick
96C=======================================================================
97 ilaw = 120
98 is_encrypted = .false.
99 is_available = .false.
100c
101 CALL hm_option_is_encrypted(is_encrypted)
102c----------------
103c Read input cards
104c----------------
105card1
106 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
107 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
108card2 Elasticity parameters and formulation flags
109 CALL hm_get_floatv('MAT_E' ,e ,is_available, lsubmodel, unitab)
110 CALL hm_get_floatv('MAT_NU' ,nu ,is_available, lsubmodel, unitab)
111 CALL hm_get_intv ('MAT_IFORM' ,iform ,is_available, lsubmodel)
112 CALL hm_get_intv ('MAT_ITRX' ,itrx ,is_available, lsubmodel)
113 CALL hm_get_intv ('MAT_IDAM' ,idam ,is_available, lsubmodel)
114 CALL hm_get_floatv('MAT_THICK' ,thick ,is_available, lsubmodel, unitab)
115card3 yield hardening function table
116 CALL hm_get_intv ('MAT_TAB_ID',ytab_id ,is_available,lsubmodel)
117 CALL hm_get_floatv('MAT_Xscale',xscale ,is_available, lsubmodel, unitab)
118 CALL hm_get_floatv('MAT_Yscale',yscale ,is_available, lsubmodel, unitab)
119card4 hardening function parameters
120 CALL hm_get_floatv('MAT_TAU' ,y0 ,is_available, lsubmodel, unitab)
121 CALL hm_get_floatv('MAT_Q' ,q ,is_available, lsubmodel, unitab)
122 CALL hm_get_floatv('MAT_B' ,b ,is_available, lsubmodel, unitab)
123 CALL hm_get_floatv('MAT_H' ,h ,is_available, lsubmodel, unitab)
124card5 yield and plastic flow parameters
125 CALL hm_get_floatv('MAT_AF1' ,a1f ,is_available, lsubmodel, unitab)
126 CALL hm_get_floatv('MAT_AF2' ,a2f ,is_available, lsubmodel, unitab)
127 CALL hm_get_floatv('MAT_AH1' ,a1h ,is_available, lsubmodel, unitab)
128 CALL hm_get_floatv('MAT_AH2' ,a2h ,is_available, lsubmodel, unitab)
129 CALL hm_get_floatv('MAT_AS' ,as ,is_available, lsubmodel, unitab)
130card6 Johnson-Cook strain rate factor on yield
131 CALL hm_get_floatv('MAT_CC' ,cc ,is_available, lsubmodel, unitab)
132 CALL hm_get_floatv('MAT_GAM0' ,epspmin ,is_available, lsubmodel, unitab)
133 CALL hm_get_floatv('MAT_GAMF' ,epspmax ,is_available, lsubmodel, unitab)
134card7 Damage model parameters
135 CALL hm_get_floatv('MAT_D1C' ,d1c ,is_available, lsubmodel, unitab)
136 CALL hm_get_floatv('MAT_D2C' ,d2c ,is_available, lsubmodel, unitab)
137 CALL hm_get_floatv('MAT_D1F' ,d1f ,is_available, lsubmodel, unitab)
138 CALL hm_get_floatv('MAT_D2F' ,d2f ,is_available, lsubmodel, unitab)
139card8 Johnson-Cook strain rate dependency on damage
140 CALL hm_get_floatv('d_trx' ,D_TRX ,IS_AVAILABLE, LSUBMODEL, UNITAB)
141 CALL HM_GET_FLOATV('d_jc' ,D_JC ,IS_AVAILABLE, LSUBMODEL, UNITAB)
142 CALL HM_GET_FLOATV('mat_exp' ,EXP_N ,IS_AVAILABLE, LSUBMODEL, UNITAB)
143c
144c-------------------------------------------------------------------------------
145 G = E * HALF / (ONE + NU)
146 BULK = E * THIRD / (ONE - TWO*NU)
147 C11 = E * (ONE-NU) /((ONE + NU)*(ONE - TWO*NU))
148 C12 = C11 * NU/(ONE - NU)
149 SSP = SQRT((BULK + FOUR_OVER_3*G) / RHO0) ! sound speed estimation
150c-------------------
151c Default values
152c-------------------
153 ISRATE = 0
154 FCUT = ZERO
155 IF (CC > ZERO) THEN
156 FCUT = 1000.0D0 * UNITAB%FAC_T_WORK
157 END IF
158 IF (EXP_N == ZERO) EXP_N = ONE
159 IF (IFORM == 0) IFORM = 1
160 IF (ITRX == 0) ITRX = 2
161 IF (IDAM == 0) IDAM = 2
162 IF (XSCALE == ZERO) THEN
163 CALL HM_GET_FLOATV_DIM('mat_xscale' ,XSCALE_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
164 XSCALE = ONE * XSCALE_UNIT
165 ENDIF
166 IF (YSCALE == ZERO) THEN
167 CALL HM_GET_FLOATV_DIM('mat_yscale' ,YSCALE_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
168 YSCALE = ONE * YSCALE_UNIT
169 ENDIF
170 IF (THICK == ZERO) THEN
171 CALL HM_GET_FLOATV_DIM('mat_thick' ,UNIT_L ,IS_AVAILABLE, LSUBMODEL, UNITAB)
172 THICK = ONE * UNIT_L
173 ENDIF
174c-----------------
175c Johnson/Cookss fracture strain parameters check
176 D1F = MAX(D1C, D1F)
177 D2F = MAX(D2C, D2F)
178c-----------------
179 NUMTABL = 1
180 NUVAR = 5
181 NVARTMP = 1
182 NUPARAM = 34
183 IF (YTAB_ID > 0) THEN ! analytical yld parameters are not used with tabulated input
184 Y0 = ZERO
185 Q = ZERO
186 B = ZERO
187 H = ZERO
188 EPSPMIN = ZERO
189 EPSPMAX = ZERO
190 ENDIF
191c-------------------
192 UPARAM(1) = E
193 UPARAM(2) = NU
194 UPARAM(3) = G
195 UPARAM(4) = BULK
196 UPARAM(5) = Y0
197 UPARAM(6) = Q
198 UPARAM(7) = B
199 UPARAM(8) = H
200 UPARAM(9) = A1F
201 UPARAM(10) = A2F
202 UPARAM(11) = A1H
203 UPARAM(12) = A2H
204 UPARAM(13) = AS
205c Johnson/Cook failure parameters
206 UPARAM(14) = D1C
207 UPARAM(15) = D2C
208 UPARAM(16) = D1F
209 UPARAM(17) = D2F
210 UPARAM(18) = D_TRX
211 UPARAM(19) = D_JC
212 UPARAM(20) = EXP_N
213c Parameters: Johnson & Cook rate-dependency
214 UPARAM(21) = CC
215 UPARAM(22) = EPSPMIN
216 UPARAM(23) = EPSPMAX
217 UPARAM(24) = FCUT
218c
219 UPARAM(25) = IFORM
220 UPARAM(26) = ITRX
221 UPARAM(27) = IDAM
222c
223 UPARAM(28) = SSP
224 UPARAM(29) = YTAB_ID
225 UPARAM(30) = ONE / XSCALE
226 UPARAM(31) = YSCALE
227 UPARAM(32) = C11
228 UPARAM(33) = C12
229c
230 UPARAM(34) = THICK ! For connect element (type43)
231 ITABLE(1) = YTAB_ID ! Yield function table = f(epsp,epsdot,temp)
232c------------------
233 PM(1) = RHOR
234 PM(89) = RHO0
235 PM(27) = SSP
236 PM(100)= BULK
237c--------------------------------
238 PARMAT(1) = BULK
239 PARMAT(2) = E
240 PARMAT(3) = NU
241 PARMAT(4) = ISRATE
242 PARMAT(5) = FCUT
243C Formulation for solid elements time step computation.
244 PARMAT(16) = 2
245 PARMAT(17) = TWO*G/(BULK+FOUR_OVER_3*G) ! == (1-2*nu)/(1-nu)
246c-----------------
247c Element buffer variable allocation
248c-----------------
249 MTAG%G_PLA = 1
250 MTAG%L_PLA = 1
251 MTAG%L_EPSD = 1
252 MTAG%G_EPSD = 1
253 MTAG%L_DMG = 1
254 MTAG%G_DMG = 1
255 MTAG%L_DMGSCL = 1
256
257 CALL INIT_MAT_KEYWORD(MATPARAM ,"COMPRESSIBLE")
258 CALL INIT_MAT_KEYWORD(MATPARAM ,"INCREMENTAL" )
259 CALL INIT_MAT_KEYWORD(MATPARAM ,"LARGE_STRAIN")
260 CALL INIT_MAT_KEYWORD(MATPARAM ,"HOOK")
261 ! Properties compatibility
262 CALL INIT_MAT_KEYWORD(MATPARAM,"SOLID_ALL")
263c-----------------
264 WRITE(IOUT,1000) TRIM(TITR),MAT_ID,ILAW
265 WRITE(IOUT,1100)
266
267 IF (IS_ENCRYPTED) THEN
268 WRITE(IOUT,'(5x,a,//)')'confidential data'
269 ELSE
270 WRITE(IOUT,1200) RHO0,E,NU,THICK,IFORM
271 IF (YTAB_ID > 0) THEN
272 WRITE(IOUT,1300) YTAB_ID,XSCALE,YSCALE
273 ELSE
274 WRITE(IOUT,1400) Q,B,H,Y0,CC,EPSPMIN,EPSPMAX
275 END IF
276 WRITE(IOUT,1500) A1F,A2F,A1H,A2H,AS,D1C,D2C,D1F,D2F,
277 . D_TRX,D_JC,EXP_N,ITRX,IDAM
278 ENDIF
279c-----------------------------------------------------------------------
280 1000 FORMAT(/
281 & 5X,A,/,
282 & 5X,'material number. . . . . . . . . . . . =',I10/,
283 & 5X,'material law . . . . . . . . . . . . . =',I10/)
284 1100 FORMAT
285 &(5X,'material model : toughened adhesive polymer',/,
286 & 5X,'-------------------------------------------',/)
287 1200 FORMAT(
288 & 5X,'initial density . . . . . . . . . . . .=',1PG20.13/
289 & 5X,'young modulus . . . . . . . . . . . . .=',1PG20.13/
290 & 5X,'poisson ratio . . . . . . . . . . . . .=',1PG20.13/
291 & 5X,'reference thickness . . . . . . . . . .=',1PG20.13/
292 & 5X,'yield criterion flag . . . . . . . . .=',I3)
293 1300 FORMAT(
294 & 5X,'yield FUNCTION table identifier . . . .=',I10/
295 & 5X,'scale factor for strain rate. . . . . .=',1PG20.13/
296 & 5X,'scale factor for yld function . . . . .=',1PG20.13)
297 1400 FORMAT(
298 & 5X,'nonlinear hardening parameter . . . . .=',1PG20.13/
299 & 5X,'exponential decay coefficient . . . . .=',1PG20.13/
300 & 5X,'linear hardening parameter. . . . . . .=',1PG20.13/
301 & 5X,'initial yield stress. . . . . . . . . .=',1PG20.13/
302 & 5X,'strain rate coefficient . . . . . . . .=',1PG20.13/
303 & 5X,'static strain rate. . . . . . . . . . .=',1PG20.13/
304 & 5X,'maximal strain rate . . . . . . . . . .=',1PG20.13)
305 1500 FORMAT(
306 & 5X,'yield function parameter a1f. . . . . .=',1PG20.13/
307 & 5X,'yield function parameter a2f. . . . . .=',1PG20.13/
308 & 5X,'yield function parameter a1h. . . . . .=',1PG20.13/
309 & 5X,'yield function parameter a2h. . . . . .=',1PG20.13/
310 & 5X,'plastic flow parameter as . . . . . .=',1PG20.13/
311 & 5X,'failure model coefficient d1c . . . . .=',1PG20.13/
312 & 5X,'failure model coefficient d2c . . . . .=',1PG20.13/
313 & 5X,'failure model coefficient d1f . . . . .=',1PG20.13/
314 & 5X,'failure model coefficient d2f . . . . .=',1PG20.13/
315 & 5X,'damage coefficient d_trx. . . . . . . .=',1PG20.13/
316 & 5X,'damage coefficient d_jc . . . . . . . .=',1PG20.13/
317 & 5X,'exponent coefficient . . . . . . . . .=',1PG20.13/
318 & 5X,'itrx: failure dependency on triaxiality=',I3/
319 & 5X,'strain rate definition for damage . . .=',I3/)
320c-----------
321 RETURN
322 END
#define my_real
Definition cppsort.cpp:32
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)
subroutine hm_read_mat120(mtag, uparam, maxuparam, maxtabl, nuparam, nuvar, nvartmp, numtabl, itable, parmat, matparam, pm, mat_id, titr, israte, unitab, lsubmodel)
subroutine init_mat_keyword(matparam, keyword)
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle
program starter
Definition starter.F:39
subroutine static(v, vr, a, ar, ms, in, igrnod, weight_md, wfext)
Definition static.F:33