40
41
42
43
44
45
46 USE fail_param_mod
53
54
55
56#include "implicit_f.inc"
57
58
59
60#include "units_c.inc"
61
62
63
64 INTEGER ,INTENT(IN) :: FAIL_ID
65 INTEGER ,INTENT(IN) :: MAT_ID
66 INTEGER ,INTENT(IN) :: IRUPT
67 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
68 TYPE(UNIT_TYPE_) ,INTENT(IN) :: UNITAB
69 TYPE(SUBMODEL_DATA),INTENT(IN) :: LSUBMODEL(*)
70 INTEGER ,INTENT(INOUT) :: NLOC_MOD
71 TYPE(FAIL_PARAM_) ,INTENT(INOUT) :: FAIL
72
73
74
75 INTEGER :: ILOC
76 my_real :: q1,q2,q3,epn,as,kw,fc,fr,f0,rlen,hkhi,le_max
77 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
78
79
80
81 is_encrypted = .false.
82 is_available = .false.
83
85
86
87
88
89 CALL hm_get_floatv (
'FAIL_q1' ,q1 ,is_available,lsubmodel,unitab)
90 CALL hm_get_floatv (
'FAIL_q2' ,q2 ,is_available,lsubmodel,unitab)
91 CALL hm_get_intv (
'FAIL_Iloc' ,iloc ,is_available,lsubmodel)
92
93 CALL hm_get_floatv (
'FAIL_eps_strain',epn ,is_available,lsubmodel,unitab)
94 CALL hm_get_floatv (
'FAIL_As' ,as ,is_available,lsubmodel,unitab)
95 CALL hm_get_floatv (
'FAIL_Kw' ,kw ,is_available,lsubmodel,unitab)
96
97 CALL hm_get_floatv (
'FAIL_Fc' ,fc ,is_available,lsubmodel,unitab)
99 CALL hm_get_floatv ('fail_f0
' ,F0 ,IS_AVAILABLE,LSUBMODEL,UNITAB)
100 ! Card 4
101 CALL HM_GET_FLOATV ('fail_rlen' ,RLEN ,IS_AVAILABLE,LSUBMODEL,UNITAB)
102 CALL HM_GET_FLOATV ('fail_hchi' ,HKHI ,IS_AVAILABLE,LSUBMODEL,UNITAB)
103 CALL HM_GET_FLOATV ('fail_le_max' ,LE_MAX ,IS_AVAILABLE,LSUBMODEL,UNITAB)
104
105 ! Checking Gurson yield criterion parameters
106 IF (Q1 == ZERO) Q1 = THREE_HALF
107 IF (Q2 == ZERO) Q2 = ONE
108 Q3 = Q1**2
109 ! Checking value of nucleation function
110 IF (AS == ZERO) THEN
111 ! No nucleation trigger
112 EPN = INFINITY
113 ENDIF
114 ! Checking value of coalescence function
115 IF (FC == ZERO) FC = INFINITY
116 IF (FR == ZERO) FR = TWO*INFINITY
117 IF (FC >= FR) THEN
118 ! Error message
119 CALL ANCMSG(MSGID=1747,MSGTYPE=MSGERROR,
120 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR)
121 ENDIF
122 IF (F0 >= FC) THEN
123 ! Warning message
124 CALL ANCMSG(MSGID=1748,MSGTYPE=MSGWARNING,
125 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR)
126 ENDIF
127
128 ! Choice of the non-local regularization method
129
130
131
132 IF (ILOC == 0) ILOC = 1
133 NLOC_MOD = ILOC-1
134
135 ! Automatic Rlen computation
136 IF (LE_MAX > ZERO) THEN
137 CALL GET_LENGTH(RLEN,LE_MAX)
138 ! Or printout the maximum element length target for convergence
139 ELSE
140 CALL GET_LEMAX(LE_MAX,RLEN)
141 ENDIF
142
143 ! Micromorphic penalty parameter (homogeneous to a stress [MPa])
144 IF (ILOC /= 2) THEN
145 HKHI = ZERO ! only used for micromorphic
146 ENDIF
147
148 FAIL%KEYWORD = 'gurson'
149 FAIL%IRUPT = IRUPT
150 FAIL%FAIL_ID = FAIL_ID
151 FAIL%NUPARAM = 12
152 FAIL%NIPARAM = 0
153 FAIL%NUVAR = 0
154 FAIL%NFUNC = 0
155 FAIL%NTABLE = 0
156 FAIL%NMOD = 0
157
158 ALLOCATE (FAIL%UPARAM(FAIL%NUPARAM))
159 ALLOCATE (FAIL%IPARAM(FAIL%NIPARAM))
160 ALLOCATE (FAIL%IFUNC (FAIL%NFUNC))
161 ALLOCATE (FAIL%TABLE (FAIL%NTABLE))
162
163 FAIL%UPARAM(1) = NLOC_MOD ! non-local variable regularization flag
164 FAIL%UPARAM(2) = Q1 ! Gurson yield criterion 1st parameter
165 FAIL%UPARAM(3) = Q2 ! Gurson yield criterion 2nd parameter
166 FAIL%UPARAM(4) = Q3 ! Gurson yield criterion 3rd parameter
167 FAIL%UPARAM(5) = EPN ! Trigger plastic strain for nucleation
168 FAIL%UPARAM(6) = AS ! Nucleation rate
169 FAIL%UPARAM(7) = KW ! Nahshon-Hutchinson shear parameter
170 FAIL%UPARAM(8) = FR ! Failure void volume fraction
171 FAIL%UPARAM(9) = FC ! Critical void volume fraction
172 FAIL%UPARAM(10)= F0 ! Initial void volume fraction
173 FAIL%UPARAM(11)= RLEN ! Non-local internal length
174 FAIL%UPARAM(12)= HKHI ! Micromorphic penalty parameter
175
176 IF (IS_ENCRYPTED) THEN
177 WRITE(IOUT,'(5x,a,//)')'confidential data'
178 ELSE
179 WRITE(IOUT, 1100) Q1,Q2,EPN,AS,KW,F0,FC,FR,ILOC
180 IF (ILOC > 1) WRITE(IOUT, 1200) RLEN,LE_MAX
181 IF (ILOC == 2) WRITE(IOUT, 1300) HKHI
182 ENDIF
183
184 RETURN
185
186 1100 FORMAT(
187 & 5X,40H GURSON DUCTILE DAMAGE MODEL /,
188 & 5X,40H ------------------------------------ /,
189 & 5X,'q1 gurson coefficient. . . . . . . . . . . . . . . =',1PG20.13/
190 & 5X,'q2 gurson coefficient. . . . . . . . . . . . . . . =',1PG20.13/
191 & 5X,'nucleation plastic strain. . . . . . . . . . . . . =',1PG20.13/
192 & 5X,'as nucleation slope. . . . . . . . . . . . . . . . =',1PG20.13/
193 & 5X,'shear damage coefficient . . . . . . . . . . . . . =',1PG20.13/
194
195 & 5X,'initial void volume fraction . . . . . . . . . . . =',1PG20.13/
196 & 5X,'critical void volume fraction. . . . . . . . . . . =',1PG20.13/
197 & 5X,'rupture void volume fraction . . . . . . . . . . . =',1PG20.13/
198 & 5X,'non local plastic strain regularization flag . . . =',I3/
199 & 5X,' iloc=1 local damage model '/
200 & 5X,' iloc=2 non local micromorphic model '/
201 & 5X,' iloc=3 non local peerling model ')
202 1200 FORMAT(
203 & 5X,'non-local regularization length. . . . . . . . . . =',1PG20.13/
204 & 5X,'convergence element length TARGET. . . . . . . . . =',1PG20.13/)
205 1300 FORMAT(
206 & 5X,'penalty
PARAMETER for nonlocal micromorphic method =
',1PG20.13/)
207
208 RETURN
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)
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle