OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat117.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_mat117 ../starter/source/materials/mat/mat117/hm_read_mat117.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_mat ../starter/source/materials/mat/hm_read_mat.F90
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
30!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
31!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
32!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.f
33!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
34!||--- uses -----------------------------------------------------
35!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
36!|| message_mod ../starter/share/message_module/message_mod.F
37!|| submodel_mod ../starter/share/modules1/submodel_mod.F
38!||====================================================================
39 SUBROUTINE hm_read_mat117(MTAG ,UPARAM ,MAXUPARAM,NUPARAM ,PM ,
40 . PARMAT ,NUVAR ,MAXFUNC ,NFUNC ,IFUNC,
41 . UNITAB ,MAT_ID ,TITR ,LSUBMODEL,MATPARAM )
42C-----------------------------------------------
43C ROUTINE DESCRIPTION :
44C ===================
45C READ MAT LAW117 WITH HM READER - connection 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(INOUT) :: IFUNC(MAXFUNC), NFUNC, MAXFUNC
81 INTEGER, INTENT(INOUT) :: MAXUPARAM,
82 . nuparam,nuvar
83 INTEGER, INTENT(IN) :: MAT_ID
84 my_real, INTENT(INOUT) :: PM(NPROPM),PARMAT(100),UPARAM(MAXUPARAM)
85 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
86 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(*)
87 TYPE(mlaw_tag_), INTENT(INOUT) :: MTAG
88 TYPE(matparam_struct_) ,INTENT(INOUT) :: MATPARAM
89C-----------------------------------------------
90C L o c a l V a r i a b l e s
91C-----------------------------------------------
92 INTEGER :: NRATE,ILAW,IMASS,IDEL,IORDER1,IORDER2,
93 . IFAIL1,IFAIL2, IRUPT,ICRIT
94 my_real :: rho0,e,g,thick,gc1_ini,gc2_ini,gc1_inf,gc2_inf,ratg1,ratg2,fscalex,fscalex_unit,
95 . fg1,fg2,siga1,siga2,sigb1,sigb2,rate1,rate2,unit_l,e_elas_n,e_elas_s,tmax_n,tmax_s,
96 . gic,giic,exp_g,exp_bk,disp_0n,disp_0s,delta0n,delta0s,und,utd,gama
97 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
98C=======================================================================
99 ilaw = 117
100!
101 is_encrypted = .false.
102 is_available = .false.
103!
104 CALL hm_option_is_encrypted(is_encrypted)
105Card1
106 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
107 CALL hm_get_intv ('MAT_IMASS' ,imass ,is_available, lsubmodel)
108 CALL hm_get_intv ('MAT_Fct_TN' ,ifunc(1) ,is_available, lsubmodel)
109 CALL hm_get_intv ('MAT_Fct_TT' ,ifunc(2) ,is_available, lsubmodel)
110 CALL hm_get_floatv('MAT_Fscale_x' ,fscalex ,is_available, lsubmodel, unitab)
111 IF(fscalex == zero) THEN
112 CALL hm_get_floatv_dim('MAT_Fscale_x' ,fscalex_unit ,is_available, lsubmodel, unitab)
113 fscalex = fscalex_unit
114 ENDIF
115 CALL hm_get_floatv('MAT_E_ELAS_N' ,e_elas_n ,is_available, lsubmodel, unitab)
116 CALL hm_get_floatv('MAT_E_ELAS_S' ,e_elas_s ,is_available, lsubmodel, unitab)
117 CALL hm_get_floatv('MAT_TMAX_N' ,tmax_n ,is_available, lsubmodel, unitab)
118 CALL hm_get_floatv('MAT_TMAX_S' ,tmax_s ,is_available, lsubmodel, unitab)
119
120 CALL hm_get_intv ('MAT_IRUPT' ,irupt ,is_available, lsubmodel)
121 CALL hm_get_intv ('MAT_IDEL' ,idel ,is_available, lsubmodel)
122 CALL hm_get_floatv('MAT_GIC' ,gic ,is_available, lsubmodel, unitab)
123 CALL hm_get_floatv('MAT_GIIC' ,giic ,is_available, lsubmodel, unitab)
124
125 CALL hm_get_floatv('MAT_EXP_G' ,exp_g ,is_available, lsubmodel, unitab)
126 CALL hm_get_floatv('MAT_EXP_BK' ,exp_bk ,is_available, lsubmodel, unitab)
127 CALL hm_get_floatv('MAT_GAMMA' ,gama ,is_available, lsubmodel, unitab)
128c---------------------------------------------------------------------------------
129 pm(1) = rho0 ! RHOR
130 pm(89)= rho0
131C-------------------------------------------
132C Number of User Element Variables and Curves
133C-------------------------------------------
134 nuvar = 15
135 nfunc = 2
136 nuparam = 18
137c-------------------
138c Default Values
139c-------------------
140 IF (idel == 0) idel = 1
141 IF (imass == 0) imass = 1
142 IF (irupt == 0) irupt = 1
143 IF (gama == zero) gama = one
144 IF (exp_g == zero) exp_g = two
145 IF (e_elas_s == zero) e_elas_s = e_elas_n
146 IF ( gic < (tmax_n**2 / two/e_elas_n ) ) THEN
147 gic = tmax_n**2 / two/e_elas_n
148 CALL ancmsg(msgid=3016,msgtype=msgwarning,anmode=aninfo_blind_1,
149 . i1 = mat_id,
150 . c1 = titr )
151 END IF
152 IF ( giic < (tmax_s**2 / two/e_elas_s ) ) THEN
153 giic = tmax_s**2 / two/e_elas_s
154 CALL ancmsg(msgid=3017,msgtype=msgwarning,anmode=aninfo_blind_1,
155 . i1 = mat_id,
156 . c1 = titr )
157 END IF
158
159
160
161
162 delta0n = tmax_n/e_elas_n !single mode damage initiation normal
163 delta0s = tmax_s/e_elas_s !single mode damage initiation tangential
164
165 und = two*gic /(delta0n *e_elas_n)! ultimate displacement in normal direction (UND)
166 utd = two*giic/(delta0s *e_elas_s)! ultimate displacement in tangential direction (UTD)
167
168
169
170
171C-------------------------------------------
172C User Material Parameters Definition
173C-------------------------------------------
174
175 disp_0n = tmax_n/e_elas_n
176 disp_0s = tmax_s/e_elas_s
177 uparam(1) = e_elas_n
178 uparam(2) = e_elas_s
179 uparam(3) = gama
180 uparam(4) = tmax_n
181 uparam(5) = tmax_s
182 uparam(6) = irupt
183 uparam(7) = gic
184 uparam(8) = giic
185 uparam(9) = idel
186 uparam(10) = exp_g
187 uparam(11) = exp_bk
188 uparam(12) = imass
189 uparam(13) = delta0n ! DISP puremode
190 uparam(14) = delta0s ! DISP puremode
191 uparam(15) = und! ultimate displacement in normal direction (UND)
192 uparam(16) = utd! ultimate displacement in tangential direction (UTD)
193 uparam(17) = fscalex
194
195C-------------------------------------------
196C Interface Contact
197C-------------------------------------------
198C----------------
199 parmat(1) = max(e_elas_n,e_elas_s) / three
200 parmat(2) = max(e_elas_n,e_elas_s)
201 parmat(17) = one ! (ONE - TWO*NU)/(ONE - NU), NU=0
202c
203 mtag%L_EPE = 3
204 mtag%L_DMG = 1
205 mtag%G_DMG = 1
206c
207 ! MATPARAM keywords
208 CALL init_mat_keyword(matparam,"HOOK")
209c
210 ! Properties compatibility
211 CALL init_mat_keyword(matparam,"SOLID_COHESIVE")
212c-------------------
213c STARTER Output
214c-------------------
215 WRITE(iout,1100) trim(titr),mat_id,ilaw
216 WRITE(iout,1000)
217 IF (is_encrypted) THEN
218 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
219 ELSE
220 WRITE(iout,1200) rho0,e_elas_n,e_elas_s,tmax_n,tmax_s,
221 . ifunc(1),ifunc(2),fscalex,
222 . irupt,gic,giic,exp_g,exp_bk,gama
223 ENDIF
224c-----------
225 RETURN
226C-------------------------------------------
227 1000 FORMAT(
228 & 10x,' MIXED MODE COHESIVE LAW 117 ',/,
229 & 10x,' --------------------------- ',/)
230 1100 FORMAT(/
231 & 5x,a,/,
232 & 5x,'MATERIAL NUMBER . . . . . . . . . . . . . . .=',i10/,
233 & 5x,'MATERIAL LAW. . . . . . . . . . . . . . . . .=',i10/)
234 1200 FORMAT(
235 & 5x,'INITIAL DENSITY . . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
236 & 5x,'STIFFNESS NORMAL TO THE PLANE OF THE COHESIVE ELEMENT .=',1pg20.13/,
237 & 5x,'STIFFNESS IN TO THE PLANE OF THE COHESIVE ELEMENT . . .=',1pg20.13/,
238 & 5x,'PEAK TRACTION IN NORMAL DIRECTION . . . . . . . . . . .=',1pg20.13/,
239 & 5x,'PEAK TRACTION IN TANGENTIAL DIRECTION . . . . . . . . .=',1pg20.13/,
240 & 5x,'FUNCTION OF THE PEAK TRACTION IN NORMAL DIRECTION. . . =',i10/,
241 & 5x,'FUNCTION OF THE PEAK TRACTION IN TANGENTIAL DIRECTION .=',i10/,
242 & 5x,'ABSCISSA SCALE FACTOR FOR THE PEAK TRACTION FUNCTIONS .=',1pg20.13/,
243c
244 & 5x,'CHOICE OF PROPAGATION CRITERION . . . . . . . . . . . .=',i10/,
245 & 5x,' = 1 => POWER LAW '/,
246 & 5x,' = 2 => BENZEGGAGH-KENANE '/,
247c
248 & 5x,'ENERGY RELEASE RATE FOR MODE I. . . . . . . . . . . . .=',1pg20.13/,
249 & 5x,'ENERGY RELEASE RATE FOR MODE II . . . . . . . . . . . .=',1pg20.13/,
250
251 & 5x,'POWER LAW EXPONENT MU . . . . . . . . . . . . . . . . .=',1pg20.13/,
252 & 5x,'BENZEGGAGH-KENANE EXPONENT MU . . . . . . . . . . . . .=',1pg20.13/,
253 & 5x,'BENZEGGAGH-KENANE EXPONENT GAMMA. . . . . . . . . . . .=',1pg20.13/)
254
255c--------
256 END
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 hm_read_mat117(mtag, uparam, maxuparam, nuparam, pm, parmat, nuvar, maxfunc, nfunc, ifunc, unitab, mat_id, titr, lsubmodel, matparam)
subroutine init_mat_keyword(matparam, keyword)
#define max(a, b)
Definition macros.h:21
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)
Definition message.F:889
program starter
Definition starter.F:39