1
Subroutine xc_xsogga(tol_rho, fac,lfac,nlfac, rho, delrho,
2
& Amat, Cmat, nq, ipol, Ex,
3
& qwght, ldew, func, ijzy)
5
c$Id: xc_xsogga.F 22503 2012-05-20 06:58:57Z d3y133 $
9
c**********************************************************************c
11
c SOGGA11X evaluates the exchange part of the SOGGA, SOGGA11 c
12
c and SOGGA11-X functionals on the grid. c
14
c a) Zhao and Truhlar, J.Chem.Phys., 128, 184109 (2008) c
15
c b) Peverati, Zhao and Truhlar, J.Phys.Chem.Lett, 2, 1991 (2011) c
16
c c) Peverati and Truhlar, J.Chem.Phys, 135, 191102 (2011) c
18
c ijzy = 1 - SOGGA functional (a) - it requres PBE correlation c
19
c ijzy = 2 - SOGGA11 functional (b) c
20
c ijzy = 3 - SOGGA11-X functional (c) c
22
c Coded by Roberto Peverati (12/11) c
24
c**********************************************************************c
28
double precision fac, Ex
30
logical lfac, nlfac,ldew
31
double precision func(*) ! value of the functional [output]
33
c Charge Density & Its Cube Root
35
double precision rho(nq,ipol*(ipol+1)/2)
37
c Charge Density Gradient
39
double precision delrho(nq,3,ipol)
43
double precision qwght(nq)
45
c Sampling Matrices for the XC Potential & Energy
47
double precision Amat(nq,ipol), Cmat(nq,*)
48
double precision tol_rho, pi
50
c Intermediate derivative results, etc.
54
double precision CxA0,CxA1,CxA2,CxA3,CxA4,CxA5
55
double precision CxB0,CxB1,CxB2,CxB3,CxB4,CxB5
56
double precision rho43, rho13, rhoo
58
double precision AS, ASO, AX, DELOCDR
59
double precision DFA1DG, DFA1DR, DFA1DY
60
double precision DFA2DG, DFA2DR, DFA2DY
61
double precision DFA3DG, DFA3DR, DFA3DY
62
double precision DFA4DG, DFA4DR, DFA4DY
63
double precision DFA5DG, DFA5DR, DFA5DY
64
double precision DFB1DG, DFB1DR, DFB1DY
65
double precision DFB2DG, DFB2DR, DFB2DY
66
double precision DFB3DG, DFB3DR, DFB3DY
67
double precision DFB4DG, DFB4DR, DFB4DY
68
double precision DFB5DG, DFB5DR, DFB5DY
69
double precision DFEXPDPON, DFFRACDPON, DFGGAXDG, DFGGAXDR
70
double precision DYDG, DYDR, DTOL, ELOC
71
double precision FA0, FA1, FA2, FA3, FA4, FA5
72
double precision FB0, FB1, FB2, FB3, FB4, FB5
73
double precision FEXP, FFRAC, FGGAX, MU, PON, S, X, Y
74
double precision Gam12, Gam
76
double precision f1,f2,f3,f4,f5,f8
77
double precision F1o3,F4o3,F48
78
parameter( F1=1.0D+00, F2=2.0D+00, F3=3.0D+00,
79
$ F4=4.0D+00, F5=5.0D+00, F8=8.0D+00,
98
elseif (ijzy.eq.2) then
112
elseif (ijzy.eq.3) then
132
AsO = (F48*PI*PI)**F1o3
134
Ax = -(F3/F2) * (F4o3*Pi)**(-F1o3)
139
c ======> SPIN-RESTRICTED <======
145
if (rho(n,1).lt.DTol) goto 10
149
Gam =(delrho(n,1,1)*delrho(n,1,1) +
150
& delrho(n,2,1)*delrho(n,2,1) +
151
& delrho(n,3,1)*delrho(n,3,1))/F4
153
if(gam12.lt.dtol) goto 10
160
Ffrac = F1-F1/(F1+PON)
164
fa2 = CxA2 *Ffrac**F2
165
fa3 = CxA3 *Ffrac**F3
166
fa4 = CxA4 *Ffrac**F4
167
fa5 = CxA5 *Ffrac**F5
175
Fggax = fa0+fa1+fa2+fa3+fa4+fa5 +
176
$ fb0+fb1+fb2+fb3+fb4+fb5
181
dElocdR=Ax*F4o3*Rho13
182
dydR = -(F8/F3)*y/Rhoo
184
dFfracdPON = F1/((F1+PON)**F2)
185
dFexpdPON = exp(-PON)
186
dfa1dy = CxA1 *mu*dFfracdPON
187
dfa2dy = CxA2 *mu*F2*Ffrac*dFfracdPON
188
dfa3dy = CxA3 *mu*(F3 *Ffrac**F2)*dFfracdPON
189
dfa4dy = CxA4 *mu*(F4 *Ffrac**F3)*dFfracdPON
190
dfa5dy = CxA5 *mu*(F5 *Ffrac**F4)*dFfracdPON
191
dfa1dR = dfa1dy *dydR
192
dfa2dR = dfa2dy *dydR
193
dfa3dR = dfa3dy *dydR
194
dfa4dR = dfa4dy *dydR
195
dfa5dR = dfa5dy *dydR
196
dfa1dG = dfa1dy *dydG
197
dfa2dG = dfa2dy *dydG
198
dfa3dG = dfa3dy *dydG
199
dfa4dG = dfa4dy *dydG
200
dfa5dG = dfa5dy *dydG
201
dfb1dy = CxB1 *mu*dFexpdPON
202
dfb2dy = CxB2 *mu*F2*Fexp*dFexpdPON
203
dfb3dy = CxB3 *mu*(F3 *Fexp**F2)*dFexpdPON
204
dfb4dy = CxB4 *mu*(F4 *Fexp**F3)*dFexpdPON
205
dfb5dy = CxB5 *mu*(F5 *Fexp**F4)*dFexpdPON
206
dfb1dR = dfb1dy *dydR
207
dfb2dR = dfb2dy *dydR
208
dfb3dR = dfb3dy *dydR
209
dfb4dR = dfb4dy *dydR
210
dfb5dR = dfb5dy *dydR
211
dfb1dG = dfb1dy *dydG
212
dfb2dG = dfb2dy *dydG
213
dfb3dG = dfb3dy *dydG
214
dfb4dG = dfb4dy *dydG
215
dfb5dG = dfb5dy *dydG
217
dFggaxdR = dfa1dR+dfa2dR+dfa3dR+dfa4dR+dfa5dR +
218
$ dfb1dR+dfb2dR+dfb3dR+dfb4dR+dfb5dR
220
dFggaxdG = dfa1dG+dfa2dG+dfa3dG+dfa4dG+dfa5dG +
221
$ dfb1dG+dfb2dG+dfb3dG+dfb4dG+dfb5dG
223
Ex = Ex +F2*(Eloc*Fggax)*qwght(n)
224
if(ldew) func(n)=func(n)+F2*(Eloc*Fggax)
225
Amat(n,1) = Amat(n,1) +dElocdR*Fggax + Eloc*dFggaxdR
226
Cmat(n,1)= Cmat(n,1) + Eloc*dFggaxdG
230
c UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUnrestricted
233
c ======> SPIN-UNRESTRICTED <======
236
c use spin density functional theory ie n-->2n
237
c Ex=(1/2)Ex[2*alpha] + (1/2)Ex[2*beta]
242
if (rho(n,1).lt.DTol) goto 20
243
if (rho(n,2).lt.DTol) goto 25
247
Gam =(delrho(n,1,1)*delrho(n,1,1) +
248
& delrho(n,2,1)*delrho(n,2,1) +
249
& delrho(n,3,1)*delrho(n,3,1))
251
if(gam12.lt.dtol) goto 25
258
Ffrac = F1-F1/(F1+PON)
262
fa2 = CxA2 *Ffrac**F2
263
fa3 = CxA3 *Ffrac**F3
264
fa4 = CxA4 *Ffrac**F4
265
fa5 = CxA5 *Ffrac**F5
273
Fggax = fa0+fa1+fa2+fa3+fa4+fa5 +
274
$ fb0+fb1+fb2+fb3+fb4+fb5
278
dElocdR=Ax*F4o3*Rho13
279
dydR = -(F8/F3)*y/Rhoo
281
dFfracdPON = F1/((F1+PON)**F2)
282
dFexpdPON = exp(-PON)
283
dfa1dy = CxA1 *mu*dFfracdPON
284
dfa2dy = CxA2 *mu*F2*Ffrac*dFfracdPON
285
dfa3dy = CxA3 *mu*(F3 *Ffrac**F2)*dFfracdPON
286
dfa4dy = CxA4 *mu*(F4 *Ffrac**F3)*dFfracdPON
287
dfa5dy = CxA5 *mu*(F5 *Ffrac**F4)*dFfracdPON
288
dfa1dR = dfa1dy *dydR
289
dfa2dR = dfa2dy *dydR
290
dfa3dR = dfa3dy *dydR
291
dfa4dR = dfa4dy *dydR
292
dfa5dR = dfa5dy *dydR
293
dfa1dG = dfa1dy *dydG
294
dfa2dG = dfa2dy *dydG
295
dfa3dG = dfa3dy *dydG
296
dfa4dG = dfa4dy *dydG
297
dfa5dG = dfa5dy *dydG
298
dfb1dy = CxB1 *mu*dFexpdPON
299
dfb2dy = CxB2 *mu*F2*Fexp*dFexpdPON
300
dfb3dy = CxB3 *mu*(F3 *Fexp**F2)*dFexpdPON
301
dfb4dy = CxB4 *mu*(F4 *Fexp**F3)*dFexpdPON
302
dfb5dy = CxB5 *mu*(F5 *Fexp**F4)*dFexpdPON
303
dfb1dR = dfb1dy *dydR
304
dfb2dR = dfb2dy *dydR
305
dfb3dR = dfb3dy *dydR
306
dfb4dR = dfb4dy *dydR
307
dfb5dR = dfb5dy *dydR
308
dfb1dG = dfb1dy *dydG
309
dfb2dG = dfb2dy *dydG
310
dfb3dG = dfb3dy *dydG
311
dfb4dG = dfb4dy *dydG
312
dfb5dG = dfb5dy *dydG
314
dFggaxdR = dfa1dR+dfa2dR+dfa3dR+dfa4dR+dfa5dR +
315
$ dfb1dR+dfb2dR+dfb3dR+dfb4dR+dfb5dR
317
dFggaxdG = dfa1dG+dfa2dG+dfa3dG+dfa4dG+dfa5dG +
318
$ dfb1dG+dfb2dG+dfb3dG+dfb4dG+dfb5dG
320
Ex = Ex + (Eloc*Fggax)*qwght(n)
321
if(ldew) func(n)=func(n)+ Eloc*Fggax
322
Amat(n,1) = Amat(n,1) + dElocdR*Fggax + Eloc*dFggaxdR
323
Cmat(n,1)= Cmat(n,1) + Eloc*dFggaxdG
329
if (rho(n,3).lt.DTol) goto 20
334
Gam =(delrho(n,1,2)*delrho(n,1,2) +
335
& delrho(n,2,2)*delrho(n,2,2) +
336
& delrho(n,3,2)*delrho(n,3,2))
338
if(gam12.lt.dtol) goto 20
345
Ffrac = F1-F1/(F1+PON)
349
fa2 = CxA2 *Ffrac**F2
350
fa3 = CxA3 *Ffrac**F3
351
fa4 = CxA4 *Ffrac**F4
352
fa5 = CxA5 *Ffrac**F5
360
Fggax = fa0+fa1+fa2+fa3+fa4+fa5 +
361
$ fb0+fb1+fb2+fb3+fb4+fb5
366
dElocdR=Ax*F4o3*Rho13
367
dydR = -(F8/F3)*y/Rhoo
369
dFfracdPON = F1/((F1+PON)**F2)
370
dFexpdPON = exp(-PON)
371
dfa1dy = CxA1 *mu*dFfracdPON
372
dfa2dy = CxA2 *mu*F2*Ffrac*dFfracdPON
373
dfa3dy = CxA3 *mu*(F3 *Ffrac**F2)*dFfracdPON
374
dfa4dy = CxA4 *mu*(F4 *Ffrac**F3)*dFfracdPON
375
dfa5dy = CxA5 *mu*(F5 *Ffrac**F4)*dFfracdPON
376
dfa1dR = dfa1dy *dydR
377
dfa2dR = dfa2dy *dydR
378
dfa3dR = dfa3dy *dydR
379
dfa4dR = dfa4dy *dydR
380
dfa5dR = dfa5dy *dydR
381
dfa1dG = dfa1dy *dydG
382
dfa2dG = dfa2dy *dydG
383
dfa3dG = dfa3dy *dydG
384
dfa4dG = dfa4dy *dydG
385
dfa5dG = dfa5dy *dydG
386
dfb1dy = CxB1 *mu*dFexpdPON
387
dfb2dy = CxB2 *mu*F2*Fexp*dFexpdPON
388
dfb3dy = CxB3 *mu*(F3 *Fexp**F2)*dFexpdPON
389
dfb4dy = CxB4 *mu*(F4 *Fexp**F3)*dFexpdPON
390
dfb5dy = CxB5 *mu*(F5 *Fexp**F4)*dFexpdPON
391
dfb1dR = dfb1dy *dydR
392
dfb2dR = dfb2dy *dydR
393
dfb3dR = dfb3dy *dydR
394
dfb4dR = dfb4dy *dydR
395
dfb5dR = dfb5dy *dydR
396
dfb1dG = dfb1dy *dydG
397
dfb2dG = dfb2dy *dydG
398
dfb3dG = dfb3dy *dydG
399
dfb4dG = dfb4dy *dydG
400
dfb5dG = dfb5dy *dydG
402
dFggaxdR = dfa1dR+dfa2dR+dfa3dR+dfa4dR+dfa5dR +
403
$ dfb1dR+dfb2dR+dfb3dR+dfb4dR+dfb5dR
405
dFggaxdG = dfa1dG+dfa2dG+dfa3dG+dfa4dG+dfa5dG +
406
$ dfb1dG+dfb2dG+dfb3dG+dfb4dG+dfb5dG
408
Ex = Ex + (Eloc*Fggax)*qwght(n)
409
if(ldew) func(n)=func(n)+ Eloc*Fggax
412
Amat(n,2) = Amat(n,2) +dElocdR*Fggax + Eloc*dFggaxdR
414
Cmat(n,3)= Cmat(n,3) + Eloc*dFggaxdG
422
Subroutine xc_xsogga_d2()
423
call errquit(' not coded ',0,0)