1 /*
2 Copyright (C) 2006-2007 M.A.L. Marques
3
4 This Source Code Form is subject to the terms of the Mozilla Public
5 License, v. 2.0. If a copy of the MPL was not distributed with this
6 file, You can obtain one at http://mozilla.org/MPL/2.0/.
7 */
8
9
10 #include "util.h"
11 #include "funcs_mgga.c"
12 #include "funcs_hyb_mgga.c"
13
14 void
xc_mgga(const xc_func_type * func,size_t np,const double * rho,const double * sigma,const double * lapl,const double * tau,double * zk,MGGA_OUT_PARAMS_NO_EXC (double *))15 xc_mgga(const xc_func_type *func, size_t np,
16 const double *rho, const double *sigma, const double *lapl, const double *tau,
17 double *zk, MGGA_OUT_PARAMS_NO_EXC(double *))
18 {
19 assert(func != NULL);
20 const xc_dimensions *dim = &(func->dim);
21
22 /* sanity check */
23 if(zk != NULL && !(func->info->flags & XC_FLAGS_HAVE_EXC)){
24 fprintf(stderr, "Functional '%s' does not provide an implementation of Exc\n",
25 func->info->name);
26 exit(1);
27 }
28
29 if(vrho != NULL && !(func->info->flags & XC_FLAGS_HAVE_VXC)){
30 fprintf(stderr, "Functional '%s' does not provide an implementation of vxc\n",
31 func->info->name);
32 exit(1);
33 }
34
35 if(v2rho2 != NULL && !(func->info->flags & XC_FLAGS_HAVE_FXC)){
36 fprintf(stderr, "Functional '%s' does not provide an implementation of fxc\n",
37 func->info->name);
38 exit(1);
39 }
40
41 if(v3rho3 != NULL && !(func->info->flags & XC_FLAGS_HAVE_KXC)){
42 fprintf(stderr, "Functional '%s' does not provide an implementation of kxc\n",
43 func->info->name);
44 exit(1);
45 }
46
47
48 /* initialize output to zero */
49 if(zk != NULL)
50 libxc_memset(zk, 0, dim->zk*np*sizeof(double));
51
52 if(vrho != NULL){
53 assert(vsigma != NULL);
54 if(func->info->flags & XC_FLAGS_NEEDS_LAPLACIAN)
55 assert(vlapl != NULL);
56 assert(vtau != NULL);
57
58 libxc_memset(vrho, 0, dim->vrho *np*sizeof(double));
59 libxc_memset(vsigma, 0, dim->vsigma*np*sizeof(double));
60 if(func->info->flags & XC_FLAGS_NEEDS_LAPLACIAN)
61 libxc_memset(vlapl, 0, dim->vlapl *np*sizeof(double));
62 libxc_memset(vtau, 0, dim->vtau *np*sizeof(double));
63 }
64
65 if(v2rho2 != NULL){
66 assert(v2rhosigma != NULL);
67 assert(v2rhotau != NULL);
68 assert(v2sigma2 != NULL);
69 assert(v2sigmatau != NULL);
70 assert(v2tau2 != NULL);
71
72 if(func->info->flags & XC_FLAGS_NEEDS_LAPLACIAN){
73 assert(v2rholapl != NULL);
74 assert(v2sigmalapl != NULL);
75 assert(v2lapl2 != NULL);
76 assert(v2lapltau != NULL);
77 }
78
79 libxc_memset(v2rho2, 0, dim->v2rho2 *np*sizeof(double));
80 libxc_memset(v2rhosigma, 0, dim->v2rhosigma *np*sizeof(double));
81 libxc_memset(v2rhotau, 0, dim->v2rhotau *np*sizeof(double));
82 libxc_memset(v2sigma2, 0, dim->v2sigma2 *np*sizeof(double));
83 libxc_memset(v2sigmatau, 0, dim->v2sigmatau *np*sizeof(double));
84 libxc_memset(v2tau2, 0, dim->v2tau2 *np*sizeof(double));
85
86 if(func->info->flags & XC_FLAGS_NEEDS_LAPLACIAN){
87 libxc_memset(v2rholapl, 0, dim->v2rholapl *np*sizeof(double));
88 libxc_memset(v2sigmalapl, 0, dim->v2sigmalapl*np*sizeof(double));
89 libxc_memset(v2lapl2, 0, dim->v2lapl2 *np*sizeof(double));
90 libxc_memset(v2lapltau, 0, dim->v2lapltau *np*sizeof(double));
91 }
92 }
93
94 if(v3rho3 != NULL){
95 assert(v3rho2sigma != NULL);
96 assert(v3rho2tau != NULL);
97 assert(v3rhosigma2 != NULL);
98 assert(v3rhosigmatau != NULL);
99 assert(v3rhotau2 != NULL);
100 assert(v3sigma3 != NULL);
101 assert(v3sigma2tau != NULL);
102 assert(v3sigmatau2 != NULL);
103 assert(v3tau3 != NULL);
104
105 if(func->info->flags & XC_FLAGS_NEEDS_LAPLACIAN){
106 assert(v3rho2lapl != NULL);
107 assert(v3rhosigmalapl != NULL);
108 assert(v3rholapl2 != NULL);
109 assert(v3rholapltau != NULL);
110 assert(v3sigma2lapl != NULL);
111 assert(v3sigmalapl2 != NULL);
112 assert(v3sigmalapltau != NULL);
113 assert(v3lapl3 != NULL);
114 assert(v3lapl2tau != NULL);
115 }
116
117 libxc_memset(v3rho3, 0, dim->v3rho3 *np*sizeof(double));
118 libxc_memset(v3rho2sigma, 0, dim->v3rho2sigma *np*sizeof(double));
119 libxc_memset(v3rho2tau, 0, dim->v3rho2tau *np*sizeof(double));
120 libxc_memset(v3rhosigma2, 0, dim->v3rhosigma2 *np*sizeof(double));
121 libxc_memset(v3rhosigmatau, 0, dim->v3rhosigmatau*np*sizeof(double));
122 libxc_memset(v3rhotau2, 0, dim->v3rhotau2 *np*sizeof(double));
123 libxc_memset(v3sigma3, 0, dim->v3sigma3 *np*sizeof(double));
124 libxc_memset(v3sigma2tau, 0, dim->v3sigma2tau *np*sizeof(double));
125 libxc_memset(v3sigmatau2, 0, dim->v3sigmatau2 *np*sizeof(double));
126 libxc_memset(v3tau3, 0, dim->v3tau3 *np*sizeof(double));
127
128 if(func->info->flags & XC_FLAGS_NEEDS_LAPLACIAN){
129 libxc_memset(v3rho2lapl, 0, dim->v3rho2lapl *np*sizeof(double));
130 libxc_memset(v3rhosigmalapl, 0, dim->v3rhosigmalapl*np*sizeof(double));
131 libxc_memset(v3rholapl2, 0, dim->v3rholapl2 *np*sizeof(double));
132 libxc_memset(v3rholapltau, 0, dim->v3rholapltau *np*sizeof(double));
133 libxc_memset(v3sigma2lapl, 0, dim->v3sigma2lapl *np*sizeof(double));
134 libxc_memset(v3sigmalapl2, 0, dim->v3sigmalapl2 *np*sizeof(double));
135 libxc_memset(v3sigmalapltau, 0, dim->v3sigmalapltau*np*sizeof(double));
136 libxc_memset(v3lapl3, 0, dim->v3lapl3 *np*sizeof(double));
137 libxc_memset(v3lapl2tau, 0, dim->v3lapl2tau *np*sizeof(double));
138 }
139 }
140
141 if(v4rho4 != NULL){
142 assert(v4rho4 != NULL);
143 assert(v4rho3sigma != NULL);
144 assert(v4rho3tau != NULL);
145 assert(v4rho2sigma2 != NULL);
146 assert(v4rho2sigmatau != NULL);
147 assert(v4rho2tau2 != NULL);
148 assert(v4rhosigma3 != NULL);
149 assert(v4rhosigma2tau != NULL);
150 assert(v4rhosigmatau2 != NULL);
151 assert(v4rhotau3 != NULL);
152 assert(v4sigma4 != NULL);
153 assert(v4sigma3tau != NULL);
154 assert(v4sigma2tau2 != NULL);
155 assert(v4sigmatau3 != NULL);
156 assert(v4tau4 != NULL);
157
158 if(func->info->flags & XC_FLAGS_NEEDS_LAPLACIAN){
159 assert(v4rho3lapl != NULL);
160 assert(v4rho2sigmalapl != NULL);
161 assert(v4rho2lapl2 != NULL);
162 assert(v4rho2lapltau != NULL);
163 assert(v4rhosigma2lapl != NULL);
164 assert(v4rhosigmalapl2 != NULL);
165 assert(v4rhosigmalapltau != NULL);
166 assert(v4rholapl3 != NULL);
167 assert(v4rholapl2tau != NULL);
168 assert(v4rholapltau2 != NULL);
169 assert(v4sigma3lapl != NULL);
170 assert(v4sigma2lapl2 != NULL);
171 assert(v4sigma2lapltau != NULL);
172 assert(v4sigmalapl3 != NULL);
173 assert(v4sigmalapl2tau != NULL);
174 assert(v4sigmalapltau2 != NULL);
175 assert(v4lapl4 != NULL);
176 assert(v4lapl3tau != NULL);
177 assert(v4lapl2tau2 != NULL);
178 assert(v4lapltau3 != NULL);
179 }
180
181 libxc_memset(v4rho4, 0, dim->v4rho4 *np*sizeof(double));
182 libxc_memset(v4rho3sigma, 0, dim->v4rho3sigma *np*sizeof(double));
183 libxc_memset(v4rho3tau, 0, dim->v4rho3tau *np*sizeof(double));
184 libxc_memset(v4rho2sigma2, 0, dim->v4rho2sigma2 *np*sizeof(double));
185 libxc_memset(v4rho2sigmatau, 0, dim->v4rho2sigmatau*np*sizeof(double));
186 libxc_memset(v4rho2tau2, 0, dim->v4rho2tau2 *np*sizeof(double));
187 libxc_memset(v4rhosigma3, 0, dim->v4rhosigma3 *np*sizeof(double));
188 libxc_memset(v4rhosigma2tau, 0, dim->v4rhosigma2tau*np*sizeof(double));
189 libxc_memset(v4rhosigmatau2, 0, dim->v4rhosigmatau2*np*sizeof(double));
190 libxc_memset(v4rhotau3, 0, dim->v4rhotau3 *np*sizeof(double));
191 libxc_memset(v4sigma4, 0, dim->v4sigma4 *np*sizeof(double));
192 libxc_memset(v4sigma3tau, 0, dim->v4sigma3tau *np*sizeof(double));
193 libxc_memset(v4sigma2tau2, 0, dim->v4sigma2tau2 *np*sizeof(double));
194 libxc_memset(v4sigmatau3, 0, dim->v4sigmatau3 *np*sizeof(double));
195 libxc_memset(v4tau4, 0, dim->v4tau4 *np*sizeof(double));
196
197 if(func->info->flags & XC_FLAGS_NEEDS_LAPLACIAN){
198 libxc_memset(v4rho3lapl, 0, dim->v4rho3lapl *np*sizeof(double));
199 libxc_memset(v4rho2sigmalapl, 0, dim->v4rho2sigmalapl *np*sizeof(double));
200 libxc_memset(v4rho2lapl2, 0, dim->v4rho2lapl2 *np*sizeof(double));
201 libxc_memset(v4rho2lapltau, 0, dim->v4rho2lapltau *np*sizeof(double));
202 libxc_memset(v4rhosigma2lapl, 0, dim->v4rhosigma2lapl *np*sizeof(double));
203 libxc_memset(v4rhosigmalapl2, 0, dim->v4rhosigmalapl2 *np*sizeof(double));
204 libxc_memset(v4rhosigmalapltau, 0, dim->v4rhosigmalapltau*np*sizeof(double));
205 libxc_memset(v4rholapl3, 0, dim->v4rholapl3 *np*sizeof(double));
206 libxc_memset(v4rholapl2tau, 0, dim->v4rholapl2tau *np*sizeof(double));
207 libxc_memset(v4rholapltau2, 0, dim->v4rholapltau2 *np*sizeof(double));
208 libxc_memset(v4sigma3lapl, 0, dim->v4sigma3lapl *np*sizeof(double));
209 libxc_memset(v4sigma2lapl2, 0, dim->v4sigma2lapl2 *np*sizeof(double));
210 libxc_memset(v4sigma2lapltau, 0, dim->v4sigma2lapltau *np*sizeof(double));
211 libxc_memset(v4sigmalapl3, 0, dim->v4sigmalapl3 *np*sizeof(double));
212 libxc_memset(v4sigmalapl2tau, 0, dim->v4sigmalapl2tau *np*sizeof(double));
213 libxc_memset(v4sigmalapltau2, 0, dim->v4sigmalapltau2 *np*sizeof(double));
214 libxc_memset(v4lapl4, 0, dim->v4lapl4 *np*sizeof(double));
215 libxc_memset(v4lapl3tau, 0, dim->v4lapl3tau *np*sizeof(double));
216 libxc_memset(v4lapl2tau2, 0, dim->v4lapl2tau2 *np*sizeof(double));
217 libxc_memset(v4lapltau3, 0, dim->v4lapltau3 *np*sizeof(double));
218 }
219 }
220
221 /* call functional */
222 if(func->info->mgga != NULL)
223 func->info->mgga(func, np, rho, sigma, lapl, tau, zk, MGGA_OUT_PARAMS_NO_EXC(XC_NOARG));
224
225 if(func->mix_coef != NULL)
226 xc_mix_func(func, np, rho, sigma, lapl, tau,
227 zk, MGGA_OUT_PARAMS_NO_EXC(XC_NOARG));
228 }
229
230 /* specializations */
231 void
xc_mgga_exc(const xc_func_type * p,size_t np,const double * rho,const double * sigma,const double * lapl,const double * tau,double * zk)232 xc_mgga_exc(const xc_func_type *p, size_t np,
233 const double *rho, const double *sigma, const double *lapl, const double *tau,
234 double *zk)
235 {
236 xc_mgga(p, np, rho, sigma, lapl, tau, zk, NULL, NULL, NULL, NULL,
237 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
238 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
239 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
240 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
241 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
242 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
243 NULL, NULL, NULL, NULL, NULL
244 );
245 }
246
247 void
xc_mgga_exc_vxc(const xc_func_type * p,size_t np,const double * rho,const double * sigma,const double * lapl,const double * tau,double * zk,double * vrho,double * vsigma,double * vlapl,double * vtau)248 xc_mgga_exc_vxc(const xc_func_type *p, size_t np,
249 const double *rho, const double *sigma, const double *lapl, const double *tau,
250 double *zk, double *vrho, double *vsigma, double *vlapl, double *vtau)
251 {
252 xc_mgga(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau,
253 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
254 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
255 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
256 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
257 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
258 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
259 NULL, NULL, NULL, NULL, NULL
260 );
261 }
262
xc_mgga_exc_vxc_fxc(const xc_func_type * p,size_t np,const double * rho,const double * sigma,const double * lapl,const double * tau,double * zk,double * vrho,double * vsigma,double * vlapl,double * vtau,double * v2rho2,double * v2rhosigma,double * v2rholapl,double * v2rhotau,double * v2sigma2,double * v2sigmalapl,double * v2sigmatau,double * v2lapl2,double * v2lapltau,double * v2tau2)263 void xc_mgga_exc_vxc_fxc(const xc_func_type *p, size_t np,
264 const double *rho, const double *sigma, const double *lapl, const double *tau,
265 double *zk, double *vrho, double *vsigma, double *vlapl, double *vtau,
266 double *v2rho2, double *v2rhosigma, double *v2rholapl, double *v2rhotau,
267 double *v2sigma2, double *v2sigmalapl, double *v2sigmatau, double *v2lapl2,
268 double *v2lapltau, double *v2tau2) {
269 xc_mgga(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau,
270 v2rho2, v2rhosigma, v2rholapl, v2rhotau, v2sigma2,
271 v2sigmalapl, v2sigmatau, v2lapl2, v2lapltau, v2tau2,
272 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
273 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
274 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
275 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
276 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
277 NULL, NULL, NULL, NULL, NULL
278 );
279 }
280
xc_mgga_vxc_fxc(const xc_func_type * p,size_t np,const double * rho,const double * sigma,const double * lapl,const double * tau,double * vrho,double * vsigma,double * vlapl,double * vtau,double * v2rho2,double * v2rhosigma,double * v2rholapl,double * v2rhotau,double * v2sigma2,double * v2sigmalapl,double * v2sigmatau,double * v2lapl2,double * v2lapltau,double * v2tau2)281 void xc_mgga_vxc_fxc(const xc_func_type *p, size_t np,
282 const double *rho, const double *sigma, const double *lapl, const double *tau,
283 double *vrho, double *vsigma, double *vlapl, double *vtau,
284 double *v2rho2, double *v2rhosigma, double *v2rholapl, double *v2rhotau,
285 double *v2sigma2, double *v2sigmalapl, double *v2sigmatau, double *v2lapl2,
286 double *v2lapltau, double *v2tau2) {
287 xc_mgga(p, np, rho, sigma, lapl, tau, NULL, vrho, vsigma, vlapl, vtau,
288 v2rho2, v2rhosigma, v2rholapl, v2rhotau, v2sigma2,
289 v2sigmalapl, v2sigmatau, v2lapl2, v2lapltau, v2tau2,
290 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
291 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
292 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
293 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
294 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
295 NULL, NULL, NULL, NULL, NULL
296 );
297 }
298
xc_mgga_exc_vxc_fxc_kxc(const xc_func_type * p,size_t np,const double * rho,const double * sigma,const double * lapl,const double * tau,double * zk,double * vrho,double * vsigma,double * vlapl,double * vtau,double * v2rho2,double * v2rhosigma,double * v2rholapl,double * v2rhotau,double * v2sigma2,double * v2sigmalapl,double * v2sigmatau,double * v2lapl2,double * v2lapltau,double * v2tau2,double * v3rho3,double * v3rho2sigma,double * v3rho2lapl,double * v3rho2tau,double * v3rhosigma2,double * v3rhosigmalapl,double * v3rhosigmatau,double * v3rholapl2,double * v3rholapltau,double * v3rhotau2,double * v3sigma3,double * v3sigma2lapl,double * v3sigma2tau,double * v3sigmalapl2,double * v3sigmalapltau,double * v3sigmatau2,double * v3lapl3,double * v3lapl2tau,double * v3lapltau2,double * v3tau3)299 void xc_mgga_exc_vxc_fxc_kxc(const xc_func_type *p, size_t np,
300 const double *rho, const double *sigma, const double *lapl, const double *tau,
301 double *zk, double *vrho, double *vsigma, double *vlapl, double *vtau,
302 double *v2rho2, double *v2rhosigma, double *v2rholapl, double *v2rhotau,
303 double *v2sigma2, double *v2sigmalapl, double *v2sigmatau, double *v2lapl2,
304 double *v2lapltau, double *v2tau2,
305 double *v3rho3, double *v3rho2sigma, double *v3rho2lapl, double *v3rho2tau,
306 double *v3rhosigma2, double *v3rhosigmalapl, double *v3rhosigmatau,
307 double *v3rholapl2, double *v3rholapltau, double *v3rhotau2, double *v3sigma3,
308 double *v3sigma2lapl, double *v3sigma2tau, double *v3sigmalapl2, double *v3sigmalapltau,
309 double *v3sigmatau2, double *v3lapl3, double *v3lapl2tau, double *v3lapltau2,
310 double *v3tau3) {
311 xc_mgga(p, np, rho, sigma, lapl, tau, zk, vrho, vsigma, vlapl, vtau,
312 v2rho2, v2rhosigma, v2rholapl, v2rhotau, v2sigma2,
313 v2sigmalapl, v2sigmatau, v2lapl2, v2lapltau, v2tau2,
314 v3rho3, v3rho2sigma, v3rho2lapl, v3rho2tau, v3rhosigma2, v3rhosigmalapl,
315 v3rhosigmatau, v3rholapl2, v3rholapltau, v3rhotau2, v3sigma3, v3sigma2lapl,
316 v3sigma2tau, v3sigmalapl2, v3sigmalapltau, v3sigmatau2, v3lapl3, v3lapl2tau,
317 v3lapltau2, v3tau3,
318 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
319 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
320 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
321 NULL, NULL, NULL, NULL, NULL
322 );
323 }
324
xc_mgga_vxc_fxc_kxc(const xc_func_type * p,size_t np,const double * rho,const double * sigma,const double * lapl,const double * tau,double * vrho,double * vsigma,double * vlapl,double * vtau,double * v2rho2,double * v2rhosigma,double * v2rholapl,double * v2rhotau,double * v2sigma2,double * v2sigmalapl,double * v2sigmatau,double * v2lapl2,double * v2lapltau,double * v2tau2,double * v3rho3,double * v3rho2sigma,double * v3rho2lapl,double * v3rho2tau,double * v3rhosigma2,double * v3rhosigmalapl,double * v3rhosigmatau,double * v3rholapl2,double * v3rholapltau,double * v3rhotau2,double * v3sigma3,double * v3sigma2lapl,double * v3sigma2tau,double * v3sigmalapl2,double * v3sigmalapltau,double * v3sigmatau2,double * v3lapl3,double * v3lapl2tau,double * v3lapltau2,double * v3tau3)325 void xc_mgga_vxc_fxc_kxc(const xc_func_type *p, size_t np,
326 const double *rho, const double *sigma, const double *lapl, const double *tau,
327 double *vrho, double *vsigma, double *vlapl, double *vtau,
328 double *v2rho2, double *v2rhosigma, double *v2rholapl, double *v2rhotau,
329 double *v2sigma2, double *v2sigmalapl, double *v2sigmatau, double *v2lapl2,
330 double *v2lapltau, double *v2tau2,
331 double *v3rho3, double *v3rho2sigma, double *v3rho2lapl, double *v3rho2tau,
332 double *v3rhosigma2, double *v3rhosigmalapl, double *v3rhosigmatau,
333 double *v3rholapl2, double *v3rholapltau, double *v3rhotau2, double *v3sigma3,
334 double *v3sigma2lapl, double *v3sigma2tau, double *v3sigmalapl2, double *v3sigmalapltau,
335 double *v3sigmatau2, double *v3lapl3, double *v3lapl2tau, double *v3lapltau2,
336 double *v3tau3) {
337 xc_mgga(p, np, rho, sigma, lapl, tau, NULL, vrho, vsigma, vlapl, vtau,
338 v2rho2, v2rhosigma, v2rholapl, v2rhotau, v2sigma2,
339 v2sigmalapl, v2sigmatau, v2lapl2, v2lapltau, v2tau2,
340 v3rho3, v3rho2sigma, v3rho2lapl, v3rho2tau, v3rhosigma2, v3rhosigmalapl,
341 v3rhosigmatau, v3rholapl2, v3rholapltau, v3rhotau2, v3sigma3, v3sigma2lapl,
342 v3sigma2tau, v3sigmalapl2, v3sigmalapltau, v3sigmatau2, v3lapl3, v3lapl2tau,
343 v3lapltau2, v3tau3,
344 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
345 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
346 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
347 NULL, NULL, NULL, NULL, NULL
348 );
349 }
350
351
352 void
xc_mgga_vxc(const xc_func_type * p,size_t np,const double * rho,const double * sigma,const double * lapl,const double * tau,double * vrho,double * vsigma,double * vlapl,double * vtau)353 xc_mgga_vxc(const xc_func_type *p, size_t np,
354 const double *rho, const double *sigma, const double *lapl, const double *tau,
355 double *vrho, double *vsigma, double *vlapl, double *vtau)
356 {
357 xc_mgga(p, np, rho, sigma, lapl, tau, NULL, vrho, vsigma, vlapl, vtau,
358 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
359 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
360 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
361 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
362 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
363 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
364 NULL, NULL, NULL, NULL, NULL
365 );
366 }
367
368 void
xc_mgga_fxc(const xc_func_type * p,size_t np,const double * rho,const double * sigma,const double * lapl,const double * tau,double * v2rho2,double * v2rhosigma,double * v2rholapl,double * v2rhotau,double * v2sigma2,double * v2sigmalapl,double * v2sigmatau,double * v2lapl2,double * v2lapltau,double * v2tau2)369 xc_mgga_fxc(const xc_func_type *p, size_t np,
370 const double *rho, const double *sigma, const double *lapl, const double *tau,
371 double *v2rho2, double *v2rhosigma, double *v2rholapl, double *v2rhotau,
372 double *v2sigma2, double *v2sigmalapl, double *v2sigmatau, double *v2lapl2,
373 double *v2lapltau, double *v2tau2)
374 {
375 xc_mgga(p, np, rho, sigma, lapl, tau, NULL, NULL, NULL, NULL, NULL,
376 v2rho2, v2rhosigma, v2rholapl, v2rhotau, v2sigma2,
377 v2sigmalapl, v2sigmatau, v2lapl2, v2lapltau, v2tau2,
378 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
379 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
380 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
381 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
382 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
383 NULL, NULL, NULL, NULL, NULL
384 );
385 }
386
xc_mgga_kxc(const xc_func_type * p,size_t np,const double * rho,const double * sigma,const double * lapl,const double * tau,double * v3rho3,double * v3rho2sigma,double * v3rho2lapl,double * v3rho2tau,double * v3rhosigma2,double * v3rhosigmalapl,double * v3rhosigmatau,double * v3rholapl2,double * v3rholapltau,double * v3rhotau2,double * v3sigma3,double * v3sigma2lapl,double * v3sigma2tau,double * v3sigmalapl2,double * v3sigmalapltau,double * v3sigmatau2,double * v3lapl3,double * v3lapl2tau,double * v3lapltau2,double * v3tau3)387 void xc_mgga_kxc(const xc_func_type *p, size_t np,
388 const double *rho, const double *sigma, const double *lapl, const double *tau,
389 double *v3rho3, double *v3rho2sigma, double *v3rho2lapl, double *v3rho2tau,
390 double *v3rhosigma2, double *v3rhosigmalapl, double *v3rhosigmatau,
391 double *v3rholapl2, double *v3rholapltau, double *v3rhotau2,
392 double *v3sigma3, double *v3sigma2lapl, double *v3sigma2tau,
393 double *v3sigmalapl2, double *v3sigmalapltau, double *v3sigmatau2,
394 double *v3lapl3, double *v3lapl2tau, double *v3lapltau2, double *v3tau3)
395 {
396 xc_mgga(p, np, rho, sigma, lapl, tau, NULL, NULL, NULL, NULL, NULL,
397 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
398 v3rho3, v3rho2sigma, v3rho2lapl, v3rho2tau, v3rhosigma2, v3rhosigmalapl,
399 v3rhosigmatau, v3rholapl2, v3rholapltau, v3rhotau2, v3sigma3, v3sigma2lapl,
400 v3sigma2tau, v3sigmalapl2, v3sigmalapltau, v3sigmatau2, v3lapl3, v3lapl2tau,
401 v3lapltau2, v3tau3,
402 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
403 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
404 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
405 NULL, NULL, NULL, NULL, NULL
406 );
407 }
408
xc_mgga_lxc(const xc_func_type * p,size_t np,const double * rho,const double * sigma,const double * lapl,const double * tau,double * v4rho4,double * v4rho3sigma,double * v4rho3lapl,double * v4rho3tau,double * v4rho2sigma2,double * v4rho2sigmalapl,double * v4rho2sigmatau,double * v4rho2lapl2,double * v4rho2lapltau,double * v4rho2tau2,double * v4rhosigma3,double * v4rhosigma2lapl,double * v4rhosigma2tau,double * v4rhosigmalapl2,double * v4rhosigmalapltau,double * v4rhosigmatau2,double * v4rholapl3,double * v4rholapl2tau,double * v4rholapltau2,double * v4rhotau3,double * v4sigma4,double * v4sigma3lapl,double * v4sigma3tau,double * v4sigma2lapl2,double * v4sigma2lapltau,double * v4sigma2tau2,double * v4sigmalapl3,double * v4sigmalapl2tau,double * v4sigmalapltau2,double * v4sigmatau3,double * v4lapl4,double * v4lapl3tau,double * v4lapl2tau2,double * v4lapltau3,double * v4tau4)409 void xc_mgga_lxc(const xc_func_type *p, size_t np,
410 const double *rho, const double *sigma, const double *lapl, const double *tau,
411 double *v4rho4, double *v4rho3sigma, double *v4rho3lapl, double *v4rho3tau, double *v4rho2sigma2,
412 double *v4rho2sigmalapl, double *v4rho2sigmatau, double *v4rho2lapl2, double *v4rho2lapltau,
413 double *v4rho2tau2, double *v4rhosigma3, double *v4rhosigma2lapl, double *v4rhosigma2tau,
414 double *v4rhosigmalapl2, double *v4rhosigmalapltau, double *v4rhosigmatau2,
415 double *v4rholapl3, double *v4rholapl2tau, double *v4rholapltau2, double *v4rhotau3,
416 double *v4sigma4, double *v4sigma3lapl, double *v4sigma3tau, double *v4sigma2lapl2,
417 double *v4sigma2lapltau, double *v4sigma2tau2, double *v4sigmalapl3, double *v4sigmalapl2tau,
418 double *v4sigmalapltau2, double *v4sigmatau3, double *v4lapl4, double *v4lapl3tau,
419 double *v4lapl2tau2, double *v4lapltau3, double *v4tau4)
420 {
421 xc_mgga(p, np, rho, sigma, lapl, tau, NULL, NULL, NULL, NULL, NULL,
422 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
423 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
424 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
425 v4rho4, v4rho3sigma, v4rho3lapl, v4rho3tau, v4rho2sigma2,
426 v4rho2sigmalapl, v4rho2sigmatau, v4rho2lapl2, v4rho2lapltau,
427 v4rho2tau2, v4rhosigma3, v4rhosigma2lapl, v4rhosigma2tau,
428 v4rhosigmalapl2, v4rhosigmalapltau, v4rhosigmatau2,
429 v4rholapl3, v4rholapl2tau, v4rholapltau2, v4rhotau3,
430 v4sigma4, v4sigma3lapl, v4sigma3tau, v4sigma2lapl2,
431 v4sigma2lapltau, v4sigma2tau2, v4sigmalapl3, v4sigmalapl2tau,
432 v4sigmalapltau2, v4sigmatau3, v4lapl4, v4lapl3tau,
433 v4lapl2tau2, v4lapltau3, v4tau4
434 );
435 }
436