45
46
47
52 USE matparam_def_mod
54
55
56
57#include "implicit_f.inc"
58
59
60
61#include "units_c.inc"
62#include "param_c.inc"
63
64
65
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
77
78
79
80
81 INTEGER I, J, K, ILAW, Ivflag, NANGLE, , Icrit, TAB_YLD, Ismooth,
82 . TAB_TEMP,ITER,Ires
83
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
109
110 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
111
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. /
123
124 is_encrypted = .false.
125 is_available = .false.
126 ilaw = 110
127
129
130
131
132 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
133 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
134
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)
138
139 CALL hm_get_intv (
'MAT_Icrit' ,icrit ,is_available, lsubmodel)
140
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)
152
153
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)
163
164
165 CALL hm_get_floatv(
'Epsilon_0' ,eps0 ,is_available, lsubmodel, unitab)
166 CALL hm_get_floatv(
'MAT_SIGS' ,sigstar ,is_available, lsubmodel
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)
170
171
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)
182
183
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
197 DO j = 1, nangle
200 IF (rlank(j) == 0) rlank(j) = one
204 ENDDO
205
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
219 DO j = 1, nangle
222 IF (rlank(j) == 0) rlank(j) = one
225 IF (alps(j) == zero) alps(j) = half
227 ENDDO
228
229 ELSEIF (icrit == 3) THEN
230
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
256
257
258
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
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
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
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
276 fun(1,1) = epsag(1)/epseq(1)
277 fun(2,1) = epsag(1)/epseq(2)
278 fun(3,1) = epsag(1)/epseq(3)
279
280
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
292
293
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
302
303
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))))
315
316
317 DO j = 1, nangle
318
319 theta(j) = (j-1)*(90.0d0/(nangle-1))
320 theta_rad(j) = theta(j)*(pi/180.0d0)
321
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
326 fh(2) = (fbi + rhobi_theta*fbi - fun(j,1))/(rhobi_theta - rhoone_theta)
327 fh(1) = fbi - rhobi_theta*(fh(2)-fbi)
328
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
335 DO iter = 1,10
336
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
343 weight = weight - (phi / dfps1_dweight)
344
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
348 phi = fps1-fps(j,1)
349 ENDDO
350
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
354
355
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
367 DO j = 1, nangle
370 IF (rlank(j) == 0) rlank(j) = one
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
382
383
384
385
386
387 IF (rhor == zero) rhor = rho0
388 IF (ires == 0) ires = 2
389
390 IF (nu < zero .OR. nu >= half) THEN
392 . msgtype=msgerror,
393 . anmode=aninfo_blind_2,
394 . r1=nu,
395 . i1=mat_id,
396 . c1=titr)
397 ENDIF
398
399 bulk = young / three / (one - two*nu)
400 a11 = young / (one-nu*nu)
401 g = young / two / (one + nu)
402
403 IF (ivflag == 0) ivflag = 2
404 IF (ivflag > 3) THEN
405 CALL ancmsg(msgid=1802,msgtype=msgerror,
406 . anmode
407 . i2=ivflag)
408 ENDIF
409
410 IF ((tab_yld == 0).AND.((deps0 == zero).OR.(dg0 == zero).OR.(sigstarTHEN
411 sigstar = zero
412 deps0 = one
413 dg0 = one
414 israte = 0
415 asrate = zero
416
417 CALL ancmsg(msgid=1801,msgtype=msginfo,
418 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
419 ELSE
420
421 israte = 1
422
423 IF ((asrate == zero).OR.(ivflag == 1)) asrate = 10000.0d0*unitab%FAC_T_WORK
424 ENDIF
425
426 kboltz = 8.6173303*em5
427 kboltz = kboltz/(unitab%FAC_M_WORK*unitab%FAC_L_WORK*unitab%FAC_L_WORK/(unitab%FAC_T_WORK*unitab%FAC_T_WORK))
428
429 IF (fisokin > one) fisokin = one
430 IF (fisokin < zero) fisokin = zero
431
432 IF (ismooth == 0) ismooth = 1
433
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
448
449
450
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))
456
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
467
468 ! Loop over angles
469 DO J = 1, NANGLE
470
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)
489
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)
505
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
512
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)
528
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)
548
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
565
566
567
568
569
570 ! Allocation of the A-MATRIX and the Pivot vector
571 ALLOCATE (AMAT(NANGLE,NANGLE),IPIV(NANGLE))
572
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
582
583 ! Classical Vegter yield locus and Standard Vegter yield locus
584.OR..OR. IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
585
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))
589
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
597
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)
606
607 ! Initialization of the Pivot vector
608 IPIV(1:NANGLE) = 0
609
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
616
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)
624
625 ! Simplified Vegter Lite yield locus
626 ELSE
627
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))
631
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
638
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)
646
647 ! Initialization of the Pivot vector
648 IPIV(1:NANGLE) = 0
649
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
657
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)
664
665 ENDIF
666
667
668
669
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 ! ---------------------------------------------------------
676
677 ! Minimum eigen value of the Hessian matrix of the yield locus
678 MINEIG = INFINITY
679 MINEIGMU = ZERO
680 MINEIGTHET = ZERO
681
682 ! Initialization of the THETA angle
683 THET = ZERO
684
685 ! Loop over the angles
686 DO J = 1,61
687
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
739
740 !----------------------------------------------
741 ! Computing the Hessian matrix and eigen values
742 !----------------------------------------------
743 DO I = 1,21
744
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
763
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
769
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)
775
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)
787
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)
797
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)
811
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)
847
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
859
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
872
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
879
880 ! -------------------------------------------------------------
881 ! 2. Checking convexity between uniaxial and plane strain point
882 ! -------------------------------------------------------------
883
884 ! Minimum eigen value of the Hessian matrix of the yield locus
885 MINEIG = INFINITY
886 MINEIGMU = ZERO
887 MINEIGTHET = ZERO
888
889 ! Initialization of the THETA angle
890 THET = ZERO
891
892 ! Loop over the angles
893 DO J = 1,61
894
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
946
947 !----------------------------------------------
948 ! Computing the Hessian matrix and eigen values
949 !----------------------------------------------
950 DO I = 1,21
951
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
970
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
976
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)
982
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)
994
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)
1004
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)
1018
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))
1038
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)
1049
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)
1054
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
1069
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
1082
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
1089
1090 ! -------------------------------------------------------------
1091 ! 3. Checking convexity between plane-strain and biaxial point
1092 ! -------------------------------------------------------------
1093
1094 ! Minimum eigen value of the Hessian matrix of the yield locus
1095 MINEIG = INFINITY
1096 MINEIGMU = ZERO
1097 MINEIGTHET = ZERO
1098
1099 ! Initialization of the THETA angle
1100 THET = ZERO
1101
1102 ! Loop over the angles
1103 DO J = 1,61
1104
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
1152
1153 !----------------------------------------------
1154 ! Computing the Hessian matrix and eigen values
1155 !----------------------------------------------
1156 DO I = 1,20
1157
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
1176
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
1182
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)
1188
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)
1200
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)
1210
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)
1224
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)
1260
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
1272
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
1279
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
1286
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
1293
1294 ! Simplified Vegter Lite yield locus
1295 ELSE
1296
1297 ! ------------------------------------------------------------------------
1298 ! 1. Checking convexity between uniaxial points in compression and tension
1299 ! ------------------------------------------------------------------------
1300
1301 ! Minimum eigen value of the Hessian matrix of the yield locus
1302 MINEIG = INFINITY
1303 MINEIGMU = ZERO
1304 MINEIGTHET = ZERO
1305
1306 ! Initialization of the THETA angle
1307 THET = ZERO
1308
1309 ! Loop over the angles
1310 DO J = 1,61
1311
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
1371
1372 !----------------------------------------------
1373 ! Computing the Hessian matrix and eigen values
1374 !----------------------------------------------
1375 DO I = 1,21
1376
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
1407
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)
1428
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)
1443
1444 DPHI_DCOS2 = (DF2_DCOS2*DF1_DMU - DF1_DCOS2*DF2_DMU)/DENOM
1445 DMU_DCOS2 = (F2*DF1_DCOS2 - F1*DF2_DCOS2)/DENOM
1446
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)
1458
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)
1468
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)
1482
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)
1518
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)
1527
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
1544
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
1551
1552 ! ------------------------------------------------------------------------
1553 ! 2. Checking convexity between uniaxial tension and equi-biaxial points
1554 ! ------------------------------------------------------------------------
1555
1556 ! Minimum eigen value of the Hessian matrix of the yield locus
1557 MINEIG = INFINITY
1558 MINEIGMU = ZERO
1559 MINEIGTHET = ZERO
1560
1561 ! Initialization of the THETA angle
1562 THET = ZERO
1563
1564 ! Loop over the angles
1565 DO J = 1,61
1566
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
1622
1623 !----------------------------------------------
1624 ! Computing the Hessian matrix and eigen values
1625 !----------------------------------------------
1626 DO I = 1,20
1627
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
1658
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)
1679
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)
1694
1695 DPHI_DCOS2 = (DF2_DCOS2*DF1_DMU - DF1_DCOS2*DF2_DMU)/DENOM
1696 DMU_DCOS2 = (F2*DF1_DCOS2 - F1*DF2_DCOS2)/DENOM
1697
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)
1709
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)
1719
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)
1733
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)
1769
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
1782
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
1795
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
1802
1803 ENDIF
1804
1805
1806
1807
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
1834
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
1904
1905 ! PARMAT table
1906 PARMAT(1) = BULK
1907 PARMAT(2) = YOUNG
1908 PARMAT(3) = NU
1909 PARMAT(4) = ISRATE
1910 PARMAT(5) = ASRATE
1911
1912 ! PM table
1913 PM(1) = RHO0
1914 PM(89) = RHO0
1915 PM(27) = SQRT(A11/RHO0) ! sound speed estimation
1916 PM(100)= BULK
1917
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
1930
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" )
1935
1936 ! Properties compatibility
1937 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ORTHOTROPIC")
1938
1939
1940
1941
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
1981
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 strainPARAMETER . . .=',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'/
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/)
2083
2084 RETURN
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)
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)
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)
subroutine tabulated(iflag, nel, pm, off, eint, mu, espe, dvol, df, vnew, mat, psh, pnew, dpdm, dpde, npf, tf)