41 . UPARAM ,MAXUPARAM,NUPARAM ,NUVAR ,NTABL ,
42 . MTAG ,PARMAT ,UNITAB ,PM ,LSUBMODEL,
43 . ISRATE ,MAT_ID ,TITR ,ITABLE ,MAXTABL ,
57#include "implicit_f.inc"
66 TYPE (UNIT_TYPE_),
INTENT(IN) ::UNITAB
67 INTEGER,
INTENT(IN) :: MAT_ID,MAXUPARAM,MAXTABL
68 ,
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
76 TYPE(),
INTENT(INOUT) :: MATPARAM
81 INTEGER I, J, K, ILAW, Ivflag, NANGLE, INFO, Icrit, TAB_YLD, Ismooth,
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,
106 . epsag,sigag,cag,epseq
107 INTEGER,
DIMENSION(:),
ALLOCATABLE :: IPIV
108 my_real,
PARAMETER :: tol = 1.0d-6
110 LOGICAL :: IS_AVAILABLE,IS_ENCRYPTED
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. /
124 is_encrypted = .false.
125 is_available = .false.
132 CALL hm_get_floatv(
'MAT_RHO' ,rho0 ,is_available, lsubmodel, unitab)
133 CALL hm_get_floatv(
'Refer_Rho' ,rhor ,is_available, lsubmodel, unitab)
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)
139 CALL hm_get_intv (
'MAT_Icrit' ,icrit ,is_available, lsubmodel)
141 IF (icrit == 0) icrit = 1
143 CALL ancmsg(msgid=1776,msgtype=msgerror,
144 . anmode=aninfo_blind_1,i1=mat_id,c1=titr,
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)
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)
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)
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)
172 CALL hm_get_floatv(
'T_Initial' ,tini ,is_available, lsubmodel
174 CALL ancmsg(msgid=1778,msgtype=msgwarning,
175 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
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)
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)
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))
200 IF (rlank(j) == 0) rlank(j) = one
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)
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))
222 IF (rlank(j) == 0) rlank(j) = one
225 IF (alps(j) == zero) alps(j) = half
229 ELSEIF (icrit == 3)
THEN
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)
247CALL 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
259 epsag(1) = log(one + ag(1)/hundred)
260 epsag(2) = log(one + ag(2)/hundred)
261 epsag(3) = log(one + ag(3)/hundred)
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)
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))
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))
276 fun(1,1) = epsag(1)/epseq(1)
277 fun(2,1) = epsag(1)/epseq(2)
278 fun(3,1) = epsag(1)/epseq(3)
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
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)
299 fdirac = exp(adirac*(rlank(j)-fps_trans))
300 fps(j,1) = fun(j,1)*((fps_min/(one+fdirac)) + (fps_max/(one+(one/fdirac))))
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))
319 theta(j) = (j-1)*(90.0d0/(nangle-1))
320 theta_rad(j) = theta(j)*(pi/180.0d0)
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)
326 fh(2) = (fbi + rhobi_theta*fbi - fun
327 fh(1) = fbi - rhobi_theta*(fh(2)-fbi)
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
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
343 weight = weight - (phi
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)
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)
358 IF (nangle > 10)
THEN
359 CALL ancmsg(msgid=1779,msgtype=msgerror,
360 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
362 IF (.NOT.
ALLOCATED(fun))
ALLOCATE
363 IF (.NOT.
ALLOCATED(rlank))
ALLOCATE(rlank
364 IF (.NOT.
ALLOCATED(wps))
ALLOCATE(wps(nangle))
365 IF (.NOT.
ALLOCATED(wsh))
ALLOCATE(wsh(nangle))
370 IF (rlank(j) == 0) rlank(j) = one
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)
387 IF (rhor == zero) rhor = rho0
388 IF (ires == 0) ires = 2
390 IF (nu < zero .OR. nu >= half)
THEN
393 . anmode=aninfo_blind_2,
399 bulk = young / three / (one - two*nu)
400 a11 = young / (one-nu*nu)
401 g = young / two / (one + nu)
403 IF (ivflag == 0) ivflag = 2
405 CALL ancmsg(msgid=1802,msgtype=msgerror,
406 . anmode=aninfo_blind_1,i1=mat_id,c1=titr,
410 IF ((tab_yld == 0).AND.((deps0 == zero).OR.(dg0 == zero).OR.(sigstar == zero)))
THEN
417 CALL ancmsg(msgid=1801,msgtype=msginfo,
418 . anmode=aninfo_blind_1,i1=mat_id,c1=titr)
423 IF ((asrate == zero).OR.(ivflag == 1)) asrate = 10000.0d0*unitab%FAC_T_WORK
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
429 IF (fisokin > one) fisokin = one
430 IF (fisokin < zero) fisokin = zero
432 IF (ismooth == 0) ismooth = 1
434 IF (tab_yld == 0)
THEN
439 IF ((tab_temp > 0).AND.(tini == zero)) tini
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
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
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))
457 ! Computation of angles
460 THETA(J) = (J-1)*(90.0D0/(NANGLE-1))
461 THETA_RAD(J) = THETA(J)*(PI/180.0D0)
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
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)))
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)
490 ! Computation of Hinge point between Plane-strain and Uniaxial point
491 ! Uniaxial point and normal
496 N2 = -rLank(J)/(rLank(J)+ONE)
497 ! Plane strain point and normal
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)
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))
513 ! Computation of Hinge point between Uniaxial point and Shear point
514 ! Shear point and normal
516 fSH(J,2) = -fSH(NANGLE-(J-1),1)
520 ! Plane strain point and normal
524 M2 = -rLank(J)/(rLank(J)+ONE)
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)
529 ! Hinge points for the simplified Corus-Vegter lite yield locus (2 hinge points)
531 ! Computation of Hinge point between Bi-axial and Uniaxial point
532 ! Uniaxial point and normal
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)))
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)
549 ! Computation of Hinge point between Uniaxial point in tension and Uniaxial point in compression
550 ! Uniaxial point in compression
553 N1 = rLank(J)/(rLank(J)+ONE)
555 ! Uniaxial point in tension
559 M2 = -rLank(J)/(rLank(J)+ONE)
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)
570 ! Allocation of the A-MATRIX and the Pivot vector
571 ALLOCATE (AMAT(NANGLE,NANGLE),IPIV(NANGLE))
573 ! Filling the A-MATRIX
578 AMAT(J,I) = AMAT(J,I) + COS2(K,I)*(COS(TWO*THETA_RAD(J)))**(K-1)
583 ! Classical Vegter yield locus and Standard Vegter yield locus
584.OR..OR.
IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
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))
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
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)
607 ! Initialization of the Pivot vector
610 ! Solving the A-MATRIX * x = B vector system
611#ifndef WITHOUT_LINALG
612 CALL DGESV(NANGLE, 12, AMAT, NANGLE, IPIV, BVEC, NANGLE, INFO)
614 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
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)
625 ! Simplified Vegter Lite yield locus
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))
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
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)
647 ! Initialization of the Pivot vector
650 ! Solving the A-MATRIX * x = B vector system
651#ifndef WITHOUT_LINALG
652 CALL DGESV(NANGLE, 8, AMAT, NANGLE, IPIV, BVEC, NANGLE, INFO)
654 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
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)
670 ! Classical Vegter yield locus and Standard Yield locus
671.OR..OR.
IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
673 ! ---------------------------------------------------------
674 ! 1. Checking convexity between shear and uniaxial point
675 ! ---------------------------------------------------------
677 ! Minimum eigen value of the Hessian matrix of the yield locus
682 ! Initialization of the THETA angle
685 ! Loop over the angles
688 ! Initialization of the MU parameter
690 ! Computing the reference and hinge point for a giving angle
698 ! Initialization of the first derivative with respect to COS2THET
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
708 ! Computation of the reference points
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)
718 ! If anisotropic, compute derivatives with respect to COS2THET
720 ! Computation of their first derivative with respect to COS2THET
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)
728 ! Computation of their second derivative with respect to COS2THET
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)
740 !----------------------------------------------
741 ! Computing the Hessian matrix and eigen values
742 !----------------------------------------------
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
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
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)
776 ! Second derivatives of PHI with respect to SIG1 and SIG2 (Hessian matrix)
777 !-------------------------------------------------------------------------
778 ! FIRST LINE OF THE MATRIX
780 D2PHI_D2(1,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG1
782 D2PHI_D2(1,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG2
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)
788 ! SECOND LINE OF THE MATRIX
790 D2PHI_D2(2,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG1
792 D2PHI_D2(2,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG2
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)
798 ! THIRD LINE OF THE MATRIX
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)
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)
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)
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))
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))
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))
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)
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)
848 ! Computation of eigen values
854#ifndef WITHOUT_LINALG
855 CALL DGEEV('n
','n
',3,D2PHI_D2,3,WR,WI,VL,3,VR,3,WORK,102,INFO)
857 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
860 ! Storing the minimal value
861 IF (MINVAL(WR)<MINEIG) THEN
864 MINEIGTHET = THET*(180.0D0/PI)
866 ! Updating the MU parameter
869 ! Updating the theta angle
870 THET = THET + (PI/TWO)/60.0D0
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)
880 ! -------------------------------------------------------------
881 ! 2. Checking convexity between uniaxial and plane strain point
882 ! -------------------------------------------------------------
884 ! Minimum eigen value of the Hessian matrix of the yield locus
889 ! Initialization of the THETA angle
892 ! Loop over the angles
895 ! Initialization of the MU parameter
897 ! Computing the reference and hinge point for a giving angle
905 ! Initialization of the first derivative with respect to COS2THET
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
915 ! Computation of the reference points
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)
925 ! If anisotropic, compute derivatives with respect to COS2THET
927 ! Computation of their first derivative with respect to COS2THET
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)
935 ! Computation of their second derivative with respect to COS2THET
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)
947 !----------------------------------------------
948 ! Computing the Hessian matrix and eigen values
949 !----------------------------------------------
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
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
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)
983 ! Second derivatives of PHI with respect to SIG1 and SIG2 (Hessian matrix)
984 !-------------------------------------------------------------------------
985 ! FIRST LINE OF THE MATRIX
987 D2PHI_D2(1,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG1
989 D2PHI_D2(1,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG2
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)
995 ! SECOND LINE OF THE MATRIX
997 D2PHI_D2(2,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG1
999 D2PHI_D2(2,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG2
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)
1005 ! THIRD LINE OF THE MATRIX
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)
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)
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)
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))
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))
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))
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)
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)
1055 ! Computation of eigen values
1064#ifndef WITHOUT_LINALG
1065 CALL DGEEV('n
','n
',3,D2PHI_D2,3,WR,WI,VL,3,VR,3,WORK,102,INFO)
1067 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
1070 ! Storing the minimal value
1071 IF (MINVAL(WR)<MINEIG) THEN
1074 MINEIGTHET = THET*(180.0D0/PI)
1076 ! Updating the MU parameter
1077 MU = MU + ONE/TWENTY
1079 ! Updating the theta angle
1080 THET = THET + (PI/TWO)/60.0D0
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)
1090 ! -------------------------------------------------------------
1091 ! 3. Checking convexity between plane-strain and biaxial point
1092 ! -------------------------------------------------------------
1094 ! Minimum eigen value of the Hessian matrix of the yield locus
1099 ! Initialization of the THETA angle
1102 ! Loop over the angles
1105 ! Initialization of the MU parameter
1107 ! Computing the reference and hinge point for a giving angle
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
1125 ! Computation of the reference points
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)
1133 ! If anisotropic, compute derivatives with respect to COS2THET
1134 IF (NANGLE > 1) THEN
1135 ! Computation of their first derivative with respect to COS2THET
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)
1142 ! Computation of their second derivative with respect to COS2THET
1143 IF (NANGLE > 2) THEN
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)
1153 !----------------------------------------------
1154 ! Computing the Hessian matrix and eigen values
1155 !----------------------------------------------
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
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
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)
1189 ! Second derivatives of PHI with respect to SIG1 and SIG2 (Hessian matrix)
1190 !-------------------------------------------------------------------------
1191 ! FIRST LINE OF THE MATRIX
1193 D2PHI_D2(1,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG1
1195 D2PHI_D2(1,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG2
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)
1201 ! SECOND LINE OF THE MATRIX
1203 D2PHI_D2(2,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG1
1205 D2PHI_D2(2,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG2
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)
1211 ! THIRD LINE OF THE MATRIX
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)
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)
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)
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))
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))
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))
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)
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)
1261 ! Computation of eigen values
1267#ifndef WITHOUT_LINALG
1268 CALL DGEEV('n
','n
',3,D2PHI_D2,3,WR,WI,VL,3,VR,3,WORK,102,INFO)
1270 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
1273 ! Storing the minimal value
1274 IF (MINVAL(WR)<MINEIG) THEN
1277 MINEIGTHET = THET*(180.0D0/PI)
1280 ! Updating the MU parameter
1281 MU = MU + ONE/TWENTY
1283 ! Updating the theta angle
1284 THET = THET + (PI/TWO)/60.0D0
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)
1294 ! Simplified Vegter Lite yield locus
1297 ! ------------------------------------------------------------------------
1298 ! 1. Checking convexity between uniaxial points in compression and tension
1299 ! ------------------------------------------------------------------------
1301 ! Minimum eigen value of the Hessian matrix of the yield locus
1306 ! Initialization of the THETA angle
1309 ! Loop over the angles
1312 ! Initialization of the MU parameter
1314 ! Computing the reference and hinge point for a giving angle
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
1335 ! Computation of the reference points
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)
1346 ! If anisotropic, compute derivatives with respect to COS2THET
1347 IF (NANGLE > 1) THEN
1348 ! Computation of their first derivative with respect to COS2THET
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)
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
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)
1367 D2A_D2COS2(1) = D2C_D2COS2(2)
1368 D2A_D2COS2(2) = -D2C_D2COS2(1)
1372 !----------------------------------------------
1373 ! Computing the Hessian matrix and eigen values
1374 !----------------------------------------------
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
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)
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)
1444 DPHI_DCOS2 = (DF2_DCOS2*DF1_DMU - DF1_DCOS2*DF2_DMU)/DENOM
1445 DMU_DCOS2 = (F2*DF1_DCOS2 - F1*DF2_DCOS2)/DENOM
1447 ! Second derivatives of PHI with respect to SIG1 and SIG2 (Hessian matrix)
1448 !-------------------------------------------------------------------------
1449 ! FIRST LINE OF THE MATRIX
1451 D2PHI_D2(1,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG1
1453 D2PHI_D2(1,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG2
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)
1459 ! SECOND LINE OF THE MATRIX
1461 D2PHI_D2(2,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG1
1463 D2PHI_D2(2,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG2
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)
1469 ! THIRD LINE OF THE MATRIX
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)
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)
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)
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))
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))
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))
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)
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)
1519 ! Computation of eigen values
1525#ifndef WITHOUT_LINALG
1526 CALL DGEEV('n
','n
',3,D2PHI_D2,3,WR,WI,VL,3,VR,3,WORK,102,INFO)
1529 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
1532 ! Storing the minimal value
1533 IF (MINVAL(WR)<MINEIG) THEN
1536 MINEIGTHET = THET*(180.0D0/PI)
1538 ! Updating the MU parameter
1539 MU = MU + ONE/TWENTY
1541 ! Updating the theta angle
1542 THET = THET + (PI/TWO)/60.0D0
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)
1552 ! ------------------------------------------------------------------------
1553 ! 2. Checking convexity between uniaxial tension and equi-biaxial points
1554 ! ------------------------------------------------------------------------
1556 ! Minimum eigen value of the Hessian matrix of the yield locus
1561 ! Initialization of the THETA angle
1564 ! Loop over the angles
1567 ! Initialization of the MU parameter
1569 ! Computing the reference and hinge point for a giving angle
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
1590 ! Computation of the reference points
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)
1601 ! If anisotropic, compute derivatives with respect to COS2THET
1602 IF (NANGLE > 1) THEN
1603 ! Computation of their first derivative with respect to COS2THET
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)
1611 ! Computation of their second derivative with respect to COS2THET
1612 IF (NANGLE > 2) THEN
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)
1623 !----------------------------------------------
1624 ! Computing the Hessian matrix and eigen values
1625 !----------------------------------------------
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
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)
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)
1695 DPHI_DCOS2 = (DF2_DCOS2*DF1_DMU - DF1_DCOS2*DF2_DMU)/DENOM
1696 DMU_DCOS2 = (F2*DF1_DCOS2 - F1*DF2_DCOS2)/DENOM
1698 ! Second derivatives of PHI with respect to SIG1 and SIG2 (Hessian matrix)
1699 !-------------------------------------------------------------------------
1700 ! FIRST LINE OF THE MATRIX
1702 D2PHI_D2(1,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG1
1704 D2PHI_D2(1,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG1*DMU_DSIG2
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)
1710 ! SECOND LINE OF THE MATRIX
1712 D2PHI_D2(2,1) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG1
1714 D2PHI_D2(2,2) = (-ONE/DENOM)*(DF2_DMU*D2F1_D2MU-DF1_DMU*D2F2_D2MU)*DMU_DSIG2*DMU_DSIG2
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)
1720 ! THIRD LINE OF THE MATRIX
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)
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)
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)
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))
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))
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))
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)
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)
1770 ! Computation of eigen values
1776#ifndef WITHOUT_LINALG
1777 CALL DGEEV('n
','n
',3,D2PHI_D2,3,WR,WI,VL,3,VR,3,WORK,102,INFO)
1779 WRITE(6,*) "Error: Blas/Lapack required for MAT110"
1783 ! Storing the minimal value
1784 IF (MINVAL(WR)<MINEIG) THEN
1787 MINEIGTHET = THET*(180.0D0/PI)
1789 ! Updating the MU parameter
1790 MU = MU + ONE/TWENTY
1792 ! Updating the theta angle
1793 THET = THET + (PI/TWO)/60.0D0
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)
1808 ! Number of material parameter
1810.OR..OR.
IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
1811 NUPARAM = NUPARAM + 17*NANGLE
1813 NUPARAM = NUPARAM + 11*NANGLE
1815 ! Number of function and temp variable
1816 IF (TAB_YLD > 0) THEN
1818 ITABLE(1) = TAB_YLD ! Yield function table = f(epsp,epsdot)
1820 IF (TAB_TEMP > 0) THEN
1822 ITABLE(2) = TAB_TEMP ! Temperature scale factor table = f(epsp,T)
1829 ! Number of user variable
1835 ! Material parameters
1840 UPARAM(5) = NU/(ONE-NU)
1849 UPARAM(14) = SIGSTAR
1854 IF (XSCALE /= ZERO) THEN
1855 UPARAM(19) = ONE/XSCALE
1860 UPARAM(21) = FISOKIN
1867 UPARAM(28) = Ismooth
1869.OR..OR.
IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
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)
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)
1915 PM(27) = SQRT(A11/RHO0) ! sound speed estimation
1918 ! MTAG variable activation
1927 IF (FISOKIN > ZERO) THEN
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" )
1936 ! Properties compatibility
1937 CALL INIT_MAT_KEYWORD(MATPARAM,"SHELL_ORTHOTROPIC")
1942 WRITE(IOUT,1000) TRIM(TITR),MAT_ID,ILAW
1943 IF (Icrit == 1) THEN
1945 ELSEIF (Icrit == 2) THEN
1947 ELSEIF (Icrit == 3) THEN
1952 IF (IS_ENCRYPTED) THEN
1953 WRITE(IOUT,'(5x,a,//)
')'confidential data
'
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
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
1967.OR..OR.
IF ((Icrit == 1)(Icrit == 2)(Icrit == 3)) THEN
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
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
1984 & 5X,'material number. . . . . . . . . . . . =
',I10/,
1985 & 5X,'material law . . .
',I10/)
1987 &(5X,'material model : vegter elasto-plastic',/,
1988 & 5x,
'--------------------------------------',/)
1990 &(5x,
'MATERIAL MODEL : VEGTER STANDARD ELASTO-PLASTIC',/,
1991 & 5x,
'-----------------------------------------------',/)
1993 &(5x,
'MATERIAL MODEL : VEGTER 2017 ELASTO-PLASTIC',/,
1994 & 5x,
'-------------------------------------------',/)
1996 &(5x,
'MATERIAL MODEL : SIMPLIFIED VEGTER LITE ELASTO-PLASTIC',/,
1997 & 5x,
'------------------------------------------------------',/)
1999 & 5x,
'INITIAL DENSITY . . . . . . . . . . . .=',1pg20.13/)
2001 & 5x,
'YOUNG MODULUS . . . . . . . . . . . . .=',1pg20.13/
2002 & 5x,
'POISSON RATIO . . . . . . . . . . . . .=',1pg20.13/)
2004 & 5x,
'RETURN MAPPING ALGORITHM FLAG . . . . .=',i3/
2005 & 5x,
' IRES=1 NICE EXPLICIT'/
2006 & 5x,
' IRES=2 NEWTON-ITERATION IMPLICIT (CUTTING PLANE)'/)
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/)
2016 & 5x,
'TABULATED YIELD - STRAIN RATE TABLE ID.=',i10/
2017 & 5x,
'TABULATED YIELD X FACTOR . . . . . . .=',1pg20
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 . . . . . . . .='
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/)
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
'/)
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/)
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/)
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)