OpenRadioss 2025.1.11
OpenRadioss project
Loading...
Searching...
No Matches
hm_read_mat110.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_mat110 ../starter/source/materials/mat/mat110/hm_read_mat110.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_float_array_index ../starter/source/devtools/hm_reader/hm_get_float_array_index.F
30!|| hm_get_floatv ../starter/source/devtools/hm_reader/hm_get_floatv.F
31!|| hm_get_floatv_dim ../starter/source/devtools/hm_reader/hm_get_floatv_dim.F
32!|| hm_get_intv ../starter/source/devtools/hm_reader/hm_get_intv.F
33!|| hm_option_is_encrypted ../starter/source/devtools/hm_reader/hm_option_is_encrypted.F
34!|| init_mat_keyword ../starter/source/materials/mat/init_mat_keyword.F
35!||--- uses -----------------------------------------------------
36!|| elbuftag_mod ../starter/share/modules1/elbuftag_mod.F
37!|| message_mod ../starter/share/message_module/message_mod.F
38!|| submodel_mod ../starter/share/modules1/submodel_mod.f
39!||====================================================================
40 SUBROUTINE hm_read_mat110(
41 . UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,NTABL ,
42 . MTAG ,PARMAT ,UNITAB ,PM ,LSUBMODEL,
43 . ISRATE ,MAT_ID ,TITR ,ITABLE ,MAXTABL ,
44 . NVARTMP ,MATPARAM )
45C-----------------------------------------------
46C M o d u l e s
47C-----------------------------------------------
48 USE unitab_mod
49 USE message_mod
50 USE submodel_mod
51 USE elbuftag_mod
52 USE matparam_def_mod
54C-----------------------------------------------
55C I m p l i c i t T y p e sXM
56C-----------------------------------------------
57#include "implicit_f.inc"
58C-----------------------------------------------
59C C o m m o n B l o c k s
60C-----------------------------------------------
61#include "units_c.inc"
62#include "param_c.inc"
63C-----------------------------------------------
64C D u m m y A r g u m e n t s
65C-----------------------------------------------
66 TYPE (UNIT_TYPE_),INTENT(IN) ::UNITAB
67 INTEGER, INTENT(IN) :: MAT_ID,MAXUPARAM,MAXTABL
68 my_real, DIMENSION(NPROPM) ,INTENT(INOUT) :: PM
69 CHARACTER(LEN=NCHARTITLE) ,INTENT(IN) :: TITR
70 INTEGER, INTENT(INOUT) :: ISRATE,ITABLE(MAXTABL)
71 INTEGER, INTENT(INOUT) :: NUPARAM,NUVAR,NTABL,NVARTMP
72 my_real, DIMENSION(MAXUPARAM) ,INTENT(INOUT) :: uparam
73 my_real, DIMENSION(100),INTENT(INOUT) :: parmat
74 TYPE(submodel_data), DIMENSION(*),INTENT(IN) :: LSUBMODEL
75 TYPE(mlaw_tag_), INTENT(INOUT) :: MTAG
76 TYPE(MATPARAM_STRUCT_),INTENT(INOUT) :: MATPARAM
77C
78C-----------------------------------------------
79C L o c a l V a r i a b l e s
80C-----------------------------------------------
81 INTEGER I, J, K, ILAW, Ivflag, NANGLE, INFO, Icrit, TAB_YLD, Ismooth,
82 . TAB_TEMP,ITER,Ires
83C REAL
84 my_real
85 . rho0,young,nu,yld0,dsigm,beta,omega,nexp,eps0,sigstar,dg0,
86 . deps0,mexp,fbi,rhobi,rhor,bulk,a11,g,n1,n2,m1,m2,a1,a2,c1,c2,
87 . asrate,kboltz,xscale,yscale,fisokin,tini,rhobi_theta,b1,b2,mu,
88 . xscale_unit,yscale_unit
90 . f1,f2,df1_dmu,df2_dmu,d2f1_d2mu,d2f2_d2mu,eig1,eig2,
91 . dphi_dsig1,dphi_dsig2,dmu_dsig1,dmu_dsig2,mineig,thet,da_dcos2(2),
92 . db_dcos2(2),dc_dcos2(2),d2a_d2cos2(2),d2b_d2cos2(2),d2c_d2cos2(2),
93 . dthet_dcos2,d2thet_d2thetcos2,df1_dcos2,df2_dcos2,dphi_dcos2,
94 . d2f1_d2cos2,d2f2_d2cos2,d2f1_d2mucos2,d2f2_d2mucos2,mineigmu,
95 . mineigthet,numer,dnumer_dmu,dnumer_dcos2,denom,ddenom_dmu,ddenom_dcos2,
96 . dmu_dcos2,t(3,3),d(3,3),weight,dweight_dcos2,d2weight_d2cos2,u,uprim,upprim,
97 . du_dmu,duprim_dmu,v,vprim,vpprim,dv_dmu,dvprim_dmu,w0,fun_av,rlank_av,
98 . fbi_min,fbi_max,fbi_trans,adirac,fdirac,fps_min,fps_max,fps_trans,
99 . fsh_min,fsh_max,fsh_trans,fh(2),fps1,rhoone_theta,phi,dfps1_dweight
100 real*8 :: cos2(10,10),d2phi_d2(3,3),work(102),wr(3),wi(3),vl(3,3),vr(3,3)
101 real*8 , DIMENSION(:,:), ALLOCATABLE :: amat,bvec
102 my_real, DIMENSION(:,:), ALLOCATABLE :: fun,fsh,fps,hips,hiun,hish,
103 . q_fsh,q_fun,q_fps,q_hiun,q_hips,q_hish
104 my_real, DIMENSION(:) , ALLOCATABLE :: rlank,theta,theta_rad,
105 . wps,wsh,q_wsh,q_wps,alps,rm,ag,
106 . epsag,sigag,cag,epseq
107 INTEGER, DIMENSION(:), ALLOCATABLE :: IPIV
108 my_real, PARAMETER :: tol = 1.0d-6
109C
110 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
111C
112 DATA cos2/
113 1 1. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
114 2 0. ,1. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
115 3 -1. ,0. ,2. ,0. ,0. ,0. ,0. ,0. ,0. ,0. ,
116 4 0. ,-3. ,0. ,4. ,0. ,0. ,0. ,0. ,0. ,0. ,
117 5 1. ,0. ,-8. ,0. ,8. ,0. ,0. ,0. ,0. ,0. ,
118 6 0. ,5. ,0. ,-20. ,0. ,16. ,0. ,0. ,0. ,0. ,
119 7 -1. ,0. ,18. ,0. ,-48. ,0. ,32. ,0. ,0. ,0. ,
120 8 0. ,-7. ,0. ,56. ,0. ,-112.,0. ,64. ,0. ,0. ,
121 9 1. ,0. ,-32. ,0. ,160. ,0. ,-256.,0. ,128. ,0. ,
122 a 0. ,9. ,0. ,-120.,0. ,432. ,0. ,-576 ,0. ,256. /
123C=======================================================================
124 is_encrypted = .false.
125 is_available = .false.
126 ilaw = 110
127c------------------------------------------
128 CALL hm_option_is_encrypted(is_encrypted)
129c------------------------------------------
130c
131card1 - Density
132 CALL hm_get_floatv('MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
133 CALL hm_get_floatv('Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
134card2 - Elasticity
135 CALL hm_get_floatv('MAT_E' ,young ,is_available, lsubmodel, unitab)
136 CALL hm_get_floatv('MAT_NU' ,nu ,is_available, lsubmodel, unitab)
137 CALL hm_get_intv ('MAT_Ires' ,ires ,is_available, lsubmodel)
138card3
139 CALL hm_get_intv ('MAT_Icrit' ,icrit ,is_available, lsubmodel)
140 ! Default : classical Vegter yield locus
141 IF (icrit == 0) icrit = 1
142 IF (icrit > 4) THEN
143 CALL ancmsg(msgid=1776,msgtype=msgerror,
144 . anmode=aninfo_blind_1,i1=mat_id,c1=titr,
145 . i2=icrit)
146 ENDIF
147 CALL hm_get_intv ('MAT_TAB_YLD',tab_yld ,is_available, lsubmodel)
148 CALL hm_get_floatv('MAT_Xscale',xscale ,is_available, lsubmodel, unitab)
149 CALL hm_get_floatv('MAT_Yscale',yscale ,is_available, lsubmodel, unitab)
150 CALL hm_get_floatv('MAT_fBI' ,fbi ,is_available, lsubmodel, unitab)
151 CALL hm_get_floatv('MAT_rhoBI' ,rhobi ,is_available, lsubmodel, unitab)
152c
153card4 - Hardening
154 CALL hm_get_floatv('SIGMA_r' ,yld0 ,is_available, lsubmodel, unitab)
155 IF ((tab_yld == 0).AND.(yld0==zero)) THEN
156 CALL ancmsg(msgid=1777,msgtype=msgerror,
157 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
158 ENDIF
159 CALL hm_get_floatv('MAT_DSIGM' ,dsigm ,is_available, lsubmodel, unitab)
160 CALL hm_get_floatv('MAT_BETA' ,beta ,is_available, lsubmodel, unitab)
161 CALL hm_get_floatv('Omega' ,omega ,is_available, lsubmodel, unitab)
162 CALL hm_get_floatv('MAT_HARD' ,nexp ,is_available, lsubmodel, unitab)
163c
164card5 - Strain-rate and temperature dependency
165 CALL hm_get_floatv('Epsilon_0' ,eps0 ,is_available, lsubmodel, unitab)
166 CALL hm_get_floatv('MAT_SIGS' ,sigstar ,is_available, lsubmodel, unitab)
167 CALL hm_get_floatv('MAT_DG0' ,dg0 ,is_available, lsubmodel, unitab)
168 CALL hm_get_floatv('MAT_Deps0' ,deps0 ,is_available, lsubmodel, unitab)
169 CALL hm_get_floatv('MAT_StrainRate_m',mexp ,is_available, lsubmodel, unitab)
170c
171card6 - Strain-rate computation
172 CALL hm_get_floatv('T_Initial' ,tini ,is_available, lsubmodel, unitab)
173 IF (tini==zero) THEN
174 CALL ancmsg(msgid=1778,msgtype=msgwarning,
175 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
176 ENDIF
177 CALL hm_get_floatv('MAT_CHARD' ,fisokin ,is_available, lsubmodel, unitab)
178 CALL hm_get_floatv('Fcut' ,asrate ,is_available, lsubmodel, unitab)
179 CALL hm_get_intv ('Vflag' ,ivflag ,is_available, lsubmodel)
180 CALL hm_get_intv ('MAT_Ismooth',ismooth ,is_available, lsubmodel)
181 CALL hm_get_intv ('MAT_TAB_TEMP' ,tab_temp ,is_available, lsubmodel)
182card7 - Yield criterion parameters
183 ! Classical Vegter yield locus
184 nangle = 0
185 IF (icrit == 1) THEN
186 CALL hm_get_intv('MAT_refanglemax',nangle,is_available,lsubmodel)
187 IF (nangle > 10) THEN
188 CALL ancmsg(msgid=1779,msgtype=msgerror,
189 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
190 ENDIF
191 IF (.NOT.ALLOCATED(fun)) ALLOCATE(fun(nangle,2))
192 IF (.NOT.ALLOCATED(fsh)) ALLOCATE(fsh(nangle,2))
193 IF (.NOT.ALLOCATED(fps)) ALLOCATE(fps(nangle,2))
194 fps(1:nangle,1:2) = zero
195 IF (.NOT.ALLOCATED(rlank)) ALLOCATE(rlank(nangle))
196 ! Loop over angles (must be equally distributed between 0 and pi/2)
197 DO j = 1, nangle
198 CALL hm_get_float_array_index('MAT_fUN_THETA' ,fun(j,1),j,is_available, lsubmodel, unitab)
199 CALL hm_get_float_array_index('MAT_R_THETA' ,rlank(j),j,is_available, lsubmodel, unitab)
200 IF (rlank(j) == 0) rlank(j) = one
201 CALL hm_get_float_array_index('MAT_fPS1_THETA',fps(j,1),j,is_available, lsubmodel, unitab)
202 CALL hm_get_float_array_index('MAT_fPS2_THETA',fps(j,2),j,is_available, lsubmodel, unitab)
203 CALL hm_get_float_array_index('MAT_fSH_THETA' ,fsh(j,1),j,is_available, lsubmodel, unitab)
204 ENDDO
205 ! Standard Vegter yield locus
206 ELSEIF (icrit == 2) THEN
207 CALL hm_get_intv('MAT_refanglemax',nangle,is_available,lsubmodel)
208 IF (nangle > 10) THEN
209 CALL ancmsg(msgid=1779,msgtype=msgerror,
210 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
211 ENDIF
212 IF (.NOT.ALLOCATED(fun)) ALLOCATE(fun(nangle,2))
213 IF (.NOT.ALLOCATED(fsh)) ALLOCATE(fsh(nangle,2))
214 IF (.NOT.ALLOCATED(fps)) ALLOCATE(fps(nangle,2))
215 fps(1:nangle,1:2) = zero
216 IF (.NOT.ALLOCATED(alps)) ALLOCATE(alps(nangle))
217 IF (.NOT.ALLOCATED(rlank)) ALLOCATE(rlank(nangle))
218 ! Loop over angles (must be equally distributed between 0 and pi/2)
219 DO j = 1, nangle
220 CALL hm_get_float_array_index('MAT_fUN_THETA' ,fun(j,1),j,is_available, lsubmodel, unitab)
221 CALL hm_get_float_array_index('MAT_R_THETA' ,rlank(j),j,is_available, lsubmodel, unitab)
222 IF (rlank(j) == 0) rlank(j) = one
223 CALL hm_get_float_array_index('MAT_fPS1_THETA',fps(j,1),j,is_available, lsubmodel, unitab)
224 CALL hm_get_float_array_index('MAT_ALPS_THETA',alps(j) ,j,is_available, lsubmodel, unitab)
225 IF (alps(j) == zero) alps(j) = half
226 CALL hm_get_float_array_index('MAT_fSH_THETA' ,fsh(j,1),j,is_available, lsubmodel, unitab)
227 ENDDO
228 ! Vegter - 2017 yield locus
229 ELSEIF (icrit == 3) THEN
230 ! Number of angle is fixed to three in this case
231 nangle = 3
232 IF (.NOT.ALLOCATED(rm)) ALLOCATE(rm(nangle))
233 IF (.NOT.ALLOCATED(ag)) ALLOCATE(ag(nangle))
234 IF (.NOT.ALLOCATED(epsag)) ALLOCATE(epsag(nangle))
235 IF (.NOT.ALLOCATED(sigag)) ALLOCATE(sigag(nangle))
236 IF (.NOT.ALLOCATED(cag)) ALLOCATE(cag(nangle))
237 IF (.NOT.ALLOCATED(epseq)) ALLOCATE(epseq(nangle))
238 IF (.NOT.ALLOCATED(fun)) ALLOCATE(fun(nangle,2))
239 IF (.NOT.ALLOCATED(fsh)) ALLOCATE(fsh(nangle,2))
240 IF (.NOT.ALLOCATED(fps)) ALLOCATE(fps(nangle,2))
241 IF (.NOT.ALLOCATED(rlank)) ALLOCATE(rlank(nangle))
242 IF (.NOT.ALLOCATED(theta)) ALLOCATE(theta(nangle))
243 IF (.NOT.ALLOCATED(theta_rad)) ALLOCATE(theta_rad(nangle))
244 CALL hm_get_floatv('MAT_RM_0' ,rm(1) ,is_available, lsubmodel, unitab)
245 CALL hm_get_floatv('MAT_RM_45' ,rm(2) ,is_available, lsubmodel, unitab)
246 CALL hm_get_floatv('MAT_RM_90' ,rm(3) ,is_available, lsubmodel, unitab)
247 CALL hm_get_floatv('MAT_AG_0' ,ag(1) ,is_available, lsubmodel, unitab)
248 CALL hm_get_floatv('MAT_AG_45' ,ag(2) ,is_available, lsubmodel, unitab)
249 CALL hm_get_floatv('MAT_AG_90' ,ag(3) ,is_available, lsubmodel, unitab)
250 CALL hm_get_floatv('MAT_R_0' ,rlank(1) ,is_available, lsubmodel, unitab)
251 IF (rlank(1) == zero) rlank(1) = one
252 CALL hm_get_floatv('MAT_R_45' ,rlank(2) ,is_available, lsubmodel, unitab)
253 IF (rlank(2) == zero) rlank(2) = one
254 CALL hm_get_floatv('MAT_R_90' ,rlank(3) ,is_available, lsubmodel, unitab)
255 IF (rlank(3) == zero) rlank(3) = one
256c
257 ! Computation of uniaxial reference point
258 ! Uniaxial strain at AG
259 epsag(1) = log(one + ag(1)/hundred)
260 epsag(2) = log(one + ag(2)/hundred)
261 epsag(3) = log(one + ag(3)/hundred)
262 ! Uniaxial stress at AG
263 sigag(1) = rm(1)*(one + ag(1)/hundred)
264 sigag(2) = rm(2)*(one + ag(2)/hundred)
265 sigag(3) = rm(3)*(one + ag(3)/hundred)
266 ! Energy at 0 deg direction
267 cag(1) = sigag(1)/(epsag(1)**epsag(1))
268 cag(2) = sigag(2)/(epsag(2)**epsag(2))
269 cag(3) = sigag(3)/(epsag(3)**epsag(3))
270 w0 = (cag(1)/(epsag(1) + one))*((epsag(1))**(epsag(1)+one))
271 ! Equivalent strain
272 epseq(1) = ((epsag(1)+one)*(w0/cag(1)))**(one/(epsag(1)+one))
273 epseq(2) = ((epsag(2)+one)*(w0/cag(2)))**(one/(epsag(2)+one))
274 epseq(3) = ((epsag(3)+one)*(w0/cag(3)))**(one/(epsag(3)+one))
275 ! Reference point
276 fun(1,1) = epsag(1)/epseq(1)
277 fun(2,1) = epsag(1)/epseq(2)
278 fun(3,1) = epsag(1)/epseq(3)
279c
280 ! Computation of biaxial reference point
281 fun_av = (fun(1,1) + two*fun(2,1) + fun(3,1))/four
282 rlank_av = (rlank(1) + two*rlank(2) + rlank(3))/four
283 fbi_min = 0.97d0
284 fbi_max = 1.14d0
285 fbi_trans = 1.22d0
286 adirac = 3.4d0
287 fdirac = exp(adirac*(rlank_av-fbi_trans))
288 fbi = fun_av*((fbi_min/(one+fdirac)) + (fbi_max/(one+(one/fdirac))))
289 IF (rhobi == zero) THEN
290 rhobi = rlank(1)/rlank(3)
291 ENDIF
292c
293 ! Computation of plane strain reference point first coordinate
294 fps_min = 0.827d0
295 fps_max = 1.315d0
296 fps_trans = 0.5d0
297 adirac = 1.2d0
298 DO j = 1,nangle
299 fdirac = exp(adirac*(rlank(j)-fps_trans))
300 fps(j,1) = fun(j,1)*((fps_min/(one+fdirac)) + (fps_max/(one+(one/fdirac))))
301 ENDDO
302c
303 ! Computation of shear reference point first coordinate
304 fsh_min = 0.757d0
305 fsh_max = 0.525d0
306 fsh_trans = zero
307 adirac = 1.6d0
308 fun_av = (fun(1,1)+fun(3,1))/two
309 rlank_av = (rlank(1)+rlank(3))/two
310 fdirac = exp(adirac*(rlank_av - fsh_trans))
311 fsh(1,1) = fun_av*((fsh_min/(one+fdirac)) + (fsh_max/(one+(one/fdirac))))
312 fsh(3,1) = fun_av*((fsh_min/(one+fdirac)) + (fsh_max/(one+(one/fdirac))))
313 fdirac = exp(adirac*(rlank(2)-fsh_trans))
314 fsh(2,1) = fun(2,1)*((fsh_min/(one+fdirac)) + (fsh_max/(one+(one/fdirac))))
315c
316 ! Computation of plane strain reference point second coordinate
317 DO j = 1, nangle
318 ! Angle theta with respect to rolling direction
319 theta(j) = (j-1)*(90.0d0/(nangle-1))
320 theta_rad(j) = theta(j)*(pi/180.0d0)
321 ! Strain-rate ratio
322 rhobi_theta = (rhobi + one) + (rhobi - one)*cos(two*theta_rad(j))
323 rhobi_theta = rhobi_theta / ((rhobi + one) - (rhobi - one)*cos(two*theta_rad(j)))
324 rhoone_theta = -rlank(j)/(rlank(j)+one)
325 ! Virtual hinge point
326 fh(2) = (fbi + rhobi_theta*fbi - fun(j,1))/(rhobi_theta - rhoone_theta)
327 fh(1) = fbi - rhobi_theta*(fh(2)-fbi)
328 ! Initialization of the computation of Weight
329 mu = half
330 weight = zero
331 fps1 = (fun(j,1)*((one - mu)**2) + two*fh(1)*mu*weight*(one-mu) + fbi*(mu**2))/
332 . ((one-mu)**2 + two*weight*mu*(one-mu) + mu**2)
333 phi = fps1-fps(j,1)
334 ! Newton iteration to compute WEIGHT
335 DO iter = 1,10
336 ! Derivative of fPS1 with respect to WEIGHT
337 u = fun(j,1)*((one - mu)**2) + two*fh(1)*mu*weight*(one-mu) + fbi*(mu**2)
338 uprim = two*mu*(one-mu)*fh(1)
339 v = (one-mu)**2 + two*weight*mu*(one-mu) + mu**2
340 vprim = two*mu*(one-mu)
341 dfps1_dweight = (uprim*v - u*vprim)/(max(v**2,em20))
342 ! Updating the Weight
343 weight = weight - (phi / dfps1_dweight)
344 ! Updating the fPS1 value
345 fps1 = (fun(j,1)*((one - mu)**2) + two*fh(1)*mu*weight*(one-mu) + fbi*(mu**2))/
346 . ((one-mu)**2 + two*weight*mu*(one-mu) + mu**2)
347 ! Updating the PHI value
348 phi = fps1-fps(j,1)
349 ENDDO
350 ! Filling the second coordinate of the plane-strain point
351 fps(j,2) = (two*fh(2)*mu*weight*(one-mu) + fbi*(mu**2))/
352 . ((one-mu)**2 + two*weight*mu*(one-mu) + mu**2)
353 ENDDO
354c
355 ! Simplified Vegter lite yield locus
356 ELSE
357 CALL hm_get_intv('MAT_refanglemax',nangle,is_available,lsubmodel)
358 IF (nangle > 10) THEN
359 CALL ancmsg(msgid=1779,msgtype=msgerror,
360 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
361 ENDIF
362 IF (.NOT.ALLOCATED(fun)) ALLOCATE(fun(nangle,2))
363 IF (.NOT.ALLOCATED(rlank)) ALLOCATE(rlank(nangle))
364 IF (.NOT.ALLOCATED(wps)) ALLOCATE(wps(nangle))
365 IF (.NOT.ALLOCATED(wsh)) ALLOCATE(wsh(nangle))
366 ! Loop over angles (must be equally distributed between 0 and pi/2)
367 DO j = 1, nangle
368 CALL hm_get_float_array_index('MAT_fUN_THETA' ,fun(j,1),j,is_available, lsubmodel, unitab)
369 CALL hm_get_float_array_index('MAT_R_THETA' ,rlank(j),j,is_available, lsubmodel, unitab)
370 IF (rlank(j) == 0) rlank(j) = one
371 CALL hm_get_float_array_index('MAT_W_PS' ,wps(j) ,j,is_available, lsubmodel, unitab)
372 CALL hm_get_float_array_index('MAT_W_SH' ,wsh(j) ,j,is_available, lsubmodel, unitab)
373 ENDDO
374 DO j = 1, nangle
375 IF (wsh(j) /= wsh(nangle-(j-1))) THEN
376 CALL ancmsg(msgid=1800,msgtype=msgwarning,
377 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
378 wsh(nangle-(j-1)) = wsh(j)
379 ENDIF
380 ENDDO
381 ENDIF
382c
383c---------------------
384c Default values
385c---------------------
386 ! Density
387 IF (rhor == zero) rhor = rho0
388 IF (ires == 0) ires = 2
389 ! Poisson's ratio
390 IF (nu < zero .OR. nu >= half) THEN
391 CALL ancmsg(msgid=49,
392 . msgtype=msgerror,
393 . anmode=aninfo_blind_2,
394 . r1=nu,
395 . i1=mat_id,
396 . c1=titr)
397 ENDIF
398 ! Elasticity parameter
399 bulk = young / three / (one - two*nu)
400 a11 = young / (one-nu*nu)
401 g = young / two / (one + nu)
402 ! Default strain-rate computation
403 IF (ivflag == 0) ivflag = 2
404 IF (ivflag > 3) THEN
405 CALL ancmsg(msgid=1802,msgtype=msgerror,
406 . anmode=aninfo_blind_1,i1=mat_id,c1=titr,
407 . i2=ivflag)
408 ENDIF
409 ! No Strain-rate dependence
410 IF ((tab_yld == 0).AND.((deps0 == zero).OR.(dg0 == zero).OR.(sigstar == zero))) THEN
411 sigstar = zero
412 deps0 = one
413 dg0 = one
414 israte = 0
415 asrate = zero
416 ! Info message
417 CALL ancmsg(msgid=1801,msgtype=msginfo,
418 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
419 ELSE
420 ! Set strain-rate filtering
421 israte = 1
422 ! Default cutting frequency
423 IF ((asrate == zero).OR.(ivflag == 1)) asrate = 10000.0d0*unitab%FAC_T_WORK
424 ENDIF
425 ! Boltzmann constant
426 kboltz = 8.6173303*em5 ! eV/K (~J/K)
427 kboltz = kboltz/(unitab%FAC_M_WORK*unitab%FAC_L_WORK*unitab%FAC_L_WORK/(unitab%FAC_T_WORK*unitab%FAC_T_WORK))
428 ! Kinematic hardening factor
429 IF (fisokin > one) fisokin = one
430 IF (fisokin < zero) fisokin = zero
431 ! Default interpolation computation
432 IF (ismooth == 0) ismooth = 1
433 ! Tabulated function scale factor
434 IF (tab_yld == 0) THEN
435 xscale = zero
436 yscale = zero
437 tab_temp = 0
438 ENDIF
439 IF ((tab_temp > 0).AND.(tini == zero)) tini = 293.0d0
440 IF ((yscale == zero).AND.(tab_yld>0)) THEN
441 CALL hm_get_floatv_dim('mat_yscale' ,YSCALE_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
442 YSCALE = ONE * YSCALE_UNIT
443 ENDIF
444.AND. IF ((XSCALE == ZERO)(TAB_YLD>0)) THEN
445 CALL HM_GET_FLOATV_DIM('mat_xscale' ,XSCALE_UNIT ,IS_AVAILABLE, LSUBMODEL, UNITAB)
446 XSCALE = ONE * XSCALE_UNIT
447 ENDIF
448c----------------------------------------------
449c Computation of yield criterion parameter
450c----------------------------------------------
451.NOT. IF (ALLOCATED(HIPS)) ALLOCATE(HIPS(NANGLE,2))
452.NOT. IF (ALLOCATED(HIUN)) ALLOCATE(HIUN(NANGLE,2))
453.NOT. IF (ALLOCATED(HISH)) ALLOCATE(HISH(NANGLE,2))
454.NOT. IF (ALLOCATED(THETA)) ALLOCATE(THETA(NANGLE))
455.NOT. IF (ALLOCATED(THETA_RAD)) ALLOCATE(THETA_RAD(NANGLE))
456c
457 ! Computation of angles
458 DO J = 1, NANGLE
459 IF (NANGLE > 1) THEN
460 THETA(J) = (J-1)*(90.0D0/(NANGLE-1))
461 THETA_RAD(J) = THETA(J)*(PI/180.0D0)
462 ELSE
463 THETA(J) = ZERO
464 THETA_RAD(J) = ZERO
465 ENDIF
466 ENDDO
467c
468 ! Loop over angles
469 DO J = 1, NANGLE
470c
471 ! Hinge points for the classical Corus-Vegter yield locus (3 hinge points)
472.OR..OR. IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
473 ! Computation of Hinge point between Bi-axial and Plane-strain point
474 ! Plane strain point and normal
475 A1 = fPS(J,1)
476 A2 = fPS(J,2)
477 N1 = ONE
478 N2 = ZERO
479 ! Biaxial point and normal
480 rhoBI_theta = (rhoBI + ONE) + (rhoBI - ONE)*COS(TWO*THETA_RAD(J))
481 rhoBI_theta = rhoBI_theta / ((rhoBI + ONE) - (rhoBI - ONE)*COS(TWO*THETA_RAD(J)))
482 C1 = fBI
483 C2 = fBI
484 M1 = ONE
485 M2 = rhoBI_theta
486 ! Hinge point
487 HIPS(J,1) = (M2*(N1*A1+N2*A2) - N2*(M1*C1+M2*C2))/(N1*M2 - M1*N2)
488 HIPS(J,2) = (N1*(M1*C1+M2*C2) - M1*(N1*A1+N2*A2))/(N1*M2 - M1*N2)
489c
490 ! Computation of Hinge point between Plane-strain and Uniaxial point
491 ! Uniaxial point and normal
492 A1 = fUN(J,1)
493 fUN(J,2) = ZERO
494 A2 = fUN(J,2)
495 N1 = ONE
496 N2 = -rLank(J)/(rLank(J)+ONE)
497 ! Plane strain point and normal
498 C1 = fPS(J,1)
499 C2 = fPS(J,2)
500 M1 = ONE
501 M2 = ZERO
502 ! Hinge point
503 HIUN(J,1) = (M2*(N1*A1+N2*A2) - N2*(M1*C1+M2*C2))/(N1*M2 - M1*N2)
504 HIUN(J,2) = (N1*(M1*C1+M2*C2) - M1*(N1*A1+N2*A2))/(N1*M2 - M1*N2)
505c
506 ! If fPS2 is not measured or if Icrit = 2
507.AND. IF ((Icrit == 1)(fPS(J,2) == ZERO)) THEN
508 fPS(J,2) = HIUN(J,2) + HALF*(HIPS(J,2) - HIUN(J,2))
509 ELSEIF (Icrit == 2) THEN
510 fPS(J,2) = HIUN(J,2) + ALPS(J)*(HIPS(J,2) - HIUN(J,2))
511 ENDIF
512c
513 ! Computation of Hinge point between Uniaxial point and Shear point
514 ! Shear point and normal
515 A1 = fSH(J,1)
516 fSH(J,2) = -fSH(NANGLE-(J-1),1)
517 A2 = fSH(J,2)
518 N1 = ONE
519 N2 = -ONE
520 ! Plane strain point and normal
521 C1 = fUN(J,1)
522 C2 = ZERO
523 M1 = ONE
524 M2 = -rLank(J)/(rLank(J)+ONE)
525 ! Hinge point
526 HISH(J,1) = (M2*(N1*A1+N2*A2) - N2*(M1*C1+M2*C2))/(N1*M2 - M1*N2)
527 HISH(J,2) = (N1*(M1*C1+M2*C2) - M1*(N1*A1+N2*A2))/(N1*M2 - M1*N2)
528c
529 ! Hinge points for the simplified Corus-Vegter lite yield locus (2 hinge points)
530 ELSE
531 ! Computation of Hinge point between Bi-axial and Uniaxial point
532 ! Uniaxial point and normal
533 A1 = fUN(J,1)
534 fUN(J,2) = ZERO
535 A2 = fUN(J,2)
536 N1 = ONE
537 N2 = -rLank(J)/(rLank(J)+ONE)
538 ! Biaxial point and normal
539 rhoBI_theta = (rhoBI + ONE) + (rhoBI - ONE)*COS(TWO*THETA_RAD(J))
540 rhoBI_theta = rhoBI_theta / ((rhoBI + ONE) - (rhoBI - ONE)*COS(TWO*THETA_RAD(J)))
541 C1 = fBI
542 C2 = fBI
543 M1 = ONE
544 M2 = rhoBI_theta
545 ! Hinge point
546 HIPS(J,1) = (M2*(N1*A1+N2*A2) - N2*(M1*C1+M2*C2))/(N1*M2 - M1*N2)
547 HIPS(J,2) = (N1*(M1*C1+M2*C2) - M1*(N1*A1+N2*A2))/(N1*M2 - M1*N2)
548c
549 ! Computation of Hinge point between Uniaxial point in tension and Uniaxial point in compression
550 ! Uniaxial point in compression
551 A1 = fUN(J,2)
552 A2 = -fUN(J,1)
553 N1 = rLank(J)/(rLank(J)+ONE)
554 N2 = -ONE
555 ! Uniaxial point in tension
556 C1 = fUN(J,1)
557 C2 = fUN(J,2)
558 M1 = ONE
559 M2 = -rLank(J)/(rLank(J)+ONE)
560 ! Hinge point
561 HISH(J,1) = (M2*(N1*A1+N2*A2) - N2*(M1*C1+M2*C2))/(N1*M2 - M1*N2)
562 HISH(J,2) = (N1*(M1*C1+M2*C2) - M1*(N1*A1+N2*A2))/(N1*M2 - M1*N2)
563 ENDIF
564 ENDDO
565c
566c----------------------------------------------
567c Computation of cosine interpolation factor
568c----------------------------------------------
569c
570 ! Allocation of the A-MATRIX and the Pivot vector
571 ALLOCATE (AMAT(NANGLE,NANGLE),IPIV(NANGLE))
572c
573 ! Filling the A-MATRIX
574 DO J = 1,NANGLE
575 DO I = 1,NANGLE
576 AMAT(J,I) = ZERO
577 DO K = 1,I
578 AMAT(J,I) = AMAT(J,I) + COS2(K,I)*(COS(TWO*THETA_RAD(J)))**(K-1)
579 ENDDO
580 ENDDO
581 ENDDO
582c
583 ! Classical Vegter yield locus and Standard Vegter yield locus
584.OR..OR. IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
585c
586 ! Allocation of factors
587 ALLOCATE(Q_fSH(NANGLE,2),Q_fUN(NANGLE,2),Q_fPS(NANGLE,2),
588 . Q_HISH(NANGLE,2),Q_HIUN(NANGLE,2),Q_HIPS(NANGLE,2))
589c
590 ! Initialization of tables
591 Q_fSH(1:NANGLE,1:2) = ZERO
592 Q_fUN(1:NANGLE,1:2) = ZERO
593 Q_fPS(1:NANGLE,1:2) = ZERO
594 Q_HISH(1:NANGLE,1:2) = ZERO
595 Q_HIUN(1:NANGLE,1:2) = ZERO
596 Q_HIPS(1:NANGLE,1:2) = ZERO
597c
598 ! Filling the B vector with experimental points
599 ALLOCATE (BVEC(NANGLE,12))
600 BVEC(1:NANGLE,1:2) = fSH(1:NANGLE,1:2)
601 BVEC(1:NANGLE,3:4) = fUN(1:NANGLE,1:2)
602 BVEC(1:NANGLE,5:6) = fPS(1:NANGLE,1:2)
603 BVEC(1:NANGLE,7:8) = HISH(1:NANGLE,1:2)
604 BVEC(1:NANGLE,9:10) = HIUN(1:NANGLE,1:2)
605 BVEC(1:NANGLE,11:12) = HIPS(1:NANGLE,1:2)
606c
607 ! Initialization of the Pivot vector
608 IPIV(1:NANGLE) = 0
609c
610 ! Solving the A-MATRIX * x = B vector system
611#ifndef WITHOUT_LINALG
612 CALL DGESV(NANGLE, 12, AMAT, NANGLE, IPIV, BVEC, NANGLE, INFO)
613#else
614 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
615#endif
616c
617 ! Recovering the solution
618 Q_fSH(1:NANGLE,1:2) = BVEC(1:NANGLE,1:2)
619 Q_fUN(1:NANGLE,1:2) = BVEC(1:NANGLE,3:4)
620 Q_fPS(1:NANGLE,1:2) = BVEC(1:NANGLE,5:6)
621 Q_HISH(1:NANGLE,1:2) = BVEC(1:NANGLE,7:8)
622 Q_HIUN(1:NANGLE,1:2) = BVEC(1:NANGLE,9:10)
623 Q_HIPS(1:NANGLE,1:2) = BVEC(1:NANGLE,11:12)
624c
625 ! Simplified Vegter Lite yield locus
626 ELSE
627c
628 ! Allocation of factors
629 ALLOCATE(Q_fUN(NANGLE,2),Q_HISH(NANGLE,2),Q_HIPS(NANGLE,2),
630 . Q_WSH(NANGLE),Q_WPS(NANGLE))
631c
632 ! Initialization of factors
633 Q_fUN(1:NANGLE,1:2) = ZERO
634 Q_HISH(1:NANGLE,1:2) = ZERO
635 Q_HIPS(1:NANGLE,1:2) = ZERO
636 Q_WSH(1:NANGLE) = ZERO
637 Q_WPS(1:NANGLE) = ZERO
638c
639 ! Filling the B vector with experimental points
640 ALLOCATE (BVEC(NANGLE,8))
641 BVEC(1:NANGLE,1:2) = fUN(1:NANGLE,1:2)
642 BVEC(1:NANGLE,3:4) = HISH(1:NANGLE,1:2)
643 BVEC(1:NANGLE,5:6) = HIPS(1:NANGLE,1:2)
644 BVEC(1:NANGLE,7) = WSH(1:NANGLE)
645 BVEC(1:NANGLE,8) = WPS(1:NANGLE)
646c
647 ! Initialization of the Pivot vector
648 IPIV(1:NANGLE) = 0
649c
650 ! Solving the A-MATRIX * x = B vector system
651#ifndef WITHOUT_LINALG
652 CALL DGESV(NANGLE, 8, AMAT, NANGLE, IPIV, BVEC, NANGLE, INFO)
653#else
654 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
655#endif
656
657c
658 ! Recovering the solution
659 Q_fUN(1:NANGLE,1:2) = BVEC(1:NANGLE,1:2)
660 Q_HISH(1:NANGLE,1:2) = BVEC(1:NANGLE,3:4)
661 Q_HIPS(1:NANGLE,1:2) = BVEC(1:NANGLE,5:6)
662 Q_WSH(1:NANGLE) = BVEC(1:NANGLE,7)
663 Q_WPS(1:NANGLE) = BVEC(1:NANGLE,8)
664c
665 ENDIF
666c-----------------------------------
667c Checking yield locus convexity
668c-----------------------------------
669c
670 ! Classical Vegter yield locus and Standard Yield locus
671.OR..OR. IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
672
673 ! ---------------------------------------------------------
674 ! 1. Checking convexity between shear and uniaxial point
675 ! ---------------------------------------------------------
676c
677 ! Minimum eigen value of the Hessian matrix of the yield locus
678 MINEIG = INFINITY
679 MINEIGMU = ZERO
680 MINEIGTHET = ZERO
681c
682 ! Initialization of the THETA angle
683 THET = ZERO
684c
685 ! Loop over the angles
686 DO J = 1,61
687c
688 ! Initialization of the MU parameter
689 MU = ZERO
690 ! Computing the reference and hinge point for a giving angle
691 ! Vector point
692 A1 = ZERO
693 A2 = ZERO
694 B1 = ZERO
695 B2 = ZERO
696 C1 = ZERO
697 C2 = ZERO
698 ! Initialization of the first derivative with respect to COS2THET
699 DA_DCOS2(1:2) = ZERO
700 DB_DCOS2(1:2) = ZERO
701 DC_DCOS2(1:2) = ZERO
702 ! Initialization of the second derivative with respect to COS2THET
703 D2A_D2COS2(1:2) = ZERO
704 D2B_D2COS2(1:2) = ZERO
705 D2C_D2COS2(1:2) = ZERO
706 ! Loop over angles
707 DO I = 1,NANGLE
708 ! Computation of the reference points
709 DO K = 1,I
710 A1 = A1 + Q_fSH(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
711 A2 = A2 + Q_fSH(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
712 B1 = B1 + Q_HISH(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
713 B2 = B2 + Q_HISH(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
714 C1 = C1 + Q_fUN(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
715 C2 = C2 + Q_fUN(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
716 ENDDO
717 ENDDO
718 ! If anisotropic, compute derivatives with respect to COS2THET
719 IF (NANGLE > 1) THEN
720 ! Computation of their first derivative with respect to COS2THET
721 DO I = 2, NANGLE
722 DO K = 2,I
723 DA_DCOS2(1:2) = DA_DCOS2(1:2) + Q_fSH(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
724 DB_DCOS2(1:2) = DB_DCOS2(1:2) + Q_HISH(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
725 DC_DCOS2(1:2) = DC_DCOS2(1:2) + Q_fUN(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
726 ENDDO
727 ENDDO
728 ! Computation of their second derivative with respect to COS2THET
729 IF (NANGLE > 2) THEN
730 DO I = 3, NANGLE
731 DO K = 3,I
732 D2A_D2COS2(1:2) = D2A_D2COS2(1:2) + Q_fSH(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
733 D2B_D2COS2(1:2) = D2B_D2COS2(1:2) + Q_HISH(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
734 D2C_D2COS2(1:2) = D2C_D2COS2(1:2) + Q_fUN(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
735 ENDDO
736 ENDDO
737 ENDIF
738 ENDIF
739c
740 !----------------------------------------------
741 ! Computing the Hessian matrix and eigen values
742 !----------------------------------------------
743 DO I = 1,21
744c
745 ! Computation of F1 and F2
746 F1 = ((ONE-MU)**2)*A1 + TWO*MU*(ONE-MU)*B1 + (MU**2)*C1
747 F2 = ((ONE-MU)**2)*A2 + TWO*MU*(ONE-MU)*B2 + (MU**2)*C2
748 ! Derivatives of Fi with respect to MU
749 DF1_DMU = -TWO*(ONE-MU)*A1 + TWO*(ONE-TWO*MU)*B1 + TWO*MU*C1
750 DF2_DMU = -TWO*(ONE-MU)*A2 + TWO*(ONE-TWO*MU)*B2 + TWO*MU*C2
751 ! Second derivatives of Fi with respect to MU
752 D2F1_D2MU = TWO*(A1+C1-TWO*B1)
753 D2F2_D2MU = TWO*(A2+C2-TWO*B2)
754 ! Denominator and its derivative with respect to MU
755 DENOM = F1*DF2_DMU - F2*DF1_DMU
756 DENOM = SIGN(MAX(ABS(DENOM),EM20),DENOM)
757 ! Derivatives of Phi with respect to SIG1 and SIG2
758 DPHI_DSIG1 = DF2_DMU/DENOM
759 DPHI_DSIG2 = -DF1_DMU/DENOM
760 ! Derivatives of MU with respect to SIG1 and SIG2
761 DMU_DSIG1 = -F2/DENOM
762 DMU_DSIG2 = F1/DENOM
763c
764 ! Derivatives of Fi with respect to COS2
765 DF1_DCOS2 = ((ONE-MU)**2)*DA_DCOS2(1) + TWO*MU*(ONE-MU)*DB_DCOS2(1) + (MU**2)*DC_DCOS2(1)
766 DF2_DCOS2 = ((ONE-MU)**2)*DA_DCOS2(2) + TWO*MU*(ONE-MU)*DB_DCOS2(2) + (MU**2)*DC_DCOS2(2)
767 DPHI_DCOS2 = (DF2_DCOS2*DF1_DMU - DF1_DCOS2*DF2_DMU)/DENOM
768 DMU_DCOS2 = (F2*DF1_DCOS2 - F1*DF2_DCOS2)/DENOM
769c
770 ! Second derivatives of Fi with respect to COS2
771 D2F1_D2MUCOS2 = -TWO*(ONE-MU)*DA_DCOS2(1) + TWO*(ONE-TWO*MU)*DB_DCOS2(1) + TWO*MU*DC_DCOS2(1)
772 D2F2_D2MUCOS2 = -TWO*(ONE-MU)*DA_DCOS2(2) + TWO*(ONE-TWO*MU)*DB_DCOS2(2) + TWO*MU*DC_DCOS2(2)
773 D2F1_D2COS2 = ((ONE-MU)**2)*D2A_D2COS2(1) + TWO*MU*(ONE-MU)*D2B_D2COS2(1) + (MU**2)*D2C_D2COS2(1)
774 D2F2_D2COS2 = ((ONE-MU)**2)*D2A_D2COS2(2) + TWO*MU*(ONE-MU)*D2B_D2COS2(2) + (MU**2)*D2C_D2COS2(2)
775c
776 ! Second derivatives of PHI with respect to SIG1 and SIG2 (Hessian matrix)
777 !-------------------------------------------------------------------------
778 ! FIRST LINE OF THE MATRIX
779 ! D2PHI_D2SIG1
780 D2PHI_D2(1,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG1
781 ! D2PHI_DSIG1SIG2
782 D2PHI_D2(1,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG2
783 ! D2PHI_DSIG1COS2
784 D2PHI_D2(1,3) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
785 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG1
786 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG1)
787c
788 ! SECOND LINE OF THE MATRIX
789 ! D2PHI_DSIG2SIG1
790 D2PHI_D2(2,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG1
791 ! D2PHI_D2SIG2
792 D2PHI_D2(2,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG2
793 ! D2PHI_DSIG2COS2
794 D2PHI_D2(2,3) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
795 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG2
796 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG2)
797c
798 ! THIRD LINE OF THE MATRIX
799 ! D2PHI_D2COS2SIG1
800 D2PHI_D2(3,1) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
801 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG1
802 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG1)
803 ! D2PHI_D2COS2SIG2
804 D2PHI_D2(3,2) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
805 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG2
806 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG2)
807 ! D2PHI_D2COS2
808 D2PHI_D2(3,3) = (-ONE/DENOM)*(DF2_DMU*(D2F1_D2COS2 + TWO*D2F1_D2MUCOS2*DMU_DCOS2 + D2F1_D2MU*(DMU_DCOS2**2))
809 . - DF1_DMU*(D2F2_D2COS2 + TWO*D2F2_D2MUCOS2*DMU_DCOS2 + D2F2_D2MU*(DMU_DCOS2**2))
810 . + TWO*(DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DCOS2)
811c
812 ! Filling the T matrix
813 T(1,1) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2) +
814 . DPHI_DCOS2*(-THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
815 T(1,2) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG2 - DPHI_DSIG1) +
816 . DPHI_DCOS2*(THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
817 T(1,3) = (ONE/(F1-F2))*(SIN(TWO*THET)*COS(TWO*THET))*(DPHI_DSIG2 - DPHI_DSIG1) +
818 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(FOUR*SIN(TWO*THET)*(COS(TWO*THET))**2 -
819 . TWO*(SIN(TWO*THET)**3))
820 T(2,1) = T(1,2)
821 T(2,2) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2) +
822 . DPHI_DCOS2*(-THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
823 T(2,3) = (ONE/(F1-F2))*(SIN(TWO*THET)*COS(TWO*THET))*(DPHI_DSIG1-DPHI_DSIG2) +
824 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(-FOUR*SIN(TWO*THET)*(COS(TWO*THET))**2 +
825 . TWO*(SIN(TWO*THET)**3))
826 T(3,1) = T(1,3)
827 T(3,2) = T(2,3)
828 T(3,3) = (TWO/(F1-F2))*((COS(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2)+
829 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(EIGHT*(SIN(TWO*THET)**2)*COS(TWO*THET) -
830 . FOUR*(COS(TWO*THET)**3))
831
832 ! Filling the rotation D matrix
833 D(1,1) = HALF*(ONE+COS(TWO*THET))
834 D(1,2) = HALF*(ONE-COS(TWO*THET))
835 D(1,3) = SIN(TWO*THET)
836 D(2,1) = HALF*(ONE-COS(TWO*THET))
837 D(2,2) = HALF*(ONE+COS(TWO*THET))
838 D(2,3) = -SIN(TWO*THET)
839 D(3,1) = (SIN(TWO*THET)**2)/(F1-F2)
840 D(3,2) = -(SIN(TWO*THET)**2)/(F1-F2)
841 D(3,3) = -(TWO*SIN(TWO*THET)*COS(TWO*THET))/(F1-F2)
842
843 ! Assembling the Hessian Matrix Dt*DPHI_DSIG*D + T
844 D2PHI_D2 = MATMUL(D2PHI_D2,D)
845 D2PHI_D2 = MATMUL(TRANSPOSE(D),D2PHI_D2)
846 D2PHI_D2(1:3,1:3) = D2PHI_D2(1:3,1:3) + T(1:3,1:3)
847c
848 ! Computation of eigen values
849 WR = ZERO
850 WI = ZERO
851 VL = ZERO
852 VR = ZERO
853 WORK = ZERO
854#ifndef WITHOUT_LINALG
855 CALL DGEEV('n','n',3,D2PHI_D2,3,WR,WI,VL,3,VR,3,WORK,102,INFO)
856#else
857 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
858#endif
859c
860 ! Storing the minimal value
861 IF (MINVAL(WR)<MINEIG) THEN
862 MINEIG = MINVAL(WR)
863 MINEIGMU = MU
864 MINEIGTHET = THET*(180.0D0/PI)
865 ENDIF
866 ! Updating the MU parameter
867 MU = MU + ONE/TWENTY
868 ENDDO
869 ! Updating the theta angle
870 THET = THET + (PI/TWO)/60.0D0
871 ENDDO
872c
873 ! Convexity check and error message
874 IF (MINEIG<-TOL) THEN
875 CALL ANCMSG(MSGID=1803,MSGTYPE=MSGERROR,
876 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR,
877 . R1=MINEIG,R2=MINEIGMU,R3=MINEIGTHET)
878 ENDIF
879c
880 ! -------------------------------------------------------------
881 ! 2. Checking convexity between uniaxial and plane strain point
882 ! -------------------------------------------------------------
883c
884 ! Minimum eigen value of the Hessian matrix of the yield locus
885 MINEIG = INFINITY
886 MINEIGMU = ZERO
887 MINEIGTHET = ZERO
888c
889 ! Initialization of the THETA angle
890 THET = ZERO
891c
892 ! Loop over the angles
893 DO J = 1,61
894c
895 ! Initialization of the MU parameter
896 MU = ZERO
897 ! Computing the reference and hinge point for a giving angle
898 ! Vector point
899 A1 = ZERO
900 A2 = ZERO
901 B1 = ZERO
902 B2 = ZERO
903 C1 = ZERO
904 C2 = ZERO
905 ! Initialization of the first derivative with respect to COS2THET
906 DA_DCOS2(1:2) = ZERO
907 DB_DCOS2(1:2) = ZERO
908 DC_DCOS2(1:2) = ZERO
909 ! Initialization of the second derivative with respect to COS2THET
910 D2A_D2COS2(1:2) = ZERO
911 D2B_D2COS2(1:2) = ZERO
912 D2C_D2COS2(1:2) = ZERO
913 ! Loop over angles
914 DO I = 1,NANGLE
915 ! Computation of the reference points
916 DO K = 1,I
917 A1 = A1 + Q_fUN(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
918 A2 = A2 + Q_fUN(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
919 B1 = B1 + Q_HIUN(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
920 B2 = B2 + Q_HIUN(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
921 C1 = C1 + Q_fPS(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
922 C2 = C2 + Q_fPS(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
923 ENDDO
924 ENDDO
925 ! If anisotropic, compute derivatives with respect to COS2THET
926 IF (NANGLE > 1) THEN
927 ! Computation of their first derivative with respect to COS2THET
928 DO I = 2, NANGLE
929 DO K = 2,I
930 DA_DCOS2(1:2) = DA_DCOS2(1:2) + Q_fUN(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
931 DB_DCOS2(1:2) = DB_DCOS2(1:2) + Q_HIUN(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
932 DC_DCOS2(1:2) = DC_DCOS2(1:2) + Q_fPS(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
933 ENDDO
934 ENDDO
935 ! Computation of their second derivative with respect to COS2THET
936 IF (NANGLE > 2) THEN
937 DO I = 3, NANGLE
938 DO K = 3,I
939 D2A_D2COS2(1:2) = D2A_D2COS2(1:2) + Q_fUN(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
940 D2B_D2COS2(1:2) = D2B_D2COS2(1:2) + Q_HIUN(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
941 D2C_D2COS2(1:2) = D2C_D2COS2(1:2) + Q_fPS(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
942 ENDDO
943 ENDDO
944 ENDIF
945 ENDIF
946c
947 !----------------------------------------------
948 ! Computing the Hessian matrix and eigen values
949 !----------------------------------------------
950 DO I = 1,21
951c
952 ! Computation of F1 and F2
953 F1 = ((ONE-MU)**2)*A1 + TWO*MU*(ONE-MU)*B1 + (MU**2)*C1
954 F2 = ((ONE-MU)**2)*A2 + TWO*MU*(ONE-MU)*B2 + (MU**2)*C2
955 ! Derivatives of Fi with respect to MU
956 DF1_DMU = -TWO*(ONE-MU)*A1 + TWO*(ONE-TWO*MU)*B1 + TWO*MU*C1
957 DF2_DMU = -TWO*(ONE-MU)*A2 + TWO*(ONE-TWO*MU)*B2 + TWO*MU*C2
958 ! Second derivatives of Fi with respect to MU
959 D2F1_D2MU = TWO*(A1+C1-TWO*B1)
960 D2F2_D2MU = TWO*(A2+C2-TWO*B2)
961 ! Denominator and its derivative with respect to MU
962 DENOM = F1*DF2_DMU - F2*DF1_DMU
963 DENOM = SIGN(MAX(ABS(DENOM),EM20),DENOM)
964 ! Derivatives of Phi with respect to SIG1 and SIG2
965 DPHI_DSIG1 = DF2_DMU/DENOM
966 DPHI_DSIG2 = -DF1_DMU/DENOM
967 ! Derivatives of MU with respect to SIG1 and SIG2
968 DMU_DSIG1 = -F2/DENOM
969 DMU_DSIG2 = F1/DENOM
970c
971 ! Derivatives of Fi with respect to COS2
972 DF1_DCOS2 = ((ONE-MU)**2)*DA_DCOS2(1) + TWO*MU*(ONE-MU)*DB_DCOS2(1) + (MU**2)*DC_DCOS2(1)
973 DF2_DCOS2 = ((ONE-MU)**2)*DA_DCOS2(2) + TWO*MU*(ONE-MU)*DB_DCOS2(2) + (MU**2)*DC_DCOS2(2)
974 DPHI_DCOS2 = (DF2_DCOS2*DF1_DMU - DF1_DCOS2*DF2_DMU)/DENOM
975 DMU_DCOS2 = (F2*DF1_DCOS2 - F1*DF2_DCOS2)/DENOM
976c
977 ! Second derivatives of Fi with respect to COS2
978 D2F1_D2MUCOS2 = -TWO*(ONE-MU)*DA_DCOS2(1) + TWO*(ONE-TWO*MU)*DB_DCOS2(1) + TWO*MU*DC_DCOS2(1)
979 D2F2_D2MUCOS2 = -TWO*(ONE-MU)*DA_DCOS2(2) + TWO*(ONE-TWO*MU)*DB_DCOS2(2) + TWO*MU*DC_DCOS2(2)
980 D2F1_D2COS2 = ((ONE-MU)**2)*D2A_D2COS2(1) + TWO*MU*(ONE-MU)*D2B_D2COS2(1) + (MU**2)*D2C_D2COS2(1)
981 D2F2_D2COS2 = ((ONE-MU)**2)*D2A_D2COS2(2) + TWO*MU*(ONE-MU)*D2B_D2COS2(2) + (MU**2)*D2C_D2COS2(2)
982c
983 ! Second derivatives of PHI with respect to SIG1 and SIG2 (Hessian matrix)
984 !-------------------------------------------------------------------------
985 ! FIRST LINE OF THE MATRIX
986 ! D2PHI_D2SIG1
987 D2PHI_D2(1,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG1
988 ! D2PHI_DSIG1SIG2
989 D2PHI_D2(1,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG2
990 ! D2PHI_DSIG1COS2
991 D2PHI_D2(1,3) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
992 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG1
993 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG1)
994c
995 ! SECOND LINE OF THE MATRIX
996 ! D2PHI_DSIG2SIG1
997 D2PHI_D2(2,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG1
998 ! D2PHI_D2SIG2
999 D2PHI_D2(2,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG2
1000 ! D2PHI_DSIG2COS2
1001 D2PHI_D2(2,3) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1002 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG2
1003 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG2)
1004c
1005 ! THIRD LINE OF THE MATRIX
1006 ! D2PHI_D2COS2SIG1
1007 D2PHI_D2(3,1) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1008 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG1
1009 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG1)
1010 ! D2PHI_D2COS2SIG2
1011 D2PHI_D2(3,2) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1012 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG2
1013 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG2)
1014 ! D2PHI_D2COS2
1015 D2PHI_D2(3,3) = (-ONE/DENOM)*(DF2_DMU*(D2F1_D2COS2 + TWO*D2F1_D2MUCOS2*DMU_DCOS2 + D2F1_D2MU*(DMU_DCOS2**2))
1016 . - DF1_DMU*(D2F2_D2COS2 + TWO*D2F2_D2MUCOS2*DMU_DCOS2 + D2F2_D2MU*(DMU_DCOS2**2))
1017 . + TWO*(DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DCOS2)
1018c
1019 ! Filling the T matrix
1020 T(1,1) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2) +
1021 . DPHI_DCOS2*(-THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1022 T(1,2) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG2 - DPHI_DSIG1) +
1023 . DPHI_DCOS2*(THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1024 T(1,3) = (ONE/(F1-F2))*(SIN(TWO*THET)*COS(TWO*THET))*(DPHI_DSIG2 - DPHI_DSIG1) +
1025 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(FOUR*SIN(TWO*THET)*(COS(TWO*THET))**2 -
1026 . TWO*(SIN(TWO*THET)**3))
1027 T(2,1) = T(1,2)
1028 T(2,2) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2) +
1029 . DPHI_DCOS2*(-THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1030 T(2,3) = (ONE/(F1-F2))*(SIN(TWO*THET)*COS(TWO*THET))*(DPHI_DSIG1-DPHI_DSIG2) +
1031 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(-FOUR*SIN(TWO*THET)*(COS(TWO*THET))**2 +
1032 . TWO*(SIN(TWO*THET)**3))
1033 T(3,1) = T(1,3)
1034 T(3,2) = T(2,3)
1035 T(3,3) = (TWO/(F1-F2))*((COS(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2)+
1036 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(EIGHT*(SIN(TWO*THET)**2)*COS(TWO*THET) -
1037 . FOUR*(COS(TWO*THET)**3))
1038c
1039 ! Filling the rotation D matrix
1040 D(1,1) = HALF*(ONE+COS(TWO*THET))
1041 D(1,2) = HALF*(ONE-COS(TWO*THET))
1042 D(1,3) = SIN(TWO*THET)
1043 D(2,1) = HALF*(ONE-COS(TWO*THET))
1044 D(2,2) = HALF*(ONE+COS(TWO*THET))
1045 D(2,3) = -SIN(TWO*THET)
1046 D(3,1) = (SIN(TWO*THET)**2)/(F1-F2)
1047 D(3,2) = -(SIN(TWO*THET)**2)/(F1-F2)
1048 D(3,3) = -(TWO*SIN(TWO*THET)*COS(TWO*THET))/(F1-F2)
1049c
1050 ! Assembling the Hessian Matrix Dt*DPHI_DSIG*D + T
1051 D2PHI_D2 = MATMUL(D2PHI_D2,D)
1052 D2PHI_D2 = MATMUL(TRANSPOSE(D),D2PHI_D2)
1053 D2PHI_D2(1:3,1:3) = D2PHI_D2(1:3,1:3) + T(1:3,1:3)
1054c
1055 ! Computation of eigen values
1056 WR = ZERO
1057 WI = ZERO
1058 VL = ZERO
1059 VR = ZERO
1060 WORK = ZERO
1061
1062
1063
1064#ifndef WITHOUT_LINALG
1065 CALL DGEEV('n','n',3,D2PHI_D2,3,WR,WI,VL,3,VR,3,WORK,102,INFO)
1066#else
1067 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
1068#endif
1069c
1070 ! Storing the minimal value
1071 IF (MINVAL(WR)<MINEIG) THEN
1072 MINEIG = MINVAL(WR)
1073 MINEIGMU = MU
1074 MINEIGTHET = THET*(180.0D0/PI)
1075 ENDIF
1076 ! Updating the MU parameter
1077 MU = MU + ONE/TWENTY
1078 ENDDO
1079 ! Updating the theta angle
1080 THET = THET + (PI/TWO)/60.0D0
1081 ENDDO
1082c
1083 ! Convexity check and error message
1084 IF (MINEIG<-TOL) THEN
1085 CALL ANCMSG(MSGID=1804,MSGTYPE=MSGERROR,
1086 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR,
1087 . R1=MINEIG,R2=MINEIGMU,R3=MINEIGTHET)
1088 ENDIF
1089c
1090 ! -------------------------------------------------------------
1091 ! 3. Checking convexity between plane-strain and biaxial point
1092 ! -------------------------------------------------------------
1093c
1094 ! Minimum eigen value of the Hessian matrix of the yield locus
1095 MINEIG = INFINITY
1096 MINEIGMU = ZERO
1097 MINEIGTHET = ZERO
1098c
1099 ! Initialization of the THETA angle
1100 THET = ZERO
1101c
1102 ! Loop over the angles
1103 DO J = 1,61
1104c
1105 ! Initialization of the MU parameter
1106 MU = ZERO
1107 ! Computing the reference and hinge point for a giving angle
1108 ! Vector point
1109 A1 = ZERO
1110 A2 = ZERO
1111 B1 = ZERO
1112 B2 = ZERO
1113 C1 = fBI
1114 C2 = fBI
1115 ! Initialization of the first derivative with respect to COS2THET
1116 DA_DCOS2(1:2) = ZERO
1117 DB_DCOS2(1:2) = ZERO
1118 DC_DCOS2(1:2) = ZERO
1119 ! Initialization of the second derivative with respect to COS2THET
1120 D2A_D2COS2(1:2) = ZERO
1121 D2B_D2COS2(1:2) = ZERO
1122 D2C_D2COS2(1:2) = ZERO
1123 ! Loop over angles
1124 DO I = 1,NANGLE
1125 ! Computation of the reference points
1126 DO K = 1,I
1127 A1 = A1 + Q_fPS(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1128 A2 = A2 + Q_fPS(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1129 B1 = B1 + Q_HIPS(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1130 B2 = B2 + Q_HIPS(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1131 ENDDO
1132 ENDDO
1133 ! If anisotropic, compute derivatives with respect to COS2THET
1134 IF (NANGLE > 1) THEN
1135 ! Computation of their first derivative with respect to COS2THET
1136 DO I = 2, NANGLE
1137 DO K = 2,I
1138 DA_DCOS2(1:2) = DA_DCOS2(1:2) + Q_fPS(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
1139 DB_DCOS2(1:2) = DB_DCOS2(1:2) + Q_HIPS(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
1140 ENDDO
1141 ENDDO
1142 ! Computation of their second derivative with respect to COS2THET
1143 IF (NANGLE > 2) THEN
1144 DO I = 3, NANGLE
1145 DO K = 3,I
1146 D2A_D2COS2(1:2) = D2A_D2COS2(1:2) + Q_fPS(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
1147 D2B_D2COS2(1:2) = D2B_D2COS2(1:2) + Q_HIPS(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
1148 ENDDO
1149 ENDDO
1150 ENDIF
1151 ENDIF
1152c
1153 !----------------------------------------------
1154 ! Computing the Hessian matrix and eigen values
1155 !----------------------------------------------
1156 DO I = 1,20
1157c
1158 ! Computation of F1 and F2
1159 F1 = ((ONE-MU)**2)*A1 + TWO*MU*(ONE-MU)*B1 + (MU**2)*C1
1160 F2 = ((ONE-MU)**2)*A2 + TWO*MU*(ONE-MU)*B2 + (MU**2)*C2
1161 ! Derivatives of Fi with respect to MU
1162 DF1_DMU = -TWO*(ONE-MU)*A1 + TWO*(ONE-TWO*MU)*B1 + TWO*MU*C1
1163 DF2_DMU = -TWO*(ONE-MU)*A2 + TWO*(ONE-TWO*MU)*B2 + TWO*MU*C2
1164 ! Second derivatives of Fi with respect to MU
1165 D2F1_D2MU = TWO*(A1+C1-TWO*B1)
1166 D2F2_D2MU = TWO*(A2+C2-TWO*B2)
1167 ! Denominator and its derivative with respect to MU
1168 DENOM = F1*DF2_DMU - F2*DF1_DMU
1169 DENOM = SIGN(MAX(ABS(DENOM),EM20),DENOM)
1170 ! Derivatives of Phi with respect to SIG1 and SIG2
1171 DPHI_DSIG1 = DF2_DMU/DENOM
1172 DPHI_DSIG2 = -DF1_DMU/DENOM
1173 ! Derivatives of MU with respect to SIG1 and SIG2
1174 DMU_DSIG1 = -F2/DENOM
1175 DMU_DSIG2 = F1/DENOM
1176c
1177 ! Derivatives of Fi with respect to COS2
1178 DF1_DCOS2 = ((ONE-MU)**2)*DA_DCOS2(1) + TWO*MU*(ONE-MU)*DB_DCOS2(1) + (MU**2)*DC_DCOS2(1)
1179 DF2_DCOS2 = ((ONE-MU)**2)*DA_DCOS2(2) + TWO*MU*(ONE-MU)*DB_DCOS2(2) + (MU**2)*DC_DCOS2(2)
1180 DPHI_DCOS2 = (DF2_DCOS2*DF1_DMU - DF1_DCOS2*DF2_DMU)/DENOM
1181 DMU_DCOS2 = (F2*DF1_DCOS2 - F1*DF2_DCOS2)/DENOM
1182c
1183 ! Second derivatives of Fi with respect to COS2
1184 D2F1_D2MUCOS2 = -TWO*(ONE-MU)*DA_DCOS2(1) + TWO*(ONE-TWO*MU)*DB_DCOS2(1) + TWO*MU*DC_DCOS2(1)
1185 D2F2_D2MUCOS2 = -TWO*(ONE-MU)*DA_DCOS2(2) + TWO*(ONE-TWO*MU)*DB_DCOS2(2) + TWO*MU*DC_DCOS2(2)
1186 D2F1_D2COS2 = ((ONE-MU)**2)*D2A_D2COS2(1) + TWO*MU*(ONE-MU)*D2B_D2COS2(1) + (MU**2)*D2C_D2COS2(1)
1187 D2F2_D2COS2 = ((ONE-MU)**2)*D2A_D2COS2(2) + TWO*MU*(ONE-MU)*D2B_D2COS2(2) + (MU**2)*D2C_D2COS2(2)
1188c
1189 ! Second derivatives of PHI with respect to SIG1 and SIG2 (Hessian matrix)
1190 !-------------------------------------------------------------------------
1191 ! FIRST LINE OF THE MATRIX
1192 ! D2PHI_D2SIG1
1193 D2PHI_D2(1,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG1
1194 ! D2PHI_DSIG1SIG2
1195 D2PHI_D2(1,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG2
1196 ! D2PHI_DSIG1COS2
1197 D2PHI_D2(1,3) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1198 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG1
1199 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG1)
1200c
1201 ! SECOND LINE OF THE MATRIX
1202 ! D2PHI_DSIG2SIG1
1203 D2PHI_D2(2,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG1
1204 ! D2PHI_D2SIG2
1205 D2PHI_D2(2,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG2
1206 ! D2PHI_DSIG2COS2
1207 D2PHI_D2(2,3) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1208 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG2
1209 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG2)
1210c
1211 ! THIRD LINE OF THE MATRIX
1212 ! D2PHI_D2COS2SIG1
1213 D2PHI_D2(3,1) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1214 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG1
1215 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG1)
1216 ! D2PHI_D2COS2SIG2
1217 D2PHI_D2(3,2) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1218 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG2
1219 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG2)
1220 ! D2PHI_D2COS2
1221 D2PHI_D2(3,3) = (-ONE/DENOM)*(DF2_DMU*(D2F1_D2COS2 + TWO*D2F1_D2MUCOS2*DMU_DCOS2 + D2F1_D2MU*(DMU_DCOS2**2))
1222 . - DF1_DMU*(D2F2_D2COS2 + TWO*D2F2_D2MUCOS2*DMU_DCOS2 + D2F2_D2MU*(DMU_DCOS2**2))
1223 . + TWO*(DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DCOS2)
1224c
1225 ! Filling the T matrix
1226 T(1,1) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2) +
1227 . DPHI_DCOS2*(-THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1228 T(1,2) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG2 - DPHI_DSIG1) +
1229 . DPHI_DCOS2*(THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1230 T(1,3) = (ONE/(F1-F2))*(SIN(TWO*THET)*COS(TWO*THET))*(DPHI_DSIG2 - DPHI_DSIG1) +
1231 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(FOUR*SIN(TWO*THET)*(COS(TWO*THET))**2 -
1232 . TWO*(SIN(TWO*THET)**3))
1233 T(2,1) = T(1,2)
1234 T(2,2) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2) +
1235 . DPHI_DCOS2*(-THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1236 T(2,3) = (ONE/(F1-F2))*(SIN(TWO*THET)*COS(TWO*THET))*(DPHI_DSIG1-DPHI_DSIG2) +
1237 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(-FOUR*SIN(TWO*THET)*(COS(TWO*THET))**2 +
1238 . TWO*(SIN(TWO*THET)**3))
1239 T(3,1) = T(1,3)
1240 T(3,2) = T(2,3)
1241 T(3,3) = (TWO/(F1-F2))*((COS(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2)+
1242 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(EIGHT*(SIN(TWO*THET)**2)*COS(TWO*THET) -
1243 . FOUR*(COS(TWO*THET)**3))
1244
1245 ! Filling the rotation D matrix
1246 D(1,1) = HALF*(ONE+COS(TWO*THET))
1247 D(1,2) = HALF*(ONE-COS(TWO*THET))
1248 D(1,3) = SIN(TWO*THET)
1249 D(2,1) = HALF*(ONE-COS(TWO*THET))
1250 D(2,2) = HALF*(ONE+COS(TWO*THET))
1251 D(2,3) = -SIN(TWO*THET)
1252 D(3,1) = (SIN(TWO*THET)**2)/(F1-F2)
1253 D(3,2) = -(SIN(TWO*THET)**2)/(F1-F2)
1254 D(3,3) = -(TWO*SIN(TWO*THET)*COS(TWO*THET))/(F1-F2)
1255
1256 ! Assembling the Hessian Matrix Dt*DPHI_DSIG*D + T
1257 D2PHI_D2 = MATMUL(D2PHI_D2,D)
1258 D2PHI_D2 = MATMUL(TRANSPOSE(D),D2PHI_D2)
1259 D2PHI_D2(1:3,1:3) = D2PHI_D2(1:3,1:3) + T(1:3,1:3)
1260c
1261 ! Computation of eigen values
1262 WR = ZERO
1263 WI = ZERO
1264 VL = ZERO
1265 VR = ZERO
1266 WORK = ZERO
1267#ifndef WITHOUT_LINALG
1268 CALL DGEEV('n','n',3,D2PHI_D2,3,WR,WI,VL,3,VR,3,WORK,102,INFO)
1269#else
1270 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
1271#endif
1272c
1273 ! Storing the minimal value
1274 IF (MINVAL(WR)<MINEIG) THEN
1275 MINEIG = MINVAL(WR)
1276 MINEIGMU = MU
1277 MINEIGTHET = THET*(180.0D0/PI)
1278 ENDIF
1279c
1280 ! Updating the MU parameter
1281 MU = MU + ONE/TWENTY
1282 ENDDO
1283 ! Updating the theta angle
1284 THET = THET + (PI/TWO)/60.0D0
1285 ENDDO
1286c
1287 ! Convexity check and error message
1288 IF (MINEIG<-TOL) THEN
1289 CALL ANCMSG(MSGID=1805,MSGTYPE=MSGERROR,
1290 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR,
1291 . R1=MINEIG,R2=MINEIGMU,R3=MINEIGTHET)
1292 ENDIF
1293c
1294 ! Simplified Vegter Lite yield locus
1295 ELSE
1296c
1297 ! ------------------------------------------------------------------------
1298 ! 1. Checking convexity between uniaxial points in compression and tension
1299 ! ------------------------------------------------------------------------
1300c
1301 ! Minimum eigen value of the Hessian matrix of the yield locus
1302 MINEIG = INFINITY
1303 MINEIGMU = ZERO
1304 MINEIGTHET = ZERO
1305c
1306 ! Initialization of the THETA angle
1307 THET = ZERO
1308c
1309 ! Loop over the angles
1310 DO J = 1,61
1311c
1312 ! Initialization of the MU parameter
1313 MU = ZERO
1314 ! Computing the reference and hinge point for a giving angle
1315 ! Vector point
1316 A1 = ZERO
1317 A2 = ZERO
1318 B1 = ZERO
1319 B2 = ZERO
1320 C1 = ZERO
1321 C2 = ZERO
1322 WEIGHT = ZERO
1323 ! Initialization of the first derivative with respect to COS2THET
1324 DA_DCOS2(1:2) = ZERO
1325 DB_DCOS2(1:2) = ZERO
1326 DC_DCOS2(1:2) = ZERO
1327 DWEIGHT_DCOS2 = ZERO
1328 ! Initialization of the second derivative with respect to COS2THET
1329 D2A_D2COS2(1:2) = ZERO
1330 D2B_D2COS2(1:2) = ZERO
1331 D2C_D2COS2(1:2) = ZERO
1332 D2WEIGHT_D2COS2 = ZERO
1333 ! Loop over angles
1334 DO I = 1,NANGLE
1335 ! Computation of the reference points
1336 DO K = 1,I
1337 B1 = B1 + Q_HISH(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1338 B2 = B2 + Q_HISH(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1339 C1 = C1 + Q_fUN(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1340 C2 = C2 + Q_fUN(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1341 WEIGHT = WEIGHT + Q_WSH(I)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1342 ENDDO
1343 ENDDO
1344 A1 = C2
1345 A2 = -C1
1346 ! If anisotropic, compute derivatives with respect to COS2THET
1347 IF (NANGLE > 1) THEN
1348 ! Computation of their first derivative with respect to COS2THET
1349 DO I = 2, NANGLE
1350 DO K = 2,I
1351 DB_DCOS2(1:2) = DB_DCOS2(1:2) + Q_HISH(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
1352 DC_DCOS2(1:2) = DC_DCOS2(1:2) + Q_fUN(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
1353 DWEIGHT_DCOS2 = DWEIGHT_DCOS2 + Q_WSH(I)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
1354 ENDDO
1355 ENDDO
1356 DA_DCOS2(1) = DC_DCOS2(2)
1357 DA_DCOS2(2) = -DC_DCOS2(1)
1358 ! Computation of their second derivative with respect to COS2THET
1359 IF (NANGLE > 2) THEN
1360 DO I = 3, NANGLE
1361 DO K = 3,I
1362 D2B_D2COS2(1:2) = D2B_D2COS2(1:2) + Q_HISH(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
1363 D2C_D2COS2(1:2) = D2C_D2COS2(1:2) + Q_fUN(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
1364 D2WEIGHT_D2COS2 = D2WEIGHT_D2COS2 + Q_WSH(I)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
1365 ENDDO
1366 ENDDO
1367 D2A_D2COS2(1) = D2C_D2COS2(2)
1368 D2A_D2COS2(2) = -D2C_D2COS2(1)
1369 ENDIF
1370 ENDIF
1371c
1372 !----------------------------------------------
1373 ! Computing the Hessian matrix and eigen values
1374 !----------------------------------------------
1375 DO I = 1,21
1376c
1377 ! Computation of F1 and F2
1378 F1 = ((ONE-MU)**2)*A1 + TWO*MU*WEIGHT*(ONE-MU)*B1 + (MU**2)*C1
1379 F1 = F1/(((ONE-MU)**2) + TWO*MU*WEIGHT*(ONE-MU) + (MU**2))
1380 F2 = ((ONE-MU)**2)*A2 + TWO*MU*WEIGHT*(ONE-MU)*B2 + (MU**2)*C2
1381 F2 = F2/(((ONE-MU)**2) + TWO*MU*WEIGHT*(ONE-MU) + (MU**2))
1382 ! Derivatives of Fi with respect to MU
1383 U = A1*((ONE - MU)**2) + TWO*B1*MU*WEIGHT*(ONE-MU) + C1*(MU**2)
1384 UPRIM = -TWO*(ONE-MU)*A1 + TWO*WEIGHT*B1*(ONE-TWO*MU) + TWO*MU*C1
1385 UPPRIM = TWO*A1 - FOUR*WEIGHT*B1 + TWO*C1
1386 V = (ONE-MU)**2 + TWO*WEIGHT*MU*(ONE-MU) + MU**2
1387 VPRIM = -TWO*(ONE-MU) + TWO*WEIGHT*(ONE-TWO*MU) + TWO*MU
1388 VPPRIM = TWO - FOUR*WEIGHT + TWO
1389 DF1_DMU = (UPRIM*V - U*VPRIM)/MAX((V**2),EM20)
1390 D2F1_D2MU = ((UPPRIM*V - U*VPPRIM)*(V**2) -
1391 . (UPRIM*V - U*VPRIM)*(TWO*V*VPRIM))/MAX((V**4),EM20)
1392 U = A2*((ONE - MU)**2) + TWO*B2*MU*WEIGHT*(ONE-MU) + C2*(MU**2)
1393 UPRIM = -TWO*(ONE-MU)*A2 + TWO*WEIGHT*B2*(ONE-TWO*MU) + TWO*MU*C2
1394 UPPRIM = TWO*A2 - FOUR*WEIGHT*B2 + TWO*C2
1395 DF2_DMU = (UPRIM*V - U*VPRIM)/MAX((V**2),EM20)
1396 D2F2_D2MU = ((UPPRIM*V - U*VPPRIM)*(V**2) -
1397 . (UPRIM*V - U*VPRIM)*(TWO*V*VPRIM))/MAX((V**4),EM20)
1398 ! Denominator and its derivative with respect to MU
1399 DENOM = F1*DF2_DMU - F2*DF1_DMU
1400 DENOM = SIGN(MAX(ABS(DENOM),EM20),DENOM)
1401 ! Derivatives of Phi with respect to SIG1 and SIG2
1402 DPHI_DSIG1 = DF2_DMU/DENOM
1403 DPHI_DSIG2 = -DF1_DMU/DENOM
1404 ! Derivatives of MU with respect to SIG1 and SIG2
1405 DMU_DSIG1 = -F2/DENOM
1406 DMU_DSIG2 = F1/DENOM
1407c
1408 ! Derivatives of Fi with respect to COS2
1409 U = A1*((ONE - MU)**2) + TWO*B1*MU*WEIGHT*(ONE-MU) + C1*(MU**2)
1410 UPRIM = DA_DCOS2(1)*((ONE - MU)**2) + TWO*MU*(ONE-MU)*(DWEIGHT_DCOS2*B1+
1411 . WEIGHT*DB_DCOS2(1)) + DC_DCOS2(1)*(MU**2)
1412 UPPRIM = D2A_D2COS2(1)*((ONE - MU)**2) + TWO*MU*(ONE-MU)*(D2WEIGHT_D2COS2*B1+
1413 . TWO*DWEIGHT_DCOS2*DB_DCOS2(1) + WEIGHT*D2B_D2COS2(1)) +
1414 . D2C_D2COS2(1)*(MU**2)
1415 DU_DMU = -TWO*(ONE-MU)*A1 + TWO*WEIGHT*B1*(ONE-TWO*MU) + TWO*MU*C1
1416 DUPRIM_DMU = -TWO*(ONE-MU)*DA_DCOS2(1) + TWO*(ONE-TWO*MU)*(DWEIGHT_DCOS2*B1+
1417 . WEIGHT*DB_DCOS2(1)) + TWO*MU*DC_DCOS2(1)
1418 V = (ONE-MU)**2 + TWO*WEIGHT*MU*(ONE-MU) + MU**2
1419 DV_DMU = -TWO*(ONE-MU) + TWO*WEIGHT*(ONE-TWO*MU) + TWO*MU
1420 VPRIM = TWO*MU*(ONE-MU)*DWEIGHT_DCOS2
1421 DVPRIM_DMU = TWO*(ONE-TWO*MU)*DWEIGHT_DCOS2
1422 VPPRIM = TWO*MU*(ONE-MU)*D2WEIGHT_D2COS2
1423 DF1_DCOS2 = (UPRIM*V - U*VPRIM)/MAX((V**2),EM20)
1424 D2F1_D2COS2 = ((UPPRIM*V - U*VPPRIM)*(V**2) -
1425 . (UPRIM*V - U*VPRIM)*(TWO*V*VPRIM))/MAX((V**4),EM20)
1426 D2F1_D2MUCOS2 = ((DUPRIM_DMU*V + UPRIM*DV_DMU - DU_DMU*VPRIM - U*DVPRIM_DMU)*(V**2) -
1427 . (UPRIM*V - U*VPRIM)*(TWO*V*DV_DMU))/MAX((V**4),EM20)
1428c
1429 U = A2*((ONE - MU)**2) + TWO*B2*MU*WEIGHT*(ONE-MU) + C2*(MU**2)
1430 UPRIM = DA_DCOS2(2)*((ONE - MU)**2) + TWO*MU*(ONE-MU)*(DWEIGHT_DCOS2*B2+
1431 . WEIGHT*DB_DCOS2(2)) + DC_DCOS2(2)*(MU**2)
1432 UPPRIM = D2A_D2COS2(2)*((ONE - MU)**2) + TWO*MU*(ONE-MU)*(D2WEIGHT_D2COS2*B2+
1433 . TWO*DWEIGHT_DCOS2*DB_DCOS2(2) + WEIGHT*D2B_D2COS2(2)) +
1434 . D2C_D2COS2(2)*(MU**2)
1435 DU_DMU = -TWO*(ONE-MU)*A2 + TWO*WEIGHT*B2*(ONE-TWO*MU) + TWO*MU*C2
1436 DUPRIM_DMU = -TWO*(ONE-MU)*DA_DCOS2(2) + TWO*(ONE-TWO*MU)*(DWEIGHT_DCOS2*B2+
1437 . WEIGHT*DB_DCOS2(2)) + TWO*MU*DC_DCOS2(2)
1438 DF2_DCOS2 = (UPRIM*V - U*VPRIM)/MAX((V**2),EM20)
1439 D2F2_D2COS2 = ((UPPRIM*V - U*VPPRIM)*(V**2) -
1440 . (UPRIM*V - U*VPRIM)*(TWO*V*VPRIM))/MAX((V**4),EM20)
1441 D2F2_D2MUCOS2 = ((DUPRIM_DMU*V + UPRIM*DV_DMU - DU_DMU*VPRIM - U*DVPRIM_DMU)*(V**2) -
1442 . (UPRIM*V - U*VPRIM)*(TWO*V*DV_DMU))/MAX((V**4),EM20)
1443c
1444 DPHI_DCOS2 = (DF2_DCOS2*DF1_DMU - DF1_DCOS2*DF2_DMU)/DENOM
1445 DMU_DCOS2 = (F2*DF1_DCOS2 - F1*DF2_DCOS2)/DENOM
1446c
1447 ! Second derivatives of PHI with respect to SIG1 and SIG2 (Hessian matrix)
1448 !-------------------------------------------------------------------------
1449 ! FIRST LINE OF THE MATRIX
1450 ! D2PHI_D2SIG1
1451 D2PHI_D2(1,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG1
1452 ! D2PHI_DSIG1SIG2
1453 D2PHI_D2(1,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG2
1454 ! D2PHI_DSIG1COS2
1455 D2PHI_D2(1,3) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1456 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG1
1457 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG1)
1458c
1459 ! SECOND LINE OF THE MATRIX
1460 ! D2PHI_DSIG2SIG1
1461 D2PHI_D2(2,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG1
1462 ! D2PHI_D2SIG2
1463 D2PHI_D2(2,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG2
1464 ! D2PHI_DSIG2COS2
1465 D2PHI_D2(2,3) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1466 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG2
1467 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG2)
1468c
1469 ! THIRD LINE OF THE MATRIX
1470 ! D2PHI_D2COS2SIG1
1471 D2PHI_D2(3,1) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1472 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG1
1473 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG1)
1474 ! D2PHI_D2COS2SIG2
1475 D2PHI_D2(3,2) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1476 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG2
1477 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG2)
1478 ! D2PHI_D2COS2
1479 D2PHI_D2(3,3) = (-ONE/DENOM)*(DF2_DMU*(D2F1_D2COS2 + TWO*D2F1_D2MUCOS2*DMU_DCOS2 + D2F1_D2MU*(DMU_DCOS2**2))
1480 . - DF1_DMU*(D2F2_D2COS2 + TWO*D2F2_D2MUCOS2*DMU_DCOS2 + D2F2_D2MU*(DMU_DCOS2**2))
1481 . + TWO*(DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DCOS2)
1482c
1483 ! Filling the T matrix
1484 T(1,1) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2) +
1485 . DPHI_DCOS2*(-THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1486 T(1,2) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG2 - DPHI_DSIG1) +
1487 . DPHI_DCOS2*(THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1488 T(1,3) = (ONE/(F1-F2))*(SIN(TWO*THET)*COS(TWO*THET))*(DPHI_DSIG2 - DPHI_DSIG1) +
1489 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(FOUR*SIN(TWO*THET)*(COS(TWO*THET))**2 -
1490 . TWO*(SIN(TWO*THET)**3))
1491 T(2,1) = T(1,2)
1492 T(2,2) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2) +
1493 . DPHI_DCOS2*(-THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1494 T(2,3) = (ONE/(F1-F2))*(SIN(TWO*THET)*COS(TWO*THET))*(DPHI_DSIG1-DPHI_DSIG2) +
1495 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(-FOUR*SIN(TWO*THET)*(COS(TWO*THET))**2 +
1496 . TWO*(SIN(TWO*THET)**3))
1497 T(3,1) = T(1,3)
1498 T(3,2) = T(2,3)
1499 T(3,3) = (TWO/(F1-F2))*((COS(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2)+
1500 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(EIGHT*(SIN(TWO*THET)**2)*COS(TWO*THET) -
1501 . FOUR*(COS(TWO*THET)**3))
1502
1503 ! Filling the rotation D matrix
1504 D(1,1) = HALF*(ONE+COS(TWO*THET))
1505 D(1,2) = HALF*(ONE-COS(TWO*THET))
1506 D(1,3) = SIN(TWO*THET)
1507 D(2,1) = HALF*(ONE-COS(TWO*THET))
1508 D(2,2) = HALF*(ONE+COS(TWO*THET))
1509 D(2,3) = -SIN(TWO*THET)
1510 D(3,1) = (SIN(TWO*THET)**2)/(F1-F2)
1511 D(3,2) = -(SIN(TWO*THET)**2)/(F1-F2)
1512 D(3,3) = -(TWO*SIN(TWO*THET)*COS(TWO*THET))/(F1-F2)
1513
1514 ! Assembling the Hessian Matrix Dt*DPHI_DSIG*D + T
1515 D2PHI_D2 = MATMUL(D2PHI_D2,D)
1516 D2PHI_D2 = MATMUL(TRANSPOSE(D),D2PHI_D2)
1517 D2PHI_D2(1:3,1:3) = D2PHI_D2(1:3,1:3) + T(1:3,1:3)
1518c
1519 ! Computation of eigen values
1520 WR = ZERO
1521 WI = ZERO
1522 VL = ZERO
1523 VR = ZERO
1524 WORK = ZERO
1525#ifndef WITHOUT_LINALG
1526 CALL DGEEV('n','n',3,D2PHI_D2,3,WR,WI,VL,3,VR,3,WORK,102,INFO)
1527c
1528#else
1529 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
1530#endif
1531
1532 ! Storing the minimal value
1533 IF (MINVAL(WR)<MINEIG) THEN
1534 MINEIG = MINVAL(WR)
1535 MINEIGMU = MU
1536 MINEIGTHET = THET*(180.0D0/PI)
1537 ENDIF
1538 ! Updating the MU parameter
1539 MU = MU + ONE/TWENTY
1540 ENDDO
1541 ! Updating the theta angle
1542 THET = THET + (PI/TWO)/60.0D0
1543 ENDDO
1544c
1545 ! Convexity check and error message
1546 IF (MINEIG<-TOL) THEN
1547 CALL ANCMSG(MSGID=1806,MSGTYPE=MSGERROR,
1548 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR,
1549 . R1=MINEIG,R2=MINEIGMU,R3=MINEIGTHET)
1550 ENDIF
1551c
1552 ! ------------------------------------------------------------------------
1553 ! 2. Checking convexity between uniaxial tension and equi-biaxial points
1554 ! ------------------------------------------------------------------------
1555c
1556 ! Minimum eigen value of the Hessian matrix of the yield locus
1557 MINEIG = INFINITY
1558 MINEIGMU = ZERO
1559 MINEIGTHET = ZERO
1560c
1561 ! Initialization of the THETA angle
1562 THET = ZERO
1563c
1564 ! Loop over the angles
1565 DO J = 1,61
1566c
1567 ! Initialization of the MU parameter
1568 MU = ZERO
1569 ! Computing the reference and hinge point for a giving angle
1570 ! Vector point
1571 A1 = ZERO
1572 A2 = ZERO
1573 B1 = ZERO
1574 B2 = ZERO
1575 C1 = ZERO
1576 C2 = ZERO
1577 WEIGHT = ZERO
1578 ! Initialization of the first derivative with respect to COS2THET
1579 DA_DCOS2(1:2) = ZERO
1580 DB_DCOS2(1:2) = ZERO
1581 DC_DCOS2(1:2) = ZERO
1582 DWEIGHT_DCOS2 = ZERO
1583 ! Initialization of the second derivative with respect to COS2THET
1584 D2A_D2COS2(1:2) = ZERO
1585 D2B_D2COS2(1:2) = ZERO
1586 D2C_D2COS2(1:2) = ZERO
1587 D2WEIGHT_D2COS2 = ZERO
1588 ! Loop over angles
1589 DO I = 1,NANGLE
1590 ! Computation of the reference points
1591 DO K = 1,I
1592 A1 = A1 + Q_fUN(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1593 A2 = A2 + Q_fUN(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1594 B1 = B1 + Q_HIPS(I,1)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1595 B2 = B2 + Q_HIPS(I,2)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1596 WEIGHT = WEIGHT + Q_WPS(I)*COS2(K,I)*(COS(TWO*THET))**(K-1)
1597 ENDDO
1598 ENDDO
1599 C1 = fBI
1600 C2 = fBI
1601 ! If anisotropic, compute derivatives with respect to COS2THET
1602 IF (NANGLE > 1) THEN
1603 ! Computation of their first derivative with respect to COS2THET
1604 DO I = 2, NANGLE
1605 DO K = 2,I
1606 DA_DCOS2(1:2) = DA_DCOS2(1:2) + Q_fUN(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
1607 DB_DCOS2(1:2) = DB_DCOS2(1:2) + Q_HIPS(I,1:2)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
1608 DWEIGHT_DCOS2 = DWEIGHT_DCOS2 + Q_WPS(I)*(K-1)*COS2(K,I)*(COS(TWO*THET))**(K-2)
1609 ENDDO
1610 ENDDO
1611 ! Computation of their second derivative with respect to COS2THET
1612 IF (NANGLE > 2) THEN
1613 DO I = 3, NANGLE
1614 DO K = 3,I
1615 D2A_D2COS2(1:2) = D2A_D2COS2(1:2) + Q_fUN(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
1616 D2B_D2COS2(1:2) = D2B_D2COS2(1:2) + Q_HIPS(I,1:2)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
1617 D2WEIGHT_D2COS2 = D2WEIGHT_D2COS2 + Q_WPS(I)*(K-1)*(K-2)*COS2(K,I)*(COS(TWO*THET))**(K-3)
1618 ENDDO
1619 ENDDO
1620 ENDIF
1621 ENDIF
1622c
1623 !----------------------------------------------
1624 ! Computing the Hessian matrix and eigen values
1625 !----------------------------------------------
1626 DO I = 1,20
1627c
1628 ! Computation of F1 and F2
1629 F1 = ((ONE-MU)**2)*A1 + TWO*MU*WEIGHT*(ONE-MU)*B1 + (MU**2)*C1
1630 F1 = F1/(((ONE-MU)**2) + TWO*MU*WEIGHT*(ONE-MU) + (MU**2))
1631 F2 = ((ONE-MU)**2)*A2 + TWO*MU*WEIGHT*(ONE-MU)*B2 + (MU**2)*C2
1632 F2 = F2/(((ONE-MU)**2) + TWO*MU*WEIGHT*(ONE-MU) + (MU**2))
1633 ! Derivatives of Fi with respect to MU
1634 U = A1*((ONE - MU)**2) + TWO*B1*MU*WEIGHT*(ONE-MU) + C1*(MU**2)
1635 UPRIM = -TWO*(ONE-MU)*A1 + TWO*WEIGHT*B1*(ONE-TWO*MU) + TWO*MU*C1
1636 UPPRIM = TWO*A1 - FOUR*WEIGHT*B1 + TWO*C1
1637 V = (ONE-MU)**2 + TWO*WEIGHT*MU*(ONE-MU) + MU**2
1638 VPRIM = -TWO*(ONE-MU) + TWO*WEIGHT*(ONE-TWO*MU) + TWO*MU
1639 VPPRIM = TWO - FOUR*WEIGHT + TWO
1640 DF1_DMU = (UPRIM*V - U*VPRIM)/MAX((V**2),EM20)
1641 D2F1_D2MU = ((UPPRIM*V - U*VPPRIM)*(V**2) -
1642 . (UPRIM*V - U*VPRIM)*(TWO*V*VPRIM))/MAX((V**4),EM20)
1643 U = A2*((ONE - MU)**2) + TWO*B2*MU*WEIGHT*(ONE-MU) + C2*(MU**2)
1644 UPRIM = -TWO*(ONE-MU)*A2 + TWO*WEIGHT*B2*(ONE-TWO*MU) + TWO*MU*C2
1645 UPPRIM = TWO*A2 - FOUR*WEIGHT*B2 + TWO*C2
1646 DF2_DMU = (UPRIM*V - U*VPRIM)/MAX((V**2),EM20)
1647 D2F2_D2MU = ((UPPRIM*V - U*VPPRIM)*(V**2) -
1648 . (UPRIM*V - U*VPRIM)*(TWO*V*VPRIM))/MAX((V**4),EM20)
1649 ! Denominator and its derivative with respect to MU
1650 DENOM = F1*DF2_DMU - F2*DF1_DMU
1651 DENOM = SIGN(MAX(ABS(DENOM),EM20),DENOM)
1652 ! Derivatives of Phi with respect to SIG1 and SIG2
1653 DPHI_DSIG1 = DF2_DMU/DENOM
1654 DPHI_DSIG2 = -DF1_DMU/DENOM
1655 ! Derivatives of MU with respect to SIG1 and SIG2
1656 DMU_DSIG1 = -F2/DENOM
1657 DMU_DSIG2 = F1/DENOM
1658c
1659 ! Derivatives of Fi with respect to COS2
1660 U = A1*((ONE - MU)**2) + TWO*B1*MU*WEIGHT*(ONE-MU) + C1*(MU**2)
1661 UPRIM = DA_DCOS2(1)*((ONE - MU)**2) + TWO*MU*(ONE-MU)*(DWEIGHT_DCOS2*B1+
1662 . WEIGHT*DB_DCOS2(1)) + DC_DCOS2(1)*(MU**2)
1663 UPPRIM = D2A_D2COS2(1)*((ONE - MU)**2) + TWO*MU*(ONE-MU)*(D2WEIGHT_D2COS2*B1+
1664 . TWO*DWEIGHT_DCOS2*DB_DCOS2(1) + WEIGHT*D2B_D2COS2(1)) +
1665 . D2C_D2COS2(1)*(MU**2)
1666 DU_DMU = -TWO*(ONE-MU)*A1 + TWO*WEIGHT*B1*(ONE-TWO*MU) + TWO*MU*C1
1667 DUPRIM_DMU = -TWO*(ONE-MU)*DA_DCOS2(1) + TWO*(ONE-TWO*MU)*(DWEIGHT_DCOS2*B1+
1668 . WEIGHT*DB_DCOS2(1)) + TWO*MU*DC_DCOS2(1)
1669 V = (ONE-MU)**2 + TWO*WEIGHT*MU*(ONE-MU) + MU**2
1670 DV_DMU = -TWO*(ONE-MU) + TWO*WEIGHT*(ONE-TWO*MU) + TWO*MU
1671 VPRIM = TWO*MU*(ONE-MU)*DWEIGHT_DCOS2
1672 DVPRIM_DMU = TWO*(ONE-TWO*MU)*DWEIGHT_DCOS2
1673 VPPRIM = TWO*MU*(ONE-MU)*D2WEIGHT_D2COS2
1674 DF1_DCOS2 = (UPRIM*V - U*VPRIM)/MAX((V**2),EM20)
1675 D2F1_D2COS2 = ((UPPRIM*V - U*VPPRIM)*(V**2) -
1676 . (UPRIM*V - U*VPRIM)*(TWO*V*VPRIM))/MAX((V**4),EM20)
1677 D2F1_D2MUCOS2 = ((DUPRIM_DMU*V + UPRIM*DV_DMU - DU_DMU*VPRIM - U*DVPRIM_DMU)*(V**2) -
1678 . (UPRIM*V - U*VPRIM)*(TWO*V*DV_DMU))/MAX((V**4),EM20)
1679c
1680 U = A2*((ONE - MU)**2) + TWO*B2*MU*WEIGHT*(ONE-MU) + C2*(MU**2)
1681 UPRIM = DA_DCOS2(2)*((ONE - MU)**2) + TWO*MU*(ONE-MU)*(DWEIGHT_DCOS2*B2+
1682 . WEIGHT*DB_DCOS2(2)) + DC_DCOS2(2)*(MU**2)
1683 UPPRIM = D2A_D2COS2(2)*((ONE - MU)**2) + TWO*MU*(ONE-MU)*(D2WEIGHT_D2COS2*B2+
1684 . TWO*DWEIGHT_DCOS2*DB_DCOS2(2) + WEIGHT*D2B_D2COS2(2)) +
1685 . D2C_D2COS2(2)*(MU**2)
1686 DU_DMU = -TWO*(ONE-MU)*A2 + TWO*WEIGHT*B2*(ONE-TWO*MU) + TWO*MU*C2
1687 DUPRIM_DMU = -TWO*(ONE-MU)*DA_DCOS2(2) + TWO*(ONE-TWO*MU)*(DWEIGHT_DCOS2*B2+
1688 . WEIGHT*DB_DCOS2(2)) + TWO*MU*DC_DCOS2(2)
1689 DF2_DCOS2 = (UPRIM*V - U*VPRIM)/MAX((V**2),EM20)
1690 D2F2_D2COS2 = ((UPPRIM*V - U*VPPRIM)*(V**2) -
1691 . (UPRIM*V - U*VPRIM)*(TWO*V*VPRIM))/MAX((V**4),EM20)
1692 D2F2_D2MUCOS2 = ((DUPRIM_DMU*V + UPRIM*DV_DMU - DU_DMU*VPRIM - U*DVPRIM_DMU)*(V**2) -
1693 . (UPRIM*V - U*VPRIM)*(TWO*V*DV_DMU))/MAX((V**4),EM20)
1694c
1695 DPHI_DCOS2 = (DF2_DCOS2*DF1_DMU - DF1_DCOS2*DF2_DMU)/DENOM
1696 DMU_DCOS2 = (F2*DF1_DCOS2 - F1*DF2_DCOS2)/DENOM
1697c
1698 ! Second derivatives of PHI with respect to SIG1 and SIG2 (Hessian matrix)
1699 !-------------------------------------------------------------------------
1700 ! FIRST LINE OF THE MATRIX
1701 ! D2PHI_D2SIG1
1702 D2PHI_D2(1,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG1
1703 ! D2PHI_DSIG1SIG2
1704 D2PHI_D2(1,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG2
1705 ! D2PHI_DSIG1COS2
1706 D2PHI_D2(1,3) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1707 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG1
1708 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG1)
1709c
1710 ! SECOND LINE OF THE MATRIX
1711 ! D2PHI_DSIG2SIG1
1712 D2PHI_D2(2,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG1
1713 ! D2PHI_D2SIG2
1714 D2PHI_D2(2,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG2
1715 ! D2PHI_DSIG2COS2
1716 D2PHI_D2(2,3) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1717 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG2
1718 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG2)
1719c
1720 ! THIRD LINE OF THE MATRIX
1721 ! D2PHI_D2COS2SIG1
1722 D2PHI_D2(3,1) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1723 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG1
1724 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG1)
1725 ! D2PHI_D2COS2SIG2
1726 D2PHI_D2(3,2) = (-ONE/DENOM)*((DF2_DMU*(D2F1_D2MUCOS2+D2F1_D2MU*DMU_DCOS2) -
1727 . DF1_DMU*(D2F2_D2MUCOS2+D2F2_D2MU*DMU_DCOS2))*DMU_DSIG2
1728 . + (DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DSIG2)
1729 ! D2PHI_D2COS2
1730 D2PHI_D2(3,3) = (-ONE/DENOM)*(DF2_DMU*(D2F1_D2COS2 + TWO*D2F1_D2MUCOS2*DMU_DCOS2 + D2F1_D2MU*(DMU_DCOS2**2))
1731 . - DF1_DMU*(D2F2_D2COS2 + TWO*D2F2_D2MUCOS2*DMU_DCOS2 + D2F2_D2MU*(DMU_DCOS2**2))
1732 . + TWO*(DF2_DMU*DF1_DCOS2 - DF1_DMU*DF2_DCOS2)*DPHI_DCOS2)
1733c
1734 ! Filling the T matrix
1735 T(1,1) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2) +
1736 . DPHI_DCOS2*(-THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1737 T(1,2) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG2 - DPHI_DSIG1) +
1738 . DPHI_DCOS2*(THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1739 T(1,3) = (ONE/(F1-F2))*(SIN(TWO*THET)*COS(TWO*THET))*(DPHI_DSIG2 - DPHI_DSIG1) +
1740 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(FOUR*SIN(TWO*THET)*(COS(TWO*THET))**2 -
1741 . TWO*(SIN(TWO*THET)**3))
1742 T(2,1) = T(1,2)
1743 T(2,2) = (HALF/(F1-F2))*((SIN(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2) +
1744 . DPHI_DCOS2*(-THREE/(F1-F2)**2)*COS(TWO*THET)*(SIN(TWO*THET))**2
1745 T(2,3) = (ONE/(F1-F2))*(SIN(TWO*THET)*COS(TWO*THET))*(DPHI_DSIG1-DPHI_DSIG2) +
1746 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(-FOUR*SIN(TWO*THET)*(COS(TWO*THET))**2 +
1747 . TWO*(SIN(TWO*THET)**3))
1748 T(3,1) = T(1,3)
1749 T(3,2) = T(2,3)
1750 T(3,3) = (TWO/(F1-F2))*((COS(TWO*THET))**2)*(DPHI_DSIG1-DPHI_DSIG2)+
1751 . DPHI_DCOS2*(ONE/(F1-F2)**2)*(EIGHT*(SIN(TWO*THET)**2)*COS(TWO*THET) -
1752 . FOUR*(COS(TWO*THET)**3))
1753
1754 ! Filling the rotation D matrix
1755 D(1,1) = HALF*(ONE+COS(TWO*THET))
1756 D(1,2) = HALF*(ONE-COS(TWO*THET))
1757 D(1,3) = SIN(TWO*THET)
1758 D(2,1) = HALF*(ONE-COS(TWO*THET))
1759 D(2,2) = HALF*(ONE+COS(TWO*THET))
1760 D(2,3) = -SIN(TWO*THET)
1761 D(3,1) = (SIN(TWO*THET)**2)/(F1-F2)
1762 D(3,2) = -(SIN(TWO*THET)**2)/(F1-F2)
1763 D(3,3) = -(TWO*SIN(TWO*THET)*COS(TWO*THET))/(F1-F2)
1764
1765 ! Assembling the Hessian Matrix Dt*DPHI_DSIG*D + T
1766 D2PHI_D2 = MATMUL(D2PHI_D2,D)
1767 D2PHI_D2 = MATMUL(TRANSPOSE(D),D2PHI_D2)
1768 D2PHI_D2(1:3,1:3) = D2PHI_D2(1:3,1:3) + T(1:3,1:3)
1769c
1770 ! Computation of eigen values
1771 WR = ZERO
1772 WI = ZERO
1773 VL = ZERO
1774 VR = ZERO
1775 WORK = ZERO
1776#ifndef WITHOUT_LINALG
1777 CALL DGEEV('n','n',3,D2PHI_D2,3,WR,WI,VL,3,VR,3,WORK,102,INFO)
1778#else
1779 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
1780#endif
1781
1782c
1783 ! Storing the minimal value
1784 IF (MINVAL(WR)<MINEIG) THEN
1785 MINEIG = MINVAL(WR)
1786 MINEIGMU = MU
1787 MINEIGTHET = THET*(180.0D0/PI)
1788 ENDIF
1789 ! Updating the MU parameter
1790 MU = MU + ONE/TWENTY
1791 ENDDO
1792 ! Updating the theta angle
1793 THET = THET + (PI/TWO)/60.0D0
1794 ENDDO
1795c
1796 ! Convexity check and error message
1797 IF (MINEIG<-TOL) THEN
1798 CALL ANCMSG(MSGID=1807,MSGTYPE=MSGERROR,
1799 . ANMODE=ANINFO_BLIND_1,I1=MAT_ID,C1=TITR,
1800 . R1=MINEIG,R2=MINEIGMU,R3=MINEIGTHET)
1801 ENDIF
1802c
1803 ENDIF
1804c
1805c--------------------------
1806c Filling buffer tables
1807c--------------------------
1808 ! Number of material parameter
1809 NUPARAM = 29
1810.OR..OR. IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
1811 NUPARAM = NUPARAM + 17*NANGLE
1812 ELSE
1813 NUPARAM = NUPARAM + 11*NANGLE
1814 ENDIF
1815 ! Number of function and temp variable
1816 IF (TAB_YLD > 0) THEN
1817 NTABL = 1
1818 ITABLE(1) = TAB_YLD ! Yield function table = f(epsp,epsdot)
1819 NVARTMP = 1
1820 IF (TAB_TEMP > 0) THEN
1821 NTABL = 2
1822 ITABLE(2) = TAB_TEMP ! Temperature scale factor table = f(epsp,T)
1823 NVARTMP = 3
1824 ENDIF
1825 ELSE
1826 NTABL = 0
1827 NVARTMP = 0
1828 ENDIF
1829 ! Number of user variable
1830 NUVAR = 1
1831 IF (Ires == 1) THEN
1832 NUVAR = 2
1833 ENDIF
1834c
1835 ! Material parameters
1836 UPARAM(1) = YOUNG
1837 UPARAM(2) = NU
1838 UPARAM(3) = G
1839 UPARAM(4) = TWO*G
1840 UPARAM(5) = NU/(ONE-NU)
1841 UPARAM(6) = A11
1842 UPARAM(7) = A11*NU
1843 UPARAM(8) = YLD0
1844 UPARAM(9) = DSIGM
1845 UPARAM(10) = BETA
1846 UPARAM(11) = OMEGA
1847 UPARAM(12) = NEXP
1848 UPARAM(13) = EPS0
1849 UPARAM(14) = SIGSTAR
1850 UPARAM(15) = DG0
1851 UPARAM(16) = Deps0
1852 UPARAM(17) = MEXP
1853 UPARAM(18) = KBOLTZ
1854 IF (XSCALE /= ZERO) THEN
1855 UPARAM(19) = ONE/XSCALE
1856 ELSE
1857 UPARAM(19) = ZERO
1858 ENDIF
1859 UPARAM(20) = YSCALE
1860 UPARAM(21) = FISOKIN
1861 UPARAM(22) = ASRATE
1862 UPARAM(23) = Ivflag
1863 UPARAM(24) = TINI
1864 UPARAM(25) = fBI
1865 UPARAM(26) = NANGLE
1866 UPARAM(27) = Icrit
1867 UPARAM(28) = Ismooth
1868 UPARAM(29) = Ires
1869.OR..OR. IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
1870 DO J = 1,NANGLE
1871 UPARAM(30+17*(J-1)) = HIPS(J,1)
1872 UPARAM(31+17*(J-1)) = HIPS(J,2)
1873 UPARAM(32+17*(J-1)) = HIUN(J,1)
1874 UPARAM(33+17*(J-1)) = HIUN(J,2)
1875 UPARAM(34+17*(J-1)) = HISH(J,1)
1876 UPARAM(35+17*(J-1)) = HISH(J,2)
1877 UPARAM(36+17*(J-1)) = Q_fSH(J,1)
1878 UPARAM(37+17*(J-1)) = Q_fSH(J,2)
1879 UPARAM(38+17*(J-1)) = Q_fUN(J,1)
1880 UPARAM(39+17*(J-1)) = Q_fPS(J,1)
1881 UPARAM(40+17*(J-1)) = Q_fPS(J,2)
1882 UPARAM(41+17*(J-1)) = Q_HISH(J,1)
1883 UPARAM(42+17*(J-1)) = Q_HISH(J,2)
1884 UPARAM(43+17*(J-1)) = Q_HIUN(J,1)
1885 UPARAM(44+17*(J-1)) = Q_HIUN(J,2)
1886 UPARAM(45+17*(J-1)) = Q_HIPS(J,1)
1887 UPARAM(46+17*(J-1)) = Q_HIPS(J,2)
1888 ENDDO
1889 ELSE
1890 DO J = 1,NANGLE
1891 UPARAM(30+11*(J-1)) = HIPS(J,1)
1892 UPARAM(31+11*(J-1)) = HIPS(J,2)
1893 UPARAM(32+11*(J-1)) = HISH(J,1)
1894 UPARAM(33+11*(J-1)) = HISH(J,2)
1895 UPARAM(34+11*(J-1)) = Q_fUN(J,1)
1896 UPARAM(35+11*(J-1)) = Q_HISH(J,1)
1897 UPARAM(36+11*(J-1)) = Q_HISH(J,2)
1898 UPARAM(37+11*(J-1)) = Q_HIPS(J,1)
1899 UPARAM(38+11*(J-1)) = Q_HIPS(J,2)
1900 UPARAM(39+11*(J-1)) = Q_WSH(J)
1901 UPARAM(40+11*(J-1)) = Q_WPS(J)
1902 ENDDO
1903 ENDIF
1904c
1905 ! PARMAT table
1906 PARMAT(1) = BULK
1907 PARMAT(2) = YOUNG
1908 PARMAT(3) = NU
1909 PARMAT(4) = ISRATE
1910 PARMAT(5) = ASRATE
1911c
1912 ! PM table
1913 PM(1) = RHO0
1914 PM(89) = RHO0
1915 PM(27) = SQRT(A11/RHO0) ! sound speed estimation
1916 PM(100)= BULK
1917c
1918 ! MTAG variable activation
1919 MTAG%G_PLA = 1
1920 MTAG%L_PLA = 1
1921 MTAG%L_EPSD = 1
1922 MTAG%G_EPSD = 1
1923 MTAG%L_SEQ = 1
1924 MTAG%G_SEQ = 1
1925 MTAG%L_TEMP = 1
1926 MTAG%G_TEMP = 1
1927 IF (FISOKIN > ZERO) THEN
1928 MTAG%L_SIGA = 3
1929 ENDIF
1930c
1931 CALL INIT_MAT_KEYWORD(MATPARAM,"ELASTO_PLASTIC")
1932 CALL INIT_MAT_KEYWORD(MATPARAM,"INCREMENTAL" )
1933 CALL INIT_MAT_KEYWORD(MATPARAM,"LARGE_STRAIN" )
1934 CALL INIT_MAT_KEYWORD(MATPARAM,"ORTHOTROPIC" )
1935c
1936 ! Properties compatibility
1937 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ORTHOTROPIC")
1938c
1939c--------------------------
1940c Parameters printout
1941c--------------------------
1942 WRITE(IOUT,1000) TRIM(TITR),MAT_ID,ILAW
1943 IF (Icrit == 1) THEN
1944 WRITE(IOUT,1100)
1945 ELSEIF (Icrit == 2) THEN
1946 WRITE(IOUT,1125)
1947 ELSEIF (Icrit == 3) THEN
1948 WRITE(IOUT,1135)
1949 ELSE
1950 WRITE(IOUT,1150)
1951 ENDIF
1952 IF (IS_ENCRYPTED) THEN
1953 WRITE(IOUT,'(5x,a,//)')'confidential data'
1954 ELSE
1955 WRITE(IOUT,1200) RHO0
1956 WRITE(IOUT,1300) YOUNG,NU
1957 WRITE(IOUT,1350) Ires
1958 IF (ITABLE(1)>0) THEN
1959 WRITE(IOUT,1500) ITABLE(1),XSCALE,YSCALE,Ismooth,EPS0,FISOKIN,
1960 . Ivflag,ITABLE(2),TINI
1961 ELSE
1962 WRITE(IOUT,1400) YLD0,DSIGM,BETA,OMEGA,NEXP,EPS0,FISOKIN
1963 IF (SIGSTAR>ZERO) THEN
1964 WRITE(IOUT,1600) SIGSTAR,DG0,Deps0,MEXP,TINI,ASRATE,Ivflag
1965 ENDIF
1966 ENDIF
1967.OR..OR. IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
1968 DO J = 1,NANGLE
1969 WRITE(IOUT,1700) THETA(J),fSH(J,1),fSH(J,2),HISH(J,1),HISH(J,2),
1970 . fUN(J,1),fUN(J,2),rLank(J),HIUN(J,1),HIUN(J,2),
1971 . fPS(J,1),fPS(J,2),HIPS(J,1),HIPS(J,2),fBI,fBI
1972 ENDDO
1973 ELSE
1974 DO J = 1,NANGLE
1975 WRITE(IOUT,1750) THETA(J),HISH(J,1),HISH(J,2),WSH(J),
1976 . fUN(J,1),fUN(J,2),rLank(J),HIPS(J,1),
1977 . HIPS(J,2),WPS(J),fBI,fBI
1978 ENDDO
1979 ENDIF
1980 ENDIF
1981c-----------------------------------------------------------------------
1982 1000 FORMAT(/
1983 & 5X,A,/,
1984 & 5X,'material number. . . . . . . . . . . . =',I10/,
1985 & 5X,'material law . . . . . . . . . . . . . =',I10/)
1986 1100 FORMAT
1987 &(5X,'material model : vegter elasto-plastic',/,
1988 & 5x,'--------------------------------------',/)
1989 1125 FORMAT
1990 &(5x,'MATERIAL MODEL : VEGTER STANDARD ELASTO-PLASTIC',/,
1991 & 5x,'-----------------------------------------------',/)
1992 1135 FORMAT
1993 &(5x,'MATERIAL MODEL : VEGTER 2017 ELASTO-PLASTIC',/,
1994 & 5x,'-------------------------------------------',/)
1995 1150 FORMAT
1996 &(5x,'MATERIAL MODEL : SIMPLIFIED VEGTER LITE ELASTO-PLASTIC',/,
1997 & 5x,'------------------------------------------------------',/)
1998 1200 FORMAT(
1999 & 5x,'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/)
2000 1300 FORMAT(
2001 & 5x,'YOUNG MODULUS . . . . . . . . . . . . .=',1pg20.13/
2002 & 5x,'POISSON RATIO . . . . . . . . . . . . .=',1pg20.13/)
2003 1350 FORMAT(
2004 & 5x,'RETURN MAPPING ALGORITHM FLAG . . . . .=',i3/
2005 & 5x,' IRES=1 NICE EXPLICIT'/
2006 & 5x,' IRES=2 NEWTON-ITERATION IMPLICIT (CUTTING PLANE)'/)
2007 1400 FORMAT(
2008 & 5x,'INITIAL YIELD STRESS . . . . . . . . .=',1pg20.13/
2009 & 5x,'STRESS HARDENING INCREMENT. . . . . . .=',1pg20.13/
2010 & 5x,'SMALL STRAIN HARDENING PARAMETER . . .=',1pg20.13/
2011 & 5x,'LARGE STRAIN HARDENING PARAMETER . . .=',1pg20.13/
2012 & 5x,'HARDENING EXPONENT . . . . . . . . . .=',1pg20.13/
2013 & 5x,'INITIAL PLASTIC STRAIN . . . . . . . .=',1pg20.13/
2014 & 5x,'KINEMATIC HARDENING FACTOR . . . . . .=',1pg20.13/)
2015 1500 FORMAT(
2016 & 5x,'TABULATED YIELD - STRAIN RATE TABLE ID.=',i10/
2017 & 5x,'TABULATED YIELD X FACTOR . . . . . . .=',1pg20.13/
2018 & 5x,'TABULATED YIELD Y FACTOR . . . . . . .=',1pg20.13/
2019 & 5x,'TABLE INTERPOLATION FLAG . . . . . . .=',i10/
2020 & 5x,' ISMOOTH=1 LINEAR INTERPOLATION'/
2021 & 5x,' ISMOOTH=2 LOGARITHMIC INTERPOLATION BASE 10'/
2022 & 5x,' ISMOOTH=3 LOGARITHMIC INTERPOLATION BASE N'/
2023 & 5x,'INITIAL PLASTIC STRAIN . . . . . . . .=',1pg20.13/
2024 & 5x,'KINEMATIC HARDENING FACTOR . . . . . .=',1pg20.13/
2025 & 5x,'STRAIN-RATE CHOICE FLAG . . . . . . . .=',i10/
2026 & 5x,' VP=1 EQUIVALENT PLASTIC STRAIN RATE'/
2027 & 5x,' VP=2 TOTAL STRAIN RATE (DEFAULT)'/
2028 & 5x,' VP=3 DEVIATORIC STRAIN RATE'/
2029 & 5x,'tabulated yield - temperature table id .=',I10/
2030 & 5X,'initial(reference) temperature. . . . .=',1PG20.13/)
2031 1600 FORMAT(
2032 & 5X,'limit dynamic flow stress . . . . . . .=',1PG20.13/
2033 & 5X,'maximum activation enthalpy . . . . . .=',1PG20.13/
2034 & 5X,'thermal activation limit strain-rate .=',1PG20.13/
2035 & 5X,'strain-rate exponent . . . . . . . . .=',1PG20.13/
2036 & 5X,'initial temperature . . . . . . . . . .=',1PG20.13/
2037 & 5X,'strain-rate cutting frequency . . . . .=',1PG20.13/
2038 & 5X,'strain-rate choice flag . . . . . . . .=',I10/
2039 & 5X,' vp=1 equivalent plastic strain rate'/
2040 & 5X,' vp=2 total strain rate(default)'/
2041 & 5X,' vp=3 deviatoric strain rate'/)
2042 1700 FORMAT(
2043 & 5X,'|| DATA for angle(deg) . . . . . . . .=',1PG20.13/
2044 & 5X,'shear reference point . . . . . . . . . '/
2045 & 5X,' first coordinate fsh1. . . . . .=',1PG20.13/
2046 & 5X,' second coordinate fsh2. . . . . .=',1PG20.13/
2047 & 5X,'shear/uniaxial hinge point. . . . . . . '/
2048 & 5X,' first coordinate hish1 . . . . .=',1PG20.13/
2049 & 5X,' second coordinate hish2 . . . . .=',1PG20.13/
2050 & 5X,'uniaxial reference point. . . . . . . . '/
2051 & 5X,' first coordinate fun1. . . . . .=',1PG20.13/
2052 & 5X,' second coordinate fun2. . . . . .=',1PG20.13/
2053 & 5X,' lankford coefficient . . . . . .=',1PG20.13/
2054 & 5X,'uniaxial/plane-strain hinge point . . . '/
2055 & 5X,' first coordinate hiun1 . . . . .=',1PG20.13/
2056 & 5X,' second coordinate hiun2 . . . . .=',1PG20.13/
2057 & 5X,'plane-strain reference point . . . . . '/
2058 & 5X,' first coordinate fps1. . . . . .=',1PG20.13/
2059 & 5X,' second coordinate fps2. . . . . .=',1PG20.13/
2060 & 5X,'plane-strain/biaxial hinge point. . . . '/
2061 & 5X,' first coordinate hips1 . . . . .=',1PG20.13/
2062 & 5X,' second coordinate hips2 . . . . .=',1PG20.13/
2063 & 5X,'biaxial reference point . . . . . . . . '/
2064 & 5X,' first coordinate fbi1. . . . . .=',1PG20.13/
2065 & 5X,' second coordinate fbi2. . . . . .=',1pg20.13/)
2066 1750 FORMAT(
2067 & 5x,'|| DATA FOR ANGLE (DEG) . . . . . . . .=',1pg20.13/
2068 & 5x,'SHEAR HINGE POINT . . . . . . . . . . . '/
2069 & 5x,' FIRST COORDINATE HISH1 . . . . .=',1pg20.13/
2070 & 5x,' SECOND COORDINATE HISH2 . . . . .=',1pg20.13/
2071 & 5x,' SHEAR WEIGHT FACTOR . . . . . . .=',1pg20.13/
2072 & 5x,'UNIAXIAL REFERENCE POINT. . . . . . . . '/
2073 & 5x,' FIRST COORDINATE fUN1. . . . . .=',1pg20.13/
2074 & 5x,' SECOND COORDINATE fUN2. . . . . .=',1pg20.13/
2075 & 5x,' LANKFORD COEFFICIENT . . . . . .=',1pg20.13/
2076 & 5x,'PLANE-STRAIN HINGE POINT . . . . . . . '/
2077 & 5x,' FIRST COORDINATE HIPS1 . . . . .=',1pg20.13/
2078 & 5x,' SECOND COORDINATE HIPS2 . . . . .=',1pg20.13/
2079 & 5x,' PLANE-STRAIN WEIGHT FACTOR. . . .=',1pg20.13/
2080 & 5x,'BIAXIAL REFERENCE POINT . . . . . . . . '/
2081 & 5x,' FIRST COORDINATE fBI1. . . . . .=',1pg20.13/
2082 & 5x,' SECOND COORDINATE fBI2. . . . . .=',1pg20.13/)
2083c-----------------------------------------------------------------------
2084 RETURN
2085 END
#define my_real
Definition cppsort.cpp:32
subroutine eig1(k_diag, k_lt, iadk, jdik, ms, in, nddl, ndof, nnzl, x, d, v, a, bufel, ixs, ixq, ixc, ixt, ixp, ixr, ixtg, pm, geo, cont, icut, skew, xcut, fint, itab, fext, fopt, anin, lpby, npby, nstrf, rwbuf, nprw, tani, elbuf_tab, matparam_tab, dd_iad, fr_iad, dd_front, cluster, weight, eani, ipart, rby, nom_opt, igrsurf, bufsf, idata, rdata, bufmat, bufgeo, kxx, ixx, kxsp, ixsp, nod2sp, spbuf, ixs10, ixs20, ixs16, vr, monvol, volmon, ipm, igeo, iparg, eigipm, eigibuf, eigrpm, ldiag, ljdik, ljdik2, ikc, maxncv, thke, nms, nint2, iint2, ipari, intbuf_tab, nodglob, iad_elem, fr_elem, fr_sec, fr_rby2, iad_rby2, fr_wall, inloc, iddl, partsav, fncont, ftcont, temp, err_thk_sh4, err_thk_sh3, irbe2, irbe3, lrbe2, lrbe3, fr_rbe2, fr_rbe3m, iad_rbe2, weight_md, fcluster, mcluster, xfem_tab, w, nv46, nercvois, nesdvois, lercvois, lesdvois, crkedge, indx_crk, xedge4n, xedge3n, stack, sph2sol, stifn, stifr, drape_q4, drape_t3, h3d_data, subset, igrnod, fcont_max, fncontp2, ftcontp2, ale_connectivity)
Definition eig1.F:68
subroutine hm_get_float_array_index(name, rval, index, is_available, lsubmodel, unitab)
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_mat110(uparam, maxuparam, nuparam, nuvar, ntabl, mtag, parmat, unitab, pm, lsubmodel, israte, mat_id, titr, itable, maxtabl, nvartmp, matparam)
#define max(a, b)
Definition macros.h:21
initmumps id
for(i8=*sizetab-1;i8 >=0;i8--)
integer, parameter nchartitle
real function second()
SECOND Using ETIME
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
subroutine tabulated(iflag, nel, pm, off, eint, mu, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, npf, tf)
Definition tabulated.F:32