|
| 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