Skip to content

Commit a884bfb

Browse files
committed
Merged in xcGPU (pull request #689)
XcGPU Approved-by: Sambit Das Approved-by: Phani Motamarri
2 parents 236364e + f45a0b7 commit a884bfb

49 files changed

Lines changed: 5887 additions & 356 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎include/DeviceKernelLauncherHelpers.h‎

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -164,7 +164,7 @@ namespace dftfe
164164
# endif
165165

166166

167-
# define DFTFE_KERNEL_NAME(...) __VA_ARGS__
167+
# define DFTFE_KERNEL_ARGUMENT(...) __VA_ARGS__
168168

169169

170170
# if defined(DFTFE_WITH_DEVICE_LANG_CUDA) || \

‎include/XCfunctionalDefs/gga_c_pbe.h‎

Lines changed: 373 additions & 0 deletions
Large diffs are not rendered by default.
Lines changed: 85 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
// ---------------------------------------------------------------------
2+
//
3+
// Copyright (c) 2017-2025 The Regents of the University of Michigan and DFT-FE
4+
// authors.
5+
//
6+
// This file is part of the DFT-FE code.
7+
//
8+
// The DFT-FE code is free software; you can use it, redistribute
9+
// it, and/or modify it under the terms of the GNU Lesser General
10+
// Public License as published by the Free Software Foundation; either
11+
// version 2.1 of the License, or (at your option) any later version.
12+
// The full text of the license can be found in the file LICENSE at
13+
// the top level of the DFT-FE distribution.
14+
//
15+
// ---------------------------------------------------------------------
16+
//
17+
// @author Srinibas Nandi
18+
19+
// The below code snippet has been adapted from Libxc 7.0.0
20+
21+
#ifndef GGA_X_LB
22+
#define GGA_X_LB \
23+
double t1, t4, t5, t6, t9, t10, t11, t13; \
24+
double t14, t15, t16, t17, t18, t20, t21, t23; \
25+
double t24, t25, t28, t29, t33, t34, t37, t38; \
26+
double t39, t40, t42, t43, t44, t45, t46; \
27+
double t47, t49, t50, t52, t53, t54, t57, t58; \
28+
double t62, t63, t66, t67; \
29+
\
30+
\
31+
struct gga_x_lb \
32+
{ \
33+
double alpha = 1.0; \
34+
double beta = 0.05; \
35+
double gamma = 1.0; \
36+
} params; \
37+
\
38+
t1 = M_CBRT3; \
39+
t4 = POW_1_3(0.1e1 / M_PI); \
40+
t5 = M_CBRT4; \
41+
t6 = t5 * t5; \
42+
t9 = params.alpha * t1 * t4 * t6 / 0.2e1; \
43+
t10 = sqrt(sigma0); \
44+
t11 = POW_1_3(rho0); \
45+
t13 = 0.1e1 / t11 / rho0; \
46+
t14 = t10 * t13; \
47+
t15 = t14 < 0.3e3; \
48+
t16 = params.beta * sigma0; \
49+
t17 = rho0 * rho0; \
50+
t18 = t11 * t11; \
51+
t20 = 0.1e1 / t18 / t17; \
52+
t21 = params.beta * t10; \
53+
t23 = params.gamma * t10 * t13; \
54+
t24 = log(t23 + sqrt(t23 * t23 + 0.1e1)); \
55+
t25 = t13 * t24; \
56+
t28 = 0.3e1 * t21 * t25 + 0.1e1; \
57+
t29 = 0.1e1 / t28; \
58+
t33 = log(0.2e1 * t23); \
59+
t34 = 0.1e1 / t33; \
60+
t37 = my_piecewise3(t15, t16 * t20 * t29, t14 * t34 / 0.3e1); \
61+
t38 = -t9 - t37; \
62+
tvrho0 = t38 * t11; \
63+
\
64+
t39 = sqrt(sigma2); \
65+
t40 = POW_1_3(rho1); \
66+
t42 = 0.1e1 / t40 / rho1; \
67+
t43 = t39 * t42; \
68+
t44 = t43 < 0.3e3; \
69+
t45 = params.beta * sigma2; \
70+
t46 = rho1 * rho1; \
71+
t47 = t40 * t40; \
72+
t49 = 0.1e1 / t47 / t46; \
73+
t50 = params.beta * t39; \
74+
t52 = params.gamma * t39 * t42; \
75+
t53 = log(t52 + sqrt(t52 * t52 + 0.1e1)); \
76+
t54 = t42 * t53; \
77+
t57 = 0.3e1 * t50 * t54 + 0.1e1; \
78+
t58 = 0.1e1 / t57; \
79+
t62 = log(0.2e1 * t52); \
80+
t63 = 0.1e1 / t62; \
81+
t66 = my_piecewise3(t44, t45 * t49 * t58, t43 * t63 / 0.3e1); \
82+
t67 = -t9 - t66; \
83+
tvrho1 = t67 * t40;
84+
85+
#endif
Lines changed: 163 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,163 @@
1+
// ---------------------------------------------------------------------
2+
//
3+
// Copyright (c) 2017-2025 The Regents of the University of Michigan and DFT-FE
4+
// authors.
5+
//
6+
// This file is part of the DFT-FE code.
7+
//
8+
// The DFT-FE code is free software; you can use it, redistribute
9+
// it, and/or modify it under the terms of the GNU Lesser General
10+
// Public License as published by the Free Software Foundation; either
11+
// version 2.1 of the License, or (at your option) any later version.
12+
// The full text of the license can be found in the file LICENSE at
13+
// the top level of the DFT-FE distribution.
14+
//
15+
// ---------------------------------------------------------------------
16+
//
17+
// @author Srinibas Nandi
18+
19+
// The below code snippet has been adapted from Libxc 7.0.0
20+
21+
#ifndef GGA_X_PBE
22+
#define GGA_X_PBE \
23+
double t1, t2, t3, t5, t6, t7, t10, t11; \
24+
double t14, t15, t16, t18, t19, t20, t21, t22; \
25+
double t23, t25, t26, t27, t28, t29, t30, t31; \
26+
double t32, t33, t34, t35, t36, t37, t39, t43; \
27+
double t48, t52, t53, t54, t56, t57, t58, t59; \
28+
double t61, t62, t63, t64, t65, t66, t68, t72; \
29+
double t77, t81; \
30+
\
31+
double t82, t83, t84, t86, t89, t90, t94, t95; \
32+
double t96, t99, t100, t101, t102, t103, t105, t106; \
33+
double t107, t109, t111, t115, t116, t118, t121, t122; \
34+
double t126, t129, t131, t135, t138, t139, t144; \
35+
double t146, t149, t150, t154, t155, t156, t158, t159; \
36+
double t160, t162, t164, t168, t171, t173, t176; \
37+
double t178, t181; \
38+
\
39+
struct gga_x_pbe \
40+
{ \
41+
double kappa = 0.8040; \
42+
double mu = 0.2195149727645171; \
43+
} params; \
44+
\
45+
\
46+
t1 = rho0 <= DENS_THRESHOLD_X_PBE; \
47+
t2 = M_CBRT3; \
48+
t3 = M_CBRTPI; \
49+
t5 = t2 / t3; \
50+
t6 = rho0 + rho1; \
51+
t7 = 0.1e1 / t6; \
52+
t10 = 0.2e1 * rho0 * t7 <= ZETA_THRESHOLD_X_PBE; \
53+
t11 = ZETA_THRESHOLD_X_PBE - 0.1e1; \
54+
t14 = 0.2e1 * rho1 * t7 <= ZETA_THRESHOLD_X_PBE; \
55+
t15 = -t11; \
56+
t16 = rho0 - rho1; \
57+
t18 = my_piecewise5(t10, t11, t14, t15, t16 * t7); \
58+
t19 = 0.1e1 + t18; \
59+
t20 = t19 <= ZETA_THRESHOLD_X_PBE; \
60+
t21 = std::pow(ZETA_THRESHOLD_X_PBE, 1.0 / 3.0); \
61+
t22 = t21 * ZETA_THRESHOLD_X_PBE; \
62+
t23 = std::pow(t19, 1.0 / 3.0); \
63+
t25 = my_piecewise3(t20, t22, t23 * t19); \
64+
t26 = std::pow(t6, 1.0 / 3.0); \
65+
t27 = t25 * t26; \
66+
t28 = M_CBRT6; \
67+
t29 = params.mu * t28; \
68+
t30 = M_PI * M_PI; \
69+
t31 = std::pow(t30, 1.0 / 3.0); \
70+
t32 = t31 * t31; \
71+
t33 = 0.1e1 / t32; \
72+
t34 = t33 * sigma0; \
73+
t35 = rho0 * rho0; \
74+
t36 = std::pow(rho0, 1.0 / 3.0); \
75+
t37 = t36 * t36; \
76+
t39 = 0.1e1 / t37 / t35; \
77+
t43 = params.kappa + t29 * t34 * t39 / 0.24e2; \
78+
t48 = 0.1e1 + params.kappa * (0.1e1 - params.kappa / t43); \
79+
t52 = my_piecewise3(t1, 0, -0.3e1 / 0.8e1 * t5 * t27 * t48); \
80+
t53 = rho1 <= DENS_THRESHOLD_X_PBE; \
81+
t54 = -t16; \
82+
t56 = my_piecewise5(t14, t11, t10, t15, t54 * t7); \
83+
t57 = 0.1e1 + t56; \
84+
t58 = t57 <= ZETA_THRESHOLD_X_PBE; \
85+
t59 = std::pow(t57, 1.0 / 3.0); \
86+
t61 = my_piecewise3(t58, t22, t59 * t57); \
87+
t62 = t61 * t26; \
88+
t63 = t33 * sigma2; \
89+
t64 = rho1 * rho1; \
90+
t65 = std::pow(rho1, 1.0 / 3.0); \
91+
t66 = t65 * t65; \
92+
t68 = 0.1e1 / t66 / t64; \
93+
t72 = params.kappa + t29 * t63 * t68 / 0.24e2; \
94+
t77 = 0.1e1 + params.kappa * (0.1e1 - params.kappa / t72); \
95+
t81 = my_piecewise3(t53, 0, -0.3e1 / 0.8e1 * t5 * t62 * t77); \
96+
tzk0 = t52 + t81; \
97+
\
98+
\
99+
t82 = t6 * t6; \
100+
t83 = 0.1e1 / t82; \
101+
t84 = t16 * t83; \
102+
t86 = my_piecewise5(t10, 0, t14, 0, t7 - t84); \
103+
t89 = my_piecewise3(t20, 0, 0.4e1 / 0.3e1 * t23 * t86); \
104+
t90 = t89 * t26; \
105+
t94 = t26 * t26; \
106+
t95 = 0.1e1 / t94; \
107+
t96 = t25 * t95; \
108+
t99 = t5 * t96 * t48 / 0.8e1; \
109+
t100 = params.kappa * params.kappa; \
110+
t101 = t27 * t100; \
111+
t102 = t5 * t101; \
112+
t103 = t43 * t43; \
113+
t105 = 0.1e1 / t103 * params.mu; \
114+
t106 = t105 * t28; \
115+
t107 = t35 * rho0; \
116+
t109 = 0.1e1 / t37 / t107; \
117+
t111 = t106 * t34 * t109; \
118+
t115 = my_piecewise3( \
119+
t1, 0, -0.3e1 / 0.8e1 * t5 * t90 * t48 - t99 + t102 * t111 / 0.24e2); \
120+
t116 = t54 * t83; \
121+
t118 = my_piecewise5(t14, 0, t10, 0, -t7 - t116); \
122+
t121 = my_piecewise3(t58, 0, 0.4e1 / 0.3e1 * t59 * t118); \
123+
t122 = t121 * t26; \
124+
t126 = t61 * t95; \
125+
t129 = t5 * t126 * t77 / 0.8e1; \
126+
t131 = my_piecewise3(t53, 0, -0.3e1 / 0.8e1 * t5 * t122 * t77 - t129); \
127+
tvrho0 = t52 + t81 + t6 * (t115 + t131); \
128+
\
129+
\
130+
t135 = my_piecewise5(t10, 0, t14, 0, -t7 - t84); \
131+
t138 = my_piecewise3(t20, 0, 0.4e1 / 0.3e1 * t23 * t135); \
132+
t139 = t138 * t26; \
133+
t144 = my_piecewise3(t1, 0, -0.3e1 / 0.8e1 * t5 * t139 * t48 - t99); \
134+
t146 = my_piecewise5(t14, 0, t10, 0, t7 - t116); \
135+
t149 = my_piecewise3(t58, 0, 0.4e1 / 0.3e1 * t59 * t146); \
136+
t150 = t149 * t26; \
137+
t154 = t62 * t100; \
138+
t155 = t5 * t154; \
139+
t156 = t72 * t72; \
140+
t158 = 0.1e1 / t156 * params.mu; \
141+
t159 = t158 * t28; \
142+
t160 = t64 * rho1; \
143+
t162 = 0.1e1 / t66 / t160; \
144+
t164 = t159 * t63 * t162; \
145+
t168 = my_piecewise3( \
146+
t53, 0, -0.3e1 / 0.8e1 * t5 * t150 * t77 - t129 + t155 * t164 / 0.24e2); \
147+
tvrho1 = t52 + t81 + t6 * (t144 + t168); \
148+
\
149+
\
150+
t171 = t28 * t33; \
151+
t173 = t105 * t171 * t39; \
152+
t176 = my_piecewise3(t1, 0, -t102 * t173 / 0.64e2); \
153+
tvsigma0 = t6 * t176; \
154+
\
155+
\
156+
tvsigma1 = 0.e0; \
157+
\
158+
\
159+
t178 = t158 * t171 * t68; \
160+
t181 = my_piecewise3(t53, 0, -t155 * t178 / 0.64e2); \
161+
tvsigma2 = t6 * t181;
162+
163+
#endif

0 commit comments

Comments
 (0)