OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_fail_inievo.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_fail_inievo ../starter/source/materials/fail/inievo/hm_read_fail_inievo.F
25!||--- called by ------------------------------------------------------
26!|| hm_read_fail ../starter/source/materials/fail/hm_read_fail.F
27!||--- calls -----------------------------------------------------
28!|| ancmsg ../starter/source/output/message/message.F
29!|| hm_get_float_array_index ../starter/source/devtools/hm_reader/hm_get_float_array_index.F
31!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
32!|| hm_get_int_array_index ../starter/source/devtools/hm_reader/hm_get_int_array_index.F
33!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
34!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
35!||--- uses -----------------------------------------------------
36!|| hm_option_read_mod ../starter/share/modules1/hm_option_read_mod.F
37!|| message_mod ../starter/share/message_module/message_mod.F
38!|| submodel_mod ../starter/share/modules1/submodel_mod.F
39!||====================================================================
41 . FAIL ,MAT_ID ,FAIL_ID ,IRUPT ,
42 . TITR ,LSUBMODEL,UNITAB )
43C-----------------------------------------------
44C M o d u l e s
45C-----------------------------------------------
46 USE fail_param_mod
47 USE unitab_mod
48 USE message_mod
49 USE submodel_mod
51C-----------------------------------------------
52C I m p l i c i t T y p e s
53C-----------------------------------------------
54#include "implicit_f.inc"
55C----------+---------+---+---+--------------------------------------------
56C C o m m o n B l o c k s
57C-----------------------------------------------
58#include "units_c.inc"
59C-----------------------------------------------
60C D u m m y A r g u m e n t s
61C-----------------------------------------------
62 INTEGER ,INTENT(IN) :: FAIL_ID ! failure model ID
63 INTEGER ,INTENT(IN) :: MAT_ID ! material law ID
64 INTEGER ,INTENT(IN) :: IRUPT ! failure model type number
65 CHARACTER ,INTENT(IN) :: TITR*500 ! material model title
66 TYPE(unit_type_) ,INTENT(IN) :: UNITAB ! table of input units
67 TYPE(submodel_data),INTENT(IN) :: LSUBMODEL(*) ! submodel table
68 TYPE(fail_param_) ,INTENT(INOUT) :: FAIL ! failure model data structure
69C-----------------------------------------------
70C L o c a l V a r i a b l e s
71C-----------------------------------------------
72 INTEGER I,J,NINIEVO,FAILIP,ISHEAR,ILEN,NUPARAM,NUVAR,NTABLE
73 INTEGER,DIMENSION(:), ALLOCATABLE ::
74 . initype,evotype,evoshap,comptyp,tab_id,tab_el
75 my_real :: pthk,length_unit,rate_unit
76 my_real, DIMENSION(:), ALLOCATABLE ::
77 . sr_ref,fscale,ini_p1,el_ref,elscal,disp,ener,alpha
78 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
79C=======================================================================
80 is_encrypted = .false.
81 is_available = .false.
82C--------------------------------------------------
83C EXTRACT DATA (IS OPTION CRYPTED)
84C--------------------------------------------------
85 CALL hm_option_is_encrypted(is_encrypted)
86C======================================================================================
87C EXTRACT DATAS (REAL VALUES)
88C======================================================================================
89!---------------
90! -> Card1
91!---------------
92 CALL hm_get_intv ('NINIEVO' ,ninievo ,is_available,lsubmodel)
93 IF (ninievo == 0) ninievo = 1
94 CALL hm_get_intv ('ISHEAR' ,ishear ,is_available,lsubmodel)
95 ishear = min(ishear,1)
96 CALL hm_get_intv ('ILEN' ,ilen ,is_available,lsubmodel)
97 ilen = min(ilen,2)
98 IF (ilen == 2) THEN
99 CALL ancmsg(msgid=2094,
100 . msgtype=msginfo,
101 . anmode=aninfo_blind,
102 . i1=mat_id,
103 . c1=titr)
104 ENDIF
105 CALL hm_get_intv ('FAILIP' ,failip ,is_available,lsubmodel)
106 IF (failip == 0) failip = 1
107 CALL hm_get_floatv ('PTHK' ,pthk ,is_available,lsubmodel,unitab)
108 IF (pthk == zero) pthk = em06
109 pthk = min(pthk, one)
110 pthk = max(pthk,-one)
111!---------------
112! -> Card2
113!---------------
114 ALLOCATE(initype(ninievo),evotype(ninievo),evoshap(ninievo),comptyp(ninievo))
115 ALLOCATE(tab_id(ninievo) ,sr_ref(ninievo) ,fscale(ninievo) ,ini_p1(ninievo))
116 ALLOCATE(tab_el(ninievo) ,el_ref(ninievo) ,elscal(ninievo) )
117 ALLOCATE(disp(ninievo) ,ener(ninievo) ,alpha(ninievo) )
118 initype(1:ninievo) = 0
119 evotype(1:ninievo) = 0
120 evoshap(1:ninievo) = 0
121 comptyp(1:ninievo) = 0
122 tab_id(1:ninievo) = 0
123 tab_el(1:ninievo) = 0
124 sr_ref(1:ninievo) = zero
125 fscale(1:ninievo) = zero
126 ini_p1(1:ninievo) = zero
127 el_ref(1:ninievo) = zero
128 elscal(1:ninievo) = zero
129 disp(1:ninievo) = zero
130 ener(1:ninievo) = zero
131 alpha(1:ninievo) = zero
132 ! Loop over inievo cards
133 DO j = 1, ninievo
134 ! First line
135 CALL hm_get_int_array_index('INITYPE',initype(j),j,is_available,lsubmodel)
136 initype(j) = min(initype(j),5)
137 IF (initype(j) == 0) initype(j) = 1
138 CALL hm_get_int_array_index('EVOTYPE',evotype(j),j,is_available,lsubmodel)
139 evotype(j) = max(evotype(j),0)
140 evotype(j) = min(evotype(j),2)
141 CALL hm_get_int_array_index('EVOSHAP',evoshap(j),j,is_available,lsubmodel)
142 evoshap(j) = min(evoshap(j),2)
143 IF (evoshap(j) == 0) evoshap(j) = 1
144 CALL hm_get_int_array_index('COMPTYP',comptyp(j),j,is_available,lsubmodel)
145 comptyp(j) = min(comptyp(j),2)
146 IF (comptyp(j) == 0) comptyp(j) = 1
147 ! Second line
148 CALL hm_get_int_array_index ('TAB_ID',tab_id(j),j,is_available,lsubmodel)
149 IF (tab_id(j) == 0) THEN
150 CALL ancmsg(msgid=2088, msgtype=msgerror, anmode=aninfo_blind,
151 . i1=mat_id,
152 . i2=j)
153 ENDIF
154 CALL hm_get_float_array_index('SR_REF',sr_ref(j),j,is_available,lsubmodel,unitab)
155 IF (sr_ref(j) == zero) THEN
156 CALL hm_get_float_array_index_dim('SR_REF' ,rate_unit,j,is_available, lsubmodel, unitab)
157 sr_ref(j) = one*rate_unit
158 ENDIF
159 CALL hm_get_float_array_index('FSCALE',fscale(j),j,is_available,lsubmodel,unitab)
160 IF (fscale(j) == zero) fscale(j) = one
161 CALL hm_get_float_array_index('INI_P1',ini_p1(j),j,is_available,lsubmodel,unitab)
162 ! third line
163 CALL hm_get_int_array_index ('TAB_EL',tab_el(j),j,is_available,lsubmodel)
164 CALL hm_get_float_array_index('EL_REF',el_ref(j),j,is_available,lsubmodel,unitab)
165 IF (el_ref(j) == zero) THEN
166 CALL hm_get_float_array_index_dim('EL_REF' ,length_unit,j,is_available, lsubmodel, unitab)
167 el_ref(j) = one*length_unit
168 ENDIF
169 CALL hm_get_float_array_index('ELSCAL',elscal(j),j,is_available,lsubmodel,unitab)
170 IF (elscal(j) == zero) elscal(j) = one
171 ! Fourth line
172 CALL hm_get_float_array_index('DISP' ,disp(j) ,j,is_available,lsubmodel,unitab)
173 IF (evotype(j) == 1 .AND. disp(j) == zero) THEN
174 CALL ancmsg(msgid=2089, msgtype=msgerror, anmode=aninfo_blind,
175 . i1=mat_id,
176 . i2=j)
177 ENDIF
178 CALL hm_get_float_array_index('ALPHA' ,alpha(j),j,is_available,lsubmodel,unitab)
179 IF (alpha(j) == zero) alpha(j) = one
180 CALL hm_get_float_array_index('ENER' ,ener(j) ,j,is_available,lsubmodel,unitab)
181 IF (evotype(j) == 2 .AND. ener(j) == zero) THEN
182 CALL ancmsg(msgid=2090, msgtype=msgerror, anmode=aninfo_blind,
183 . i1=mat_id,
184 . i2=j)
185 ENDIF
186 ENDDO
187c
188C======================================================================================
189c Filling buffer tables
190C======================================================================================
191 ntable = ninievo*2
192 ! -> Number of user variables
193 nuvar = 2 + 3*ninievo
194 ! -> Number of parameters
195 nuparam = 5 + ninievo*14
196c-----------------------------------------------------
197 fail%KEYWORD = 'INIEVO'
198 fail%IRUPT = irupt
199 fail%FAIL_ID = fail_id
200 fail%NUPARAM = nuparam
201 fail%NIPARAM = 0
202 fail%NUVAR = nuvar
203 fail%NFUNC = 0
204 fail%NTABLE = ntable
205 fail%NMOD = 0
206 fail%PTHK = pthk
207c
208 ALLOCATE (fail%UPARAM(fail%NUPARAM))
209 ALLOCATE (fail%IPARAM(fail%NIPARAM))
210 ALLOCATE (fail%IFUNC (fail%NFUNC))
211 ALLOCATE (fail%TABLE (fail%NTABLE))
212
213 fail%UPARAM(1) = ninievo
214 fail%UPARAM(2) = ishear
215 fail%UPARAM(3) = ilen
216 fail%UPARAM(4) = failip
217 fail%UPARAM(5) = pthk
218c
219 fail%TABLE(1:ninievo) = tab_id(1:ninievo)
220 fail%TABLE(ninievo+1:ninievo*2) = tab_el(1:ninievo)
221c
222 DO j = 1,ninievo
223 fail%UPARAM(6 + 14*(j-1)) = initype(j)
224 fail%UPARAM(7 + 14*(j-1)) = evotype(j)
225 fail%UPARAM(8 + 14*(j-1)) = evoshap(j)
226 fail%UPARAM(9 + 14*(j-1)) = comptyp(j)
227 fail%UPARAM(10 + 14*(j-1)) = 0 ! INT_TAB_ID(J)
228 fail%UPARAM(11 + 14*(j-1)) = sr_ref(j)
229 fail%UPARAM(12 + 14*(j-1)) = fscale(j)
230 fail%UPARAM(13 + 14*(j-1)) = ini_p1(j)
231 fail%UPARAM(14 + 14*(j-1)) = 0 ! INT_TAB_EL(J)
232 fail%UPARAM(15 + 14*(j-1)) = el_ref(j)
233 fail%UPARAM(16 + 14*(j-1)) = elscal(j)
234 fail%UPARAM(17 + 14*(j-1)) = disp(j)
235 fail%UPARAM(18 + 14*(j-1)) = alpha(j)
236 fail%UPARAM(19 + 14*(j-1)) = ener(j)
237 ENDDO
238c-----------------------------------------------------
239c Printout data
240c--------------------------
241 IF (is_encrypted) THEN
242 WRITE(iout,'(5X,A,//)')'CONFIDENTIAL DATA'
243 ELSE
244 WRITE(iout,1000)
245 WRITE(iout,1100) ninievo,ishear,ilen
246 WRITE(iout,1200) failip,pthk
247 DO j = 1,ninievo
248 WRITE (iout,1300) j,initype(j),tab_id(j),sr_ref(j),fscale(j),
249 . ini_p1(j),tab_el(j),el_ref(j),elscal(j)
250 IF (evotype(j) == 1) THEN
251 IF (evoshap(j) == 1) THEN
252 WRITE (iout,1400) evotype(j),evoshap(j),comptyp(j),
253 . disp(j)
254 ELSEIF (evoshap(j) == 2) THEN
255 WRITE (iout,1500) evotype(j),evoshap(j),comptyp(j),
256 . disp(j),alpha(j)
257 ENDIF
258 ELSEIF (evotype(j) == 2) THEN
259 WRITE (iout,1600) evotype(j),evoshap(j),comptyp(j),
260 . ener(j)
261 ENDIF
262 ENDDO
263 WRITE(iout,2000)
264 ENDIF
265c--------------------------
266c Deallocation
267c--------------------------
268 IF (ALLOCATED(initype)) DEALLOCATE(initype)
269 IF (ALLOCATED(evotype)) DEALLOCATE(evotype)
270 IF (ALLOCATED(evoshap)) DEALLOCATE(evoshap)
271 IF (ALLOCATED(comptyp)) DEALLOCATE(comptyp)
272 IF (ALLOCATED(tab_id)) DEALLOCATE(tab_id)
273 IF (ALLOCATED(tab_el)) DEALLOCATE(tab_el)
274 IF (ALLOCATED(sr_ref)) DEALLOCATE(sr_ref)
275 IF (ALLOCATED(fscale)) DEALLOCATE(fscale)
276 IF (ALLOCATED(ini_p1)) DEALLOCATE(ini_p1)
277 IF (ALLOCATED(el_ref)) DEALLOCATE(el_ref)
278 IF (ALLOCATED(elscal)) DEALLOCATE(elscal)
279 IF (ALLOCATED(disp)) DEALLOCATE(disp)
280 IF (ALLOCATED(ener)) DEALLOCATE(ener)
281 IF (ALLOCATED(alpha)) DEALLOCATE(alpha)
282c-----------------------------------------------------
283 1000 FORMAT(
284 & 5x,' ---------------------------------------------------- ',/
285 & 5x,' FAILURE CRITERION : INIEVO ',/,
286 & 5x,' ---------------------------------------------------- ',/)
287 1100 FORMAT(
288 & 5x,'NUMBER OF INIEVO CRITERIA. . . . . . . . . . . . . . . .=',i10,/,
289 & 5x,'TRANSVERSE SHEAR FLAG (SHELLS ONLY) . . . . . . . . . .=',i10,/,
290 & 5x,' ISHEAR = 0: TRANSVERSE SHEAR STRESS COMPONENTS NOT CONSIDERED ',/,
291 & 5x,' ISHEAR = 1: TRANSVERSE SHEAR STRESS COMPONENTS CONSIDERED ',/,
292 & 5x,'ELEMENT CHARACTERISTIC LENGTH FLAG . . . . . . . . . . .=',i10,/,
293 & 5x,' ILEN = 0: INITIAL GEOMETRIC FORMULATION ',/,
294 & 5x,' ILEN = 1: INITIAL CRITICAL TIMESTEP FORMULATION ',/,
295 & 5x,' ILEN = 2: CURRENT GEOMETRIC FORMULATION (SHELLS ONLY)',/)
296 1200 FORMAT(
297 & 5x,'ELEMENT DELETION PARAMETERS: ',/,
298 & 5x,'number of failed intg. points prior to solid deletion . =',I10,/,
299 & 5X,'shell element deletion PARAMETER pthickfail . . . . . . =',1PG20.13,/,
300 & 5X,' > 0.0 : fraction of failed thickness ',/,
301 & 5X,' < 0.0 : fraction of failed intg. points or layers ',/)
302 1300 FORMAT(
303 & 5X,'|| inievo criterion number #',I3,/,
304 & 5x,' ------------------------------------------------- ',/,
305 & 5x,'> INITIATION PARAMETERS: ',/,
306 & 5x,'DAMAGE INITIATION TYPE . . . . . . . . . . . . . . . . =',i10,/,
307 & 5x,' TABLE DEFINING PLASTIC STRAIN AT FAILURE WITH: ',/,
308 & 5x,' = 1: TRIAXIALITY VS STRAIN RATE ',/,
309 & 5x,' = 2: SHEAR INFLUENCE VS STRAIN RATE ',/,
310 & 5x,' = 3: PRINC. STRAIN RATES RATIO VS STRAIN RATE (TRIAX > 0.0)',/,
311 & 5x,' = 4: PRINC. STRAIN RATES RATIO VS STRAIN RATE ',/,
312 & 5x,' = 5: STRESS STATE PARAMETER VS STRAIN RATE ',/,
313 & 5x,'INITIATION TABLE IDENTIFIER. . . . . . . . . . . . . . =',i10,/,
314 & 5x,' REFERENCE STRAIN RATE . . . . . . . . . . . . . . .=',1pg20.13/,
315 & 5x,' SCALE FACTOR . . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
316 & 5x,'DAMAGE INITIATION PARAMETER . . . . . . . . . . . . . .=',1pg20.13/,
317 & 5x,' INI. TYPE = 1: NOT USED ',/,
318 & 5x,' INI. TYPE = 2: PRESSURE INFLUENCE PARAMETER ',/,
319 & 5x,' INI. TYPE = 3: DIRECT / INCREMENTAL FORMULATION ',/,
320 & 5x,' INI. TYPE = 4: DIRECT / INCREMENTAL FORMULATION ',/,
321 & 5x,' INI. TYPE = 5: TRIAXIALITY INFLUENCE PARAMETER ',/,
322 & 5x,'ELEMENT SIZE SCALING TABLE IDENTIFIER . . . . . . . . =',i10,/,
323 & 5x,' REFERENCE SIZE . . . . . . . . . . . . . . . . . . .=',1pg20.13/,
324 & 5x,' SCALE FACTOR . . . . . . . . . . . . . . . . . . . .=',1pg20.13/)
325 1400 FORMAT(
326 & 5x,'> EVOLUTION PARAMETERS: ',/,
327 & 5x,'DAMAGE EVOLUTION TYPE . . . . . . . . . . . . . . . . =',i10,/,
328 & 5x,' = 1: PLASTIC DISPLACEMENT ',/,
329 & 5x,' = 2: FRACTURE ENERGY ',/,
330 & 5x,'DAMAGE EVOLUTION SHAPE . . . . . . . . . . . . . . . . =',i10,/,
331 & 5x,' = 1: LINEAR ',/,
332 & 5x,' = 2: EXPONENTIAL ',/,
333 & 5x,'DAMAGE EVOLUTION COMBINATION . . . . . . . . . . . . . =',i10,/,
334 & 5x,' = 1: MAXIMUM DAMAGE ',/,
335 & 5x,' = 2: MULTIPLICATIVE ',/,
336 & 5x,'PLASTIC DISPLACEMENT AT FAILURE . . . . . . . . . . . .=',1pg20.13/)
337 1500 FORMAT(
338 & 5x,'> EVOLUTION PARAMETERS: ',/,
339 & 5x,'DAMAGE EVOLUTION TYPE . . . . . . . . . . . . . . . . =',i10,/,
340 & 5x,' = 1: PLASTIC DISPLACEMENT ',/,
341 & 5x,' = 2: FRACTURE ENERGY ',/,
342 & 5x,'DAMAGE EVOLUTION SHAPE . . . . . . . . . . . . . . . . =',i10,/,
343 & 5x,' = 1: LINEAR ',/,
344 & 5x,' = 2: EXPONENTIAL ',/,
345 & 5x,'DAMAGE EVOLUTION COMBINATION . . . . . . . . . . . . . =',i10,/,
346 & 5x,' = 1: MAXIMUM DAMAGE ',/,
347 & 5x,' = 2: MULTIPLICATIVE ',/,
348 & 5x,'PLASTIC DISPLACEMENT AT FAILURE . . . . . . . . . . . .=',1pg20.13/,
349 & 5x,'EXPONENTIAL EVOLUTION PARAMETER . . . . . . . . . . . .=',1pg20.13/)
350 1600 FORMAT(
351 & 5x,'> EVOLUTION PARAMETERS: ',/,
352 & 5x,'DAMAGE EVOLUTION TYPE . . . . . . . . . . . . . . . . =',i10,/,
353 & 5x,' = 1: PLASTIC DISPLACEMENT ',/,
354 & 5x,' = 2: FRACTURE ENERGY ',/,
355 & 5x,'DAMAGE EVOLUTION SHAPE . . . . . . . . . . . . . . . . =',i10,/,
356 & 5x,' = 1: LINEAR ',/,
357 & 5x,' = 2: EXPONENTIAL ',/,
358 & 5x,'DAMAGE EVOLUTION COMBINATION . . . . . . . . . . . . . =',i10,/,
359 & 5x,' = 1: MAXIMUM DAMAGE ',/,
360 & 5x,' = 2: MULTIPLICATIVE ',/,
361 & 5x,'FRACTURE ENERGY . . . . . . . . . . . . . . . . . . . .=',1pg20.13/)
362 2000 FORMAT(
363 & 5x,' -------------------------------------------------------',//)
364c-----------
365 END
#define my_real
Definition cppsort.cpp:32
#define alpha
Definition eval.h:35
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
subroutine hm_get_float_array_index_dim(name, dim_fac, index, is_available, lsubmodel, unitab)
subroutine hm_get_floatv(name, rval, is_available, lsubmodel, unitab)
subroutine hm_get_int_array_index(name, ival, index, is_available, lsubmodel)
subroutine hm_get_intv(name, ival, is_available, lsubmodel)
subroutine hm_option_is_encrypted(is_encrypted)
subroutine hm_read_fail_inievo(fail, mat_id, fail_id, irupt, titr, lsubmodel, unitab)
#define min(a, b)
Definition macros.h:20
#define max(a, b)
Definition macros.h:21
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