diff --git a/CMakeLists.txt b/CMakeLists.txt index 484da48..d7d41c8 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -57,7 +57,7 @@ endif() if(EXCHCXX_ENABLE_LIBXC) ## Find LibXC -find_package( Libxc 6.2.0 CONFIG QUIET ) +find_package( Libxc 7.0.0 CONFIG QUIET ) if( ${Libxc_FOUND} ) @@ -71,10 +71,10 @@ else() FetchContent_Declare( libxc GIT_REPOSITORY https://gitlab.com/libxc/libxc.git - GIT_TAG 6.2.0 # v6.2.0 + GIT_TAG 7.0.0 PATCH_COMMAND sed -i -e "s/p->info->family != XC_KINETIC/p->info->kind != XC_KINETIC/g" src/work_mgga_inc.c ) - set( Libxc_VERSION 6.2.0 ) + set( Libxc_VERSION 7.0.0 ) set( OLD_BUILD_TESTING ${BUILD_TESTING} ) set( BUILD_TESTING OFF CACHE BOOL "" FORCE ) diff --git a/bin/generate_primitive_kernels.py b/bin/generate_primitive_kernels.py index 978a6ed..44895ba 100644 --- a/bin/generate_primitive_kernels.py +++ b/bin/generate_primitive_kernels.py @@ -490,7 +490,8 @@ def __init__( self, local_name, libxc_file, ofname, xc_type, dens_tol, exx_coeff #libxc_prefix = '/Users/meji656/Projects/libxc/src/maple2c/' #kernel_prefix = '/Users/meji656/Projects/ExchCXX/include/exchcxx/impl/builtin/kernels/' -libxc_prefix = '/home/dbwy/Software/Chemistry/libxc/6.2.0/libxc-6.2.0/src/maple2c/' +#libxc_prefix = '/home/dbwy/Software/Chemistry/libxc/6.2.0/libxc-6.2.0/src/maple2c/' +libxc_prefix = '/home/davidwillia/Development/ExchCXX/libxc-7.0.0/src/maple2c/' kernel_prefix = 'include/exchcxx/impl/builtin/kernels/' gen_table = { @@ -688,6 +689,71 @@ def __init__( self, local_name, libxc_file, ofname, xc_type, dens_tol, exx_coeff {'eta': '0.001'} ), + 'M062X_X' : GenMetaData( 'BuiltinM062X_X', + libxc_prefix + 'mgga_exc/hyb_mgga_x_m05.c', + kernel_prefix + 'm06_2x_x.hpp', + 'MGGA', 1e-15, 0.54, + {'a_0' : '0.46', + 'a_1' : '-0.2206052', + 'a_2' : '-9.431788e-02', + 'a_3' : '2.164494e+00', + 'a_4' : '-2.556466e+00', + 'a_5' : '-1.422133e+01', + 'a_6' : '1.555044e+01', + 'a_7' : '3.598078e+01', + 'a_8' : '-2.722754e+01', + 'a_9' : '-3.924093e+01', + 'a_10': '1.522808e+01', + 'a_11': '1.522227e+01', + 'csi_HF': '1.0', + 'cx': '0.54'} + ), + + 'M062X_C' : GenMetaData( 'BuiltinM062X_C', + libxc_prefix + 'mgga_exc/mgga_c_m06l.c', + kernel_prefix + 'm06_2x_c.hpp', + 'MGGA', 1e-12, 0.0, + { + 'gamma_ss': '0.06', + 'gamma_ab': '0.0031', + 'alpha_ss': '0.00515088', + 'alpha_ab': '0.00304966', + 'css_0': '3.097855e-01', + 'css_1': '-5.528642e+00', + 'css_2': '1.347420e+01', + 'css_3': '-3.213623e+01', + 'css_4': '2.846742e+01', + 'cab_0': '8.833596e-01', + 'cab_1': '3.357972e+01', + 'cab_2': '-7.043548e+01', + 'cab_3': '4.978271e+01', + 'cab_4': '-1.852891e+01', + 'dss_0': '6.902145e-01', + 'dss_1': '9.847204e-02', + 'dss_2': '2.214797e-01', + 'dss_3': '-1.968264e-03', + 'dss_4': '-6.775479e-03', + 'dss_5': '0.000000e+00', + 'dab_0': '1.166404e-01', + 'dab_1': '-9.120847e-02', + 'dab_2': '-6.726189e-02', + 'dab_3': '6.720580e-05', + 'dab_4': '8.448011e-04', + 'dab_5': '0.000000e+00', + 'Fermi_D_cnst': '1e-10' + } + ), + + 'PKZB_X' : GenMetaData( 'BuiltinPKZB_X', + libxc_prefix + 'mgga_exc/mgga_x_pkzb.c', + kernel_prefix + 'pkzb_x.hpp', + 'MGGA', 1e-15, 0., {}), + + 'PKZB_C' : GenMetaData( 'BuiltinPKZB_C', + libxc_prefix + 'mgga_exc/mgga_c_pkzb.c', + kernel_prefix + 'pkzb_c.hpp', + 'MGGA', 1e-13, 0., {}), + 'FT98' : GenMetaData( 'BuiltinFT98_X', libxc_prefix + 'mgga_exc/mgga_x_ft98.c', kernel_prefix + 'ft98_x.hpp', diff --git a/include/exchcxx/enums/functionals.hpp b/include/exchcxx/enums/functionals.hpp index c83928b..24a47a0 100644 --- a/include/exchcxx/enums/functionals.hpp +++ b/include/exchcxx/enums/functionals.hpp @@ -60,6 +60,8 @@ enum class Functional { SCAN, R2SCAN, R2SCANL, + M062X, + PKZB, EPC17_1, EPC17_2, EPC18_1, diff --git a/include/exchcxx/enums/kernels.hpp b/include/exchcxx/enums/kernels.hpp index babb883..53a80d6 100644 --- a/include/exchcxx/enums/kernels.hpp +++ b/include/exchcxx/enums/kernels.hpp @@ -93,6 +93,11 @@ enum class Kernel { R2SCANL_C, R2SCANL_X, FT98_X, + M062X_X, + M062X_C, + PKZB_X, + PKZB_C, + // KEDFs PC07_K, diff --git a/include/exchcxx/impl/builtin/fwd.hpp b/include/exchcxx/impl/builtin/fwd.hpp index fa91878..a29abd7 100644 --- a/include/exchcxx/impl/builtin/fwd.hpp +++ b/include/exchcxx/impl/builtin/fwd.hpp @@ -76,6 +76,10 @@ struct BuiltinSCAN_X; struct BuiltinSCAN_C; struct BuiltinR2SCAN_X; struct BuiltinR2SCAN_C; +struct BuiltinM062X_X; +struct BuiltinM062X_C; +struct BuiltinPKZB_X; +struct BuiltinPKZB_C; struct BuiltinFT98_X; struct BuiltinPC07_K; diff --git a/include/exchcxx/impl/builtin/kernels.hpp b/include/exchcxx/impl/builtin/kernels.hpp index e3d5c30..0abd085 100644 --- a/include/exchcxx/impl/builtin/kernels.hpp +++ b/include/exchcxx/impl/builtin/kernels.hpp @@ -77,6 +77,10 @@ #include #include #include +#include +#include +#include +#include #include #include diff --git a/include/exchcxx/impl/builtin/kernels/ft98_x.hpp b/include/exchcxx/impl/builtin/kernels/ft98_x.hpp index 2c49f5b..ade5d46 100644 --- a/include/exchcxx/impl/builtin/kernels/ft98_x.hpp +++ b/include/exchcxx/impl/builtin/kernels/ft98_x.hpp @@ -77,7 +77,7 @@ struct kernel_traits< BuiltinFT98_X > : const double t31 = safe_math::sqrt( t30 ); const double t32 = a * t31; const double t33 = b1 * sigma; - const double t35 = t28 * t33 + 0.1e1; + const double t35 = t33 * t28 + 0.1e1; const double t36 = pow_1_4( t35 ); const double t37 = t36 * t36; const double t38 = t37 * t36; @@ -130,15 +130,15 @@ struct kernel_traits< BuiltinFT98_X > : const double t109 = safe_math::sqrt( t108 ); const double t110 = t106 + t109; const double t112 = piecewise_functor_5( t79, -0.4e1 * t67 + 0.4e1 * t74 + 0.2e1 * b2 - 0.1e1 / t76 / 0.2e1 + t87 / 0.8e1 - t91 / 0.16e2, t97, 0.1e1 - t68 + t75 + b2 + t85 / 0.2e1 - t89 / 0.8e1 + t100 / 0.16e2 - 0.5e1 / 0.128e3 * t102, 0.1e1 / t110 ); - const double t114 = t112 * t60 + 0.1e1; + const double t114 = t60 * t112 + 0.1e1; const double t116 = t115 * t60; - const double t118 = t112 * t116 + 0.1e1; + const double t118 = t116 * t112 + 0.1e1; const double t119 = t118 * t118; const double t120 = t119 * t118; const double t121 = 0.1e1 / t120; const double t122 = t114 * t121; const double t123 = t122 * t49; - const double t125 = t123 * t56 + t40 * t42 + 0.1e1; + const double t125 = t56 * t123 + t40 * t42 + 0.1e1; const double t133 = b * sigma; const double t137 = 0.1e1 + 0.81e2 / 0.4e1 * t130 * t131 * t133 * t28; const double t138 = 0.1e1 / t137; @@ -192,7 +192,7 @@ struct kernel_traits< BuiltinFT98_X > : const double t31 = safe_math::sqrt( t30 ); const double t32 = a * t31; const double t33 = b1 * sigma; - const double t35 = t28 * t33 + 0.1e1; + const double t35 = t33 * t28 + 0.1e1; const double t36 = pow_1_4( t35 ); const double t37 = t36 * t36; const double t38 = t37 * t36; @@ -245,15 +245,15 @@ struct kernel_traits< BuiltinFT98_X > : const double t109 = safe_math::sqrt( t108 ); const double t110 = t106 + t109; const double t112 = piecewise_functor_5( t79, -0.4e1 * t67 + 0.4e1 * t74 + 0.2e1 * b2 - 0.1e1 / t76 / 0.2e1 + t87 / 0.8e1 - t91 / 0.16e2, t97, 0.1e1 - t68 + t75 + b2 + t85 / 0.2e1 - t89 / 0.8e1 + t100 / 0.16e2 - 0.5e1 / 0.128e3 * t102, 0.1e1 / t110 ); - const double t114 = t112 * t60 + 0.1e1; + const double t114 = t60 * t112 + 0.1e1; const double t116 = t115 * t60; - const double t118 = t112 * t116 + 0.1e1; + const double t118 = t116 * t112 + 0.1e1; const double t119 = t118 * t118; const double t120 = t119 * t118; const double t121 = 0.1e1 / t120; const double t122 = t114 * t121; const double t123 = t122 * t49; - const double t125 = t123 * t56 + t40 * t42 + 0.1e1; + const double t125 = t56 * t123 + t40 * t42 + 0.1e1; const double t133 = b * sigma; const double t137 = 0.1e1 + 0.81e2 / 0.4e1 * t130 * t131 * t133 * t28; const double t138 = 0.1e1 / t137; @@ -296,7 +296,7 @@ struct kernel_traits< BuiltinFT98_X > : const double t222 = piecewise_functor_3( t105, t201, 0.0 ); const double t223 = 0.1e1 / t109; const double t224 = t223 * t106; - const double t226 = t222 * t224 + t222; + const double t226 = t224 * t222 + t222; const double t228 = piecewise_functor_5( t79, 0.64e2 / 0.3e1 * t192 - 0.4e2 / 0.3e1 * t196 + t198 * t201 / 0.2e1 - 0.3e1 / 0.8e1 * t204 * t201 + 0.5e1 / 0.16e2 * t207 * t201, t97, t199 - t200 + t76 * t201 - t86 * t201 / 0.2e1 + 0.3e1 / 0.8e1 * t90 * t201 - 0.5e1 / 0.16e2 * t216 * t201, -t221 * t226 ); const double t229 = t228 * t121; const double t230 = t229 * t49; @@ -315,7 +315,7 @@ struct kernel_traits< BuiltinFT98_X > : const double t249 = 0.1e1 / t248; const double t251 = t125 * t249 * t130; const double t253 = t252 * t172; - const double t256 = t138 * t246 + 0.54e2 * t251 * t253; + const double t256 = t246 * t138 + 0.54e2 * t251 * t253; const double t261 = piecewise_functor_3( t3, 0.0, -t7 * t146 * t140 / 0.8e1 - 0.3e1 / 0.16e2 * t150 * t152 * t256 ); const double t264 = sigma * t22; const double t272 = t39 * t23; @@ -323,7 +323,7 @@ struct kernel_traits< BuiltinFT98_X > : const double t276 = t275 * t27; const double t278 = t184 * t23; const double t279 = t278 * t27; - const double t283 = b * ( 0.2e1 * t175 * t276 - 0.2e1 * t279 * t50 ); + const double t283 = b * ( 0.2e1 * t175 * t276 - 0.2e1 * t50 * t279 ); const double t285 = t264 * t66; const double t287 = t198 * sigma; const double t288 = t22 * t66; @@ -502,15 +502,15 @@ struct kernel_traits< BuiltinFT98_X > : const double t153 = safe_math::cbrt( t151 ); const double t155 = piecewise_functor_3( t152, t23, t153 * t151 ); const double t156 = t155 * t27; - const double t157 = a1 * sigma_bb; const double t158 = rho_b * rho_b; const double t159 = safe_math::cbrt( rho_b ); const double t160 = t159 * t159; const double t162 = 0.1e1 / t160 / t158; - const double t164 = t157 * t162 + 0.1e1; + const double t164 = a1 * sigma_bb * t162 + 0.1e1; const double t165 = safe_math::sqrt( t164 ); const double t166 = a * t165; - const double t169 = b1 * sigma_bb * t162 + 0.1e1; + const double t167 = b1 * sigma_bb; + const double t169 = t167 * t162 + 0.1e1; const double t170 = pow_1_4( t169 ); const double t171 = t170 * t170; const double t172 = t171 * t170; @@ -694,15 +694,15 @@ struct kernel_traits< BuiltinFT98_X > : const double t153 = safe_math::cbrt( t151 ); const double t155 = piecewise_functor_3( t152, t23, t153 * t151 ); const double t156 = t155 * t27; - const double t157 = a1 * sigma_bb; const double t158 = rho_b * rho_b; const double t159 = safe_math::cbrt( rho_b ); const double t160 = t159 * t159; const double t162 = 0.1e1 / t160 / t158; - const double t164 = t157 * t162 + 0.1e1; + const double t164 = a1 * sigma_bb * t162 + 0.1e1; const double t165 = safe_math::sqrt( t164 ); const double t166 = a * t165; - const double t169 = b1 * sigma_bb * t162 + 0.1e1; + const double t167 = b1 * sigma_bb; + const double t169 = t167 * t162 + 0.1e1; const double t170 = pow_1_4( t169 ); const double t171 = t170 * t170; const double t172 = t171 * t170; diff --git a/include/exchcxx/impl/builtin/kernels/m06_2x_c.hpp b/include/exchcxx/impl/builtin/kernels/m06_2x_c.hpp new file mode 100644 index 0000000..619a4a1 --- /dev/null +++ b/include/exchcxx/impl/builtin/kernels/m06_2x_c.hpp @@ -0,0 +1,1872 @@ +#pragma once +#include + +#include +#include +#include +#include + +#include + + + +namespace ExchCXX { + +template <> +struct kernel_traits< BuiltinM062X_C > : + public mgga_screening_interface< BuiltinM062X_C > { + + static constexpr bool is_lda = false; + static constexpr bool is_gga = false; + static constexpr bool is_mgga = true; + static constexpr bool needs_laplacian = false; + static constexpr bool is_kedf = false; + static constexpr bool is_epc = false; + + static constexpr double dens_tol = 1e-12; + static constexpr double zeta_tol = 1e-15; + static constexpr double sigma_tol = 1.0000000000000021e-16; + static constexpr double tau_tol = is_kedf ? 0.0 : 1e-20; + + static constexpr bool is_hyb = false; + static constexpr double exx_coeff = 0.0; + + static constexpr double gamma_ss = 0.06; + static constexpr double gamma_ab = 0.0031; + static constexpr double alpha_ss = 0.00515088; + static constexpr double alpha_ab = 0.00304966; + static constexpr double css_0 = 3.097855e-01; + static constexpr double css_1 = -5.528642e+00; + static constexpr double css_2 = 1.347420e+01; + static constexpr double css_3 = -3.213623e+01; + static constexpr double css_4 = 2.846742e+01; + static constexpr double cab_0 = 8.833596e-01; + static constexpr double cab_1 = 3.357972e+01; + static constexpr double cab_2 = -7.043548e+01; + static constexpr double cab_3 = 4.978271e+01; + static constexpr double cab_4 = -1.852891e+01; + static constexpr double dss_0 = 6.902145e-01; + static constexpr double dss_1 = 9.847204e-02; + static constexpr double dss_2 = 2.214797e-01; + static constexpr double dss_3 = -1.968264e-03; + static constexpr double dss_4 = -6.775479e-03; + static constexpr double dss_5 = 0.000000e+00; + static constexpr double dab_0 = 1.166404e-01; + static constexpr double dab_1 = -9.120847e-02; + static constexpr double dab_2 = -6.726189e-02; + static constexpr double dab_3 = 6.720580e-05; + static constexpr double dab_4 = 8.448011e-04; + static constexpr double dab_5 = 0.000000e+00; + static constexpr double Fermi_D_cnst = 1e-10; + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_unpolar_impl( double rho, double sigma, double lapl, double tau, double& eps ) { + + (void)(lapl); + (void)(eps); + constexpr double t7 = constants::m_cbrt_3; + constexpr double t9 = constants::m_cbrt_one_ov_pi; + constexpr double t11 = constants::m_cbrt_4; + constexpr double t16 = constants::m_cbrt_2; + constexpr double t259 = constants::m_cbrt_6; + constexpr double t262 = constants::m_cbrt_pi_sq; + constexpr double t10 = t7 * t9; + constexpr double t12 = t11 * t11; + constexpr double t13 = t10 * t12; + constexpr double t30 = t7 * t7; + constexpr double t31 = t9 * t9; + constexpr double t32 = t30 * t31; + constexpr double t33 = t32 * t11; + constexpr double t36 = t16 * t16; + constexpr double t95 = css_1; + constexpr double t96 = t95 * gamma_ss; + constexpr double t108 = css_2; + constexpr double t109 = gamma_ss * gamma_ss; + constexpr double t110 = t108 * t109; + constexpr double t123 = css_3; + constexpr double t124 = t109 * gamma_ss; + constexpr double t125 = t123 * t124; + constexpr double t135 = css_4; + constexpr double t136 = t109 * t109; + constexpr double t137 = t135 * t136; + constexpr double t162 = Fermi_D_cnst * Fermi_D_cnst; + constexpr double t163 = 0.1e1 / t162; + constexpr double t212 = cab_1; + constexpr double t213 = t212 * gamma_ab; + constexpr double t223 = cab_2; + constexpr double t224 = gamma_ab * gamma_ab; + constexpr double t225 = t223 * t224; + constexpr double t232 = cab_3; + constexpr double t233 = t224 * gamma_ab; + constexpr double t234 = t232 * t233; + constexpr double t240 = cab_4; + constexpr double t241 = t224 * t224; + constexpr double t242 = t240 * t241; + constexpr double t251 = dss_0; + constexpr double t260 = t259 * t259; + constexpr double t263 = t262 * t262; + constexpr double t264 = t260 * t263; + constexpr double t265 = 0.3e1 / 0.5e1 * t264; + constexpr double t271 = dss_1; + constexpr double t274 = dss_2; + constexpr double t281 = dss_3; + constexpr double t285 = dss_4; + constexpr double t289 = dss_5; + constexpr double t300 = dab_0; + constexpr double t303 = 0.6e1 / 0.5e1 * t264; + constexpr double t309 = dab_1; + constexpr double t313 = dab_2; + constexpr double t320 = dab_3; + constexpr double t324 = dab_4; + constexpr double t329 = dab_5; + + + const double t4 = 0.1e1 <= zeta_tol; + const double t5 = rho / 0.2e1 <= dens_tol || t4; + const double t6 = piecewise_functor_3( t4, zeta_tol, 1.0 ); + const double t14 = safe_math::cbrt( rho ); + const double t15 = 0.1e1 / t14; + const double t18 = safe_math::cbrt( zeta_tol ); + const double t20 = piecewise_functor_3( t4, 0.1e1 / t18, 1.0 ); + const double t22 = t13 * t15 * t16 * t20; + const double t24 = 0.1e1 + 0.53425e-1 * t22; + const double t25 = safe_math::sqrt( t22 ); + const double t28 = pow_3_2( t22 ); + const double t34 = t14 * t14; + const double t35 = 0.1e1 / t34; + const double t38 = t20 * t20; + const double t40 = t33 * t35 * t36 * t38; + const double t42 = 0.379785e1 * t25 + 0.8969e0 * t22 + 0.204775e0 * t28 + 0.123235e0 * t40; + const double t45 = 0.1e1 + 0.16081979498692535067e2 / t42; + const double t46 = safe_math::log( t45 ); + const double t48 = 0.621814e-1 * t24 * t46; + const double t50 = t18 * zeta_tol; + const double t52 = piecewise_functor_3( 0.2e1 <= zeta_tol, t50, 0.2e1 * t16 ); + const double t54 = piecewise_functor_3( 0.e0 <= zeta_tol, t50, 0.0 ); + const double t58 = 0.1e1 / ( 0.2e1 * t16 - 0.2e1 ); + const double t59 = ( t52 + t54 - 0.2e1 ) * t58; + const double t61 = 0.1e1 + 0.5137e-1 * t22; + const double t66 = 0.705945e1 * t25 + 0.1549425e1 * t22 + 0.420775e0 * t28 + 0.1562925e0 * t40; + const double t69 = 0.1e1 + 0.32163958997385070134e2 / t66; + const double t70 = safe_math::log( t69 ); + const double t74 = 0.1e1 + 0.278125e-1 * t22; + const double t79 = 0.51785e1 * t25 + 0.905775e0 * t22 + 0.1100325e0 * t28 + 0.1241775e0 * t40; + const double t82 = 0.1e1 + 0.29608749977793437516e2 / t79; + const double t83 = safe_math::log( t82 ); + const double t84 = t74 * t83; + const double t93 = piecewise_functor_3( t5, 0.0, t6 * ( -t48 + t59 * ( -0.310907e-1 * t61 * t70 + t48 - 0.19751673498613801407e-1 * t84 ) + 0.19751673498613801407e-1 * t59 * t84 ) / 0.2e1 ); + const double t97 = t96 * sigma; + const double t98 = rho * rho; + const double t100 = 0.1e1 / t34 / t98; + const double t101 = t36 * t100; + const double t104 = gamma_ss * sigma * t101 + 0.1e1; + const double t105 = 0.1e1 / t104; + const double t106 = t101 * t105; + const double t111 = sigma * sigma; + const double t112 = t110 * t111; + const double t113 = t98 * t98; + const double t114 = t113 * rho; + const double t116 = 0.1e1 / t14 / t114; + const double t117 = t16 * t116; + const double t118 = t104 * t104; + const double t119 = 0.1e1 / t118; + const double t120 = t117 * t119; + const double t126 = t111 * sigma; + const double t127 = t113 * t113; + const double t128 = 0.1e1 / t127; + const double t129 = t126 * t128; + const double t130 = t118 * t104; + const double t131 = 0.1e1 / t130; + const double t138 = t111 * t111; + const double t139 = t137 * t138; + const double t140 = t127 * t98; + const double t142 = 0.1e1 / t34 / t140; + const double t143 = t36 * t142; + const double t144 = t118 * t118; + const double t145 = 0.1e1 / t144; + const double t146 = t143 * t145; + const double t149 = 0.4e1 * t125 * t129 * t131 + t97 * t106 + 0.2e1 * t112 * t120 + 0.4e1 * t139 * t146 + css_0; + const double t150 = t93 * t149; + const double t151 = 0.1e1 / rho; + const double t152 = sigma * t151; + const double t153 = 0.1e1 / tau; + const double t156 = 0.1e1 - t152 * t153 / 0.8e1; + const double t157 = tau * tau; + const double t159 = t98 * rho; + const double t161 = 0.1e1 / t14 / t159; + const double t167 = safe_math::exp( -0.8e1 * t157 * t16 * t161 * t163 ); + const double t168 = 0.1e1 - t167; + const double t169 = t156 * t168; + const double t171 = 0.2e1 * t150 * t169; + const double t173 = t10 * t12 * t15; + const double t175 = 0.1e1 + 0.53425e-1 * t173; + const double t176 = safe_math::sqrt( t173 ); + const double t179 = pow_3_2( t173 ); + const double t182 = t32 * t11 * t35; + const double t184 = 0.379785e1 * t176 + 0.8969e0 * t173 + 0.204775e0 * t179 + 0.123235e0 * t182; + const double t187 = 0.1e1 + 0.16081979498692535067e2 / t184; + const double t188 = safe_math::log( t187 ); + const double t191 = piecewise_functor_3( t4, t50, 1.0 ); + const double t194 = ( 0.2e1 * t191 - 0.2e1 ) * t58; + const double t196 = 0.1e1 + 0.278125e-1 * t173; + const double t201 = 0.51785e1 * t176 + 0.905775e0 * t173 + 0.1100325e0 * t179 + 0.1241775e0 * t182; + const double t204 = 0.1e1 + 0.29608749977793437516e2 / t201; + const double t205 = safe_math::log( t204 ); + const double t210 = -0.621814e-1 * t175 * t188 + 0.19751673498613801407e-1 * t194 * t196 * t205 - 0.2e1 * t93; + const double t214 = t213 * sigma; + const double t218 = 0.2e1 * gamma_ab * sigma * t101 + 0.1e1; + const double t219 = 0.1e1 / t218; + const double t220 = t101 * t219; + const double t226 = t225 * t111; + const double t227 = t218 * t218; + const double t228 = 0.1e1 / t227; + const double t229 = t117 * t228; + const double t235 = t227 * t218; + const double t236 = 0.1e1 / t235; + const double t243 = t242 * t138; + const double t244 = t227 * t227; + const double t245 = 0.1e1 / t244; + const double t246 = t143 * t245; + const double t249 = 0.32e2 * t234 * t129 * t236 + 0.2e1 * t214 * t220 + 0.8e1 * t226 * t229 + 0.64e2 * t243 * t246 + cab_0; + const double t250 = t210 * t249; + const double t252 = sigma * t36; + const double t253 = t252 * t100; + const double t254 = tau * t36; + const double t256 = 0.1e1 / t34 / rho; + const double t257 = t254 * t256; + const double t258 = 0.2e1 * t257; + const double t268 = 0.1e1 + alpha_ss * ( t253 + t258 - t265 ); + const double t272 = t271 * sigma; + const double t275 = t258 - t265; + const double t277 = t272 * t101 + t274 * t275; + const double t278 = t268 * t268; + const double t279 = 0.1e1 / t278; + const double t282 = t281 * t111; + const double t286 = t285 * sigma; + const double t290 = t275 * t275; + const double t292 = t286 * t101 * t275 + 0.2e1 * t282 * t117 + t289 * t290; + const double t293 = t278 * t268; + const double t294 = 0.1e1 / t293; + const double t296 = t251 / t268 + t277 * t279 + t292 * t294; + const double t297 = t93 * t296; + const double t299 = 0.2e1 * t297 * t156; + const double t302 = 0.4e1 * t257; + const double t306 = 0.1e1 + alpha_ab * ( 0.2e1 * t253 + t302 - t303 ); + const double t310 = t309 * sigma; + const double t314 = t302 - t303; + const double t316 = 0.2e1 * t310 * t101 + t313 * t314; + const double t317 = t306 * t306; + const double t318 = 0.1e1 / t317; + const double t321 = t320 * t111; + const double t325 = t324 * sigma; + const double t330 = t314 * t314; + const double t332 = 0.2e1 * t325 * t101 * t314 + 0.8e1 * t321 * t117 + t329 * t330; + const double t333 = t317 * t306; + const double t334 = 0.1e1 / t333; + const double t336 = t300 / t306 + t316 * t318 + t332 * t334; + const double t337 = t210 * t336; + + + eps = t171 + t250 + t299 + t337; + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_vxc_unpolar_impl( double rho, double sigma, double lapl, double tau, double& eps, double& vrho, double& vsigma, double& vlapl, double& vtau ) { + + (void)(lapl); + (void)(eps); + constexpr double t7 = constants::m_cbrt_3; + constexpr double t9 = constants::m_cbrt_one_ov_pi; + constexpr double t11 = constants::m_cbrt_4; + constexpr double t16 = constants::m_cbrt_2; + constexpr double t259 = constants::m_cbrt_6; + constexpr double t262 = constants::m_cbrt_pi_sq; + constexpr double t10 = t7 * t9; + constexpr double t12 = t11 * t11; + constexpr double t13 = t10 * t12; + constexpr double t30 = t7 * t7; + constexpr double t31 = t9 * t9; + constexpr double t32 = t30 * t31; + constexpr double t33 = t32 * t11; + constexpr double t36 = t16 * t16; + constexpr double t95 = css_1; + constexpr double t96 = t95 * gamma_ss; + constexpr double t108 = css_2; + constexpr double t109 = gamma_ss * gamma_ss; + constexpr double t110 = t108 * t109; + constexpr double t123 = css_3; + constexpr double t124 = t109 * gamma_ss; + constexpr double t125 = t123 * t124; + constexpr double t135 = css_4; + constexpr double t136 = t109 * t109; + constexpr double t137 = t135 * t136; + constexpr double t162 = Fermi_D_cnst * Fermi_D_cnst; + constexpr double t163 = 0.1e1 / t162; + constexpr double t212 = cab_1; + constexpr double t213 = t212 * gamma_ab; + constexpr double t223 = cab_2; + constexpr double t224 = gamma_ab * gamma_ab; + constexpr double t225 = t223 * t224; + constexpr double t232 = cab_3; + constexpr double t233 = t224 * gamma_ab; + constexpr double t234 = t232 * t233; + constexpr double t240 = cab_4; + constexpr double t241 = t224 * t224; + constexpr double t242 = t240 * t241; + constexpr double t251 = dss_0; + constexpr double t260 = t259 * t259; + constexpr double t263 = t262 * t262; + constexpr double t264 = t260 * t263; + constexpr double t265 = 0.3e1 / 0.5e1 * t264; + constexpr double t271 = dss_1; + constexpr double t274 = dss_2; + constexpr double t281 = dss_3; + constexpr double t285 = dss_4; + constexpr double t289 = dss_5; + constexpr double t300 = dab_0; + constexpr double t303 = 0.6e1 / 0.5e1 * t264; + constexpr double t309 = dab_1; + constexpr double t313 = dab_2; + constexpr double t320 = dab_3; + constexpr double t324 = dab_4; + constexpr double t329 = dab_5; + constexpr double t430 = t95 * t109; + constexpr double t441 = t108 * t124; + constexpr double t450 = t123 * t136; + constexpr double t461 = t136 * gamma_ss; + constexpr double t462 = t135 * t461; + constexpr double t501 = t9 * t12; + constexpr double t543 = t212 * t224; + constexpr double t550 = t223 * t233; + constexpr double t556 = t232 * t241; + constexpr double t564 = t241 * gamma_ab; + constexpr double t565 = t240 * t564; + constexpr double t719 = alpha_ss * t36; + constexpr double t722 = t271 * t36; + constexpr double t730 = t285 * t36; + constexpr double t743 = alpha_ab * t36; + constexpr double t747 = t309 * t36; + constexpr double t756 = t324 * t36; + constexpr double t781 = t274 * t36; + constexpr double t804 = t313 * t36; + + + const double t4 = 0.1e1 <= zeta_tol; + const double t5 = rho / 0.2e1 <= dens_tol || t4; + const double t6 = piecewise_functor_3( t4, zeta_tol, 1.0 ); + const double t14 = safe_math::cbrt( rho ); + const double t15 = 0.1e1 / t14; + const double t18 = safe_math::cbrt( zeta_tol ); + const double t20 = piecewise_functor_3( t4, 0.1e1 / t18, 1.0 ); + const double t22 = t13 * t15 * t16 * t20; + const double t24 = 0.1e1 + 0.53425e-1 * t22; + const double t25 = safe_math::sqrt( t22 ); + const double t28 = pow_3_2( t22 ); + const double t34 = t14 * t14; + const double t35 = 0.1e1 / t34; + const double t38 = t20 * t20; + const double t40 = t33 * t35 * t36 * t38; + const double t42 = 0.379785e1 * t25 + 0.8969e0 * t22 + 0.204775e0 * t28 + 0.123235e0 * t40; + const double t45 = 0.1e1 + 0.16081979498692535067e2 / t42; + const double t46 = safe_math::log( t45 ); + const double t48 = 0.621814e-1 * t24 * t46; + const double t50 = t18 * zeta_tol; + const double t52 = piecewise_functor_3( 0.2e1 <= zeta_tol, t50, 0.2e1 * t16 ); + const double t54 = piecewise_functor_3( 0.e0 <= zeta_tol, t50, 0.0 ); + const double t58 = 0.1e1 / ( 0.2e1 * t16 - 0.2e1 ); + const double t59 = ( t52 + t54 - 0.2e1 ) * t58; + const double t61 = 0.1e1 + 0.5137e-1 * t22; + const double t66 = 0.705945e1 * t25 + 0.1549425e1 * t22 + 0.420775e0 * t28 + 0.1562925e0 * t40; + const double t69 = 0.1e1 + 0.32163958997385070134e2 / t66; + const double t70 = safe_math::log( t69 ); + const double t74 = 0.1e1 + 0.278125e-1 * t22; + const double t79 = 0.51785e1 * t25 + 0.905775e0 * t22 + 0.1100325e0 * t28 + 0.1241775e0 * t40; + const double t82 = 0.1e1 + 0.29608749977793437516e2 / t79; + const double t83 = safe_math::log( t82 ); + const double t84 = t74 * t83; + const double t93 = piecewise_functor_3( t5, 0.0, t6 * ( -t48 + t59 * ( -0.310907e-1 * t61 * t70 + t48 - 0.19751673498613801407e-1 * t84 ) + 0.19751673498613801407e-1 * t59 * t84 ) / 0.2e1 ); + const double t97 = t96 * sigma; + const double t98 = rho * rho; + const double t100 = 0.1e1 / t34 / t98; + const double t101 = t36 * t100; + const double t104 = gamma_ss * sigma * t101 + 0.1e1; + const double t105 = 0.1e1 / t104; + const double t106 = t101 * t105; + const double t111 = sigma * sigma; + const double t112 = t110 * t111; + const double t113 = t98 * t98; + const double t114 = t113 * rho; + const double t116 = 0.1e1 / t14 / t114; + const double t117 = t16 * t116; + const double t118 = t104 * t104; + const double t119 = 0.1e1 / t118; + const double t120 = t117 * t119; + const double t126 = t111 * sigma; + const double t127 = t113 * t113; + const double t128 = 0.1e1 / t127; + const double t129 = t126 * t128; + const double t130 = t118 * t104; + const double t131 = 0.1e1 / t130; + const double t138 = t111 * t111; + const double t139 = t137 * t138; + const double t140 = t127 * t98; + const double t142 = 0.1e1 / t34 / t140; + const double t143 = t36 * t142; + const double t144 = t118 * t118; + const double t145 = 0.1e1 / t144; + const double t146 = t143 * t145; + const double t149 = 0.4e1 * t125 * t129 * t131 + t97 * t106 + 0.2e1 * t112 * t120 + 0.4e1 * t139 * t146 + css_0; + const double t150 = t93 * t149; + const double t151 = 0.1e1 / rho; + const double t152 = sigma * t151; + const double t153 = 0.1e1 / tau; + const double t156 = 0.1e1 - t152 * t153 / 0.8e1; + const double t157 = tau * tau; + const double t159 = t98 * rho; + const double t161 = 0.1e1 / t14 / t159; + const double t167 = safe_math::exp( -0.8e1 * t157 * t16 * t161 * t163 ); + const double t168 = 0.1e1 - t167; + const double t169 = t156 * t168; + const double t171 = 0.2e1 * t150 * t169; + const double t173 = t10 * t12 * t15; + const double t175 = 0.1e1 + 0.53425e-1 * t173; + const double t176 = safe_math::sqrt( t173 ); + const double t179 = pow_3_2( t173 ); + const double t182 = t32 * t11 * t35; + const double t184 = 0.379785e1 * t176 + 0.8969e0 * t173 + 0.204775e0 * t179 + 0.123235e0 * t182; + const double t187 = 0.1e1 + 0.16081979498692535067e2 / t184; + const double t188 = safe_math::log( t187 ); + const double t191 = piecewise_functor_3( t4, t50, 1.0 ); + const double t194 = ( 0.2e1 * t191 - 0.2e1 ) * t58; + const double t196 = 0.1e1 + 0.278125e-1 * t173; + const double t201 = 0.51785e1 * t176 + 0.905775e0 * t173 + 0.1100325e0 * t179 + 0.1241775e0 * t182; + const double t204 = 0.1e1 + 0.29608749977793437516e2 / t201; + const double t205 = safe_math::log( t204 ); + const double t210 = -0.621814e-1 * t175 * t188 + 0.19751673498613801407e-1 * t194 * t196 * t205 - 0.2e1 * t93; + const double t214 = t213 * sigma; + const double t218 = 0.2e1 * gamma_ab * sigma * t101 + 0.1e1; + const double t219 = 0.1e1 / t218; + const double t220 = t101 * t219; + const double t226 = t225 * t111; + const double t227 = t218 * t218; + const double t228 = 0.1e1 / t227; + const double t229 = t117 * t228; + const double t235 = t227 * t218; + const double t236 = 0.1e1 / t235; + const double t243 = t242 * t138; + const double t244 = t227 * t227; + const double t245 = 0.1e1 / t244; + const double t246 = t143 * t245; + const double t249 = 0.32e2 * t234 * t129 * t236 + 0.2e1 * t214 * t220 + 0.8e1 * t226 * t229 + 0.64e2 * t243 * t246 + cab_0; + const double t250 = t210 * t249; + const double t252 = sigma * t36; + const double t253 = t252 * t100; + const double t254 = tau * t36; + const double t256 = 0.1e1 / t34 / rho; + const double t257 = t254 * t256; + const double t258 = 0.2e1 * t257; + const double t268 = 0.1e1 + alpha_ss * ( t253 + t258 - t265 ); + const double t272 = t271 * sigma; + const double t275 = t258 - t265; + const double t277 = t272 * t101 + t274 * t275; + const double t278 = t268 * t268; + const double t279 = 0.1e1 / t278; + const double t282 = t281 * t111; + const double t286 = t285 * sigma; + const double t290 = t275 * t275; + const double t292 = t286 * t101 * t275 + 0.2e1 * t282 * t117 + t289 * t290; + const double t293 = t278 * t268; + const double t294 = 0.1e1 / t293; + const double t296 = t251 / t268 + t277 * t279 + t292 * t294; + const double t297 = t93 * t296; + const double t299 = 0.2e1 * t297 * t156; + const double t302 = 0.4e1 * t257; + const double t306 = 0.1e1 + alpha_ab * ( 0.2e1 * t253 + t302 - t303 ); + const double t310 = t309 * sigma; + const double t314 = t302 - t303; + const double t316 = 0.2e1 * t310 * t101 + t313 * t314; + const double t317 = t306 * t306; + const double t318 = 0.1e1 / t317; + const double t321 = t320 * t111; + const double t325 = t324 * sigma; + const double t330 = t314 * t314; + const double t332 = 0.2e1 * t325 * t101 * t314 + 0.8e1 * t321 * t117 + t329 * t330; + const double t333 = t317 * t306; + const double t334 = 0.1e1 / t333; + const double t336 = t300 / t306 + t316 * t318 + t332 * t334; + const double t337 = t210 * t336; + const double t339 = 0.1e1 / t14 / rho; + const double t340 = t339 * t16; + const double t341 = t20 * t46; + const double t344 = 0.11073470983333333333e-2 * t13 * t340 * t341; + const double t345 = t42 * t42; + const double t346 = 0.1e1 / t345; + const double t347 = t24 * t346; + const double t350 = 0.1e1 / t25 * t7 * t9; + const double t351 = t12 * t339; + const double t352 = t16 * t20; + const double t353 = t351 * t352; + const double t354 = t350 * t353; + const double t356 = t340 * t20; + const double t357 = t13 * t356; + const double t359 = safe_math::sqrt( t22 ); + const double t361 = t359 * t7 * t9; + const double t362 = t361 * t353; + const double t364 = t256 * t36; + const double t366 = t33 * t364 * t38; + const double t368 = -0.632975e0 * t354 - 0.29896666666666666667e0 * t357 - 0.1023875e0 * t362 - 0.82156666666666666667e-1 * t366; + const double t369 = 0.1e1 / t45; + const double t370 = t368 * t369; + const double t372 = 0.1e1 * t347 * t370; + const double t373 = t20 * t70; + const double t377 = t66 * t66; + const double t378 = 0.1e1 / t377; + const double t379 = t61 * t378; + const double t384 = -0.1176575e1 * t354 - 0.516475e0 * t357 - 0.2103875e0 * t362 - 0.104195e0 * t366; + const double t385 = 0.1e1 / t69; + const double t386 = t384 * t385; + const double t389 = t20 * t83; + const double t393 = t79 * t79; + const double t394 = 0.1e1 / t393; + const double t395 = t74 * t394; + const double t400 = -0.86308333333333333334e0 * t354 - 0.301925e0 * t357 - 0.5501625e-1 * t362 - 0.82785e-1 * t366; + const double t401 = 0.1e1 / t82; + const double t402 = t400 * t401; + const double t407 = t59 * t10; + const double t408 = t352 * t83; + const double t412 = t59 * t74; + const double t414 = t394 * t400 * t401; + const double t420 = piecewise_functor_3( t5, 0.0, t6 * ( t344 + t372 + t59 * ( 0.53237641966666666666e-3 * t13 * t340 * t373 + 0.1e1 * t379 * t386 - t344 - t372 + 0.18311447306006545054e-3 * t13 * t340 * t389 + 0.5848223622634646207e0 * t395 * t402 ) - 0.18311447306006545054e-3 * t407 * t351 * t408 - 0.5848223622634646207e0 * t412 * t414 ) / 0.2e1 ); + const double t421 = t420 * t149; + const double t422 = t421 * t169; + const double t425 = 0.1e1 / t34 / t159; + const double t426 = t36 * t425; + const double t427 = t426 * t105; + const double t431 = t430 * t111; + const double t432 = t113 * t98; + const double t434 = 0.1e1 / t14 / t432; + const double t435 = t16 * t434; + const double t436 = t435 * t119; + const double t442 = t127 * rho; + const double t443 = 0.1e1 / t442; + const double t444 = t126 * t443; + const double t445 = t444 * t131; + const double t451 = t450 * t138; + const double t452 = t127 * t159; + const double t454 = 0.1e1 / t34 / t452; + const double t456 = t454 * t145 * t36; + const double t463 = t138 * sigma; + const double t464 = t462 * t463; + const double t465 = t127 * t432; + const double t467 = 0.1e1 / t14 / t465; + const double t468 = t16 * t467; + const double t470 = 0.1e1 / t144 / t104; + const double t471 = t468 * t470; + const double t474 = -0.8e1 / 0.3e1 * t97 * t427 + 0.16e2 / 0.3e1 * t431 * t436 - 0.32e2 / 0.3e1 * t112 * t436 + 0.64e2 / 0.3e1 * t441 * t445 - 0.32e2 * t125 * t445 + 0.32e2 * t451 * t456 - 0.128e3 / 0.3e1 * t139 * t456 + 0.256e3 / 0.3e1 * t464 * t471; + const double t475 = t93 * t474; + const double t476 = t475 * t169; + const double t478 = t150 * sigma; + const double t479 = 0.1e1 / t98; + const double t480 = t479 * t153; + const double t481 = t480 * t168; + const double t482 = t478 * t481; + const double t484 = t156 * t157; + const double t485 = t150 * t484; + const double t487 = 0.1e1 / t14 / t113; + const double t488 = t16 * t487; + const double t489 = t163 * t167; + const double t490 = t488 * t489; + const double t491 = t485 * t490; + const double t496 = t184 * t184; + const double t497 = 0.1e1 / t496; + const double t498 = t175 * t497; + const double t500 = 0.1e1 / t176 * t7; + const double t502 = t501 * t339; + const double t503 = t500 * t502; + const double t505 = t10 * t351; + const double t507 = safe_math::sqrt( t173 ); + const double t508 = t507 * t7; + const double t509 = t508 * t502; + const double t512 = t32 * t11 * t256; + const double t514 = -0.632975e0 * t503 - 0.29896666666666666667e0 * t505 - 0.1023875e0 * t509 - 0.82156666666666666667e-1 * t512; + const double t515 = 0.1e1 / t187; + const double t516 = t514 * t515; + const double t519 = t194 * t7; + const double t524 = t194 * t196; + const double t525 = t201 * t201; + const double t526 = 0.1e1 / t525; + const double t531 = -0.86308333333333333334e0 * t503 - 0.301925e0 * t505 - 0.5501625e-1 * t509 - 0.82785e-1 * t512; + const double t533 = 0.1e1 / t204; + const double t534 = t526 * t531 * t533; + const double t538 = 0.11073470983333333333e-2 * t10 * t351 * t188 + 0.1e1 * t498 * t516 - 0.18311447306006545054e-3 * t519 * t501 * t339 * t205 - 0.5848223622634646207e0 * t524 * t534 - 0.2e1 * t420; + const double t539 = t538 * t249; + const double t540 = t426 * t219; + const double t544 = t543 * t111; + const double t545 = t435 * t228; + const double t551 = t444 * t236; + const double t557 = t556 * t138; + const double t559 = t454 * t245 * t36; + const double t566 = t565 * t463; + const double t568 = 0.1e1 / t244 / t218; + const double t569 = t468 * t568; + const double t572 = -0.16e2 / 0.3e1 * t214 * t540 + 0.64e2 / 0.3e1 * t544 * t545 - 0.128e3 / 0.3e1 * t226 * t545 + 0.512e3 / 0.3e1 * t550 * t551 - 0.256e3 * t234 * t551 + 0.512e3 * t557 * t559 - 0.2048e4 / 0.3e1 * t243 * t559 + 0.8192e4 / 0.3e1 * t566 * t569; + const double t573 = t210 * t572; + const double t574 = t420 * t296; + const double t575 = t574 * t156; + const double t577 = t251 * t279; + const double t578 = t252 * t425; + const double t580 = t254 * t100; + const double t582 = -0.8e1 / 0.3e1 * t578 - 0.1e2 / 0.3e1 * t580; + const double t583 = alpha_ss * t582; + const double t587 = t274 * tau; + const double t590 = -0.8e1 / 0.3e1 * t272 * t426 - 0.1e2 / 0.3e1 * t587 * t101; + const double t592 = t277 * t294; + const double t600 = t117 * tau; + const double t603 = t289 * t275; + const double t606 = -0.32e2 / 0.3e1 * t282 * t435 - 0.8e1 / 0.3e1 * t286 * t426 * t275 - 0.2e2 / 0.3e1 * t286 * t600 - 0.2e2 / 0.3e1 * t603 * t580; + const double t608 = t278 * t278; + const double t609 = 0.1e1 / t608; + const double t610 = t292 * t609; + const double t613 = t590 * t279 + t606 * t294 - t577 * t583 - 0.2e1 * t592 * t583 - 0.3e1 * t610 * t583; + const double t614 = t93 * t613; + const double t615 = t614 * t156; + const double t617 = sigma * t479; + const double t618 = t617 * t153; + const double t619 = t297 * t618; + const double t621 = t538 * t336; + const double t622 = t300 * t318; + const double t625 = -0.16e2 / 0.3e1 * t578 - 0.2e2 / 0.3e1 * t580; + const double t626 = alpha_ab * t625; + const double t630 = t313 * tau; + const double t633 = -0.16e2 / 0.3e1 * t310 * t426 - 0.2e2 / 0.3e1 * t630 * t101; + const double t635 = t316 * t334; + const double t645 = t329 * t314; + const double t648 = -0.128e3 / 0.3e1 * t321 * t435 - 0.16e2 / 0.3e1 * t325 * t426 * t314 - 0.8e2 / 0.3e1 * t325 * t600 - 0.4e2 / 0.3e1 * t645 * t580; + const double t650 = t317 * t317; + const double t651 = 0.1e1 / t650; + const double t652 = t332 * t651; + const double t655 = t633 * t318 + t648 * t334 - t622 * t626 - 0.2e1 * t635 * t626 - 0.3e1 * t652 * t626; + const double t656 = t210 * t655; + const double t657 = 0.2e1 * t422 + 0.2e1 * t476 + t482 / 0.4e1 - 0.16e3 / 0.3e1 * t491 + t539 + t573 + 0.2e1 * t575 + 0.2e1 * t615 + t619 / 0.4e1 + t621 + t656; + const double t663 = t110 * sigma; + const double t666 = t111 * t128; + const double t667 = t666 * t131; + const double t672 = t450 * t126; + const double t675 = t137 * t126; + const double t678 = t462 * t138; + const double t679 = t127 * t114; + const double t681 = 0.1e1 / t14 / t679; + const double t682 = t16 * t681; + const double t683 = t682 * t470; + const double t686 = -0.2e1 * t430 * sigma * t120 + t96 * t106 + 0.4e1 * t663 * t120 + 0.12e2 * t125 * t667 - 0.12e2 * t672 * t146 + 0.16e2 * t675 * t146 - 0.8e1 * t441 * t667 - 0.32e2 * t678 * t683; + const double t687 = t93 * t686; + const double t689 = 0.2e1 * t687 * t169; + const double t690 = t151 * t153; + const double t691 = t690 * t168; + const double t693 = t150 * t691 / 0.4e1; + const double t699 = t225 * sigma; + const double t702 = t666 * t236; + const double t707 = t556 * t126; + const double t710 = t242 * t126; + const double t713 = t565 * t138; + const double t714 = t682 * t568; + const double t717 = -0.8e1 * t543 * sigma * t229 + 0.2e1 * t213 * t220 + 0.16e2 * t699 * t229 + 0.96e2 * t234 * t702 - 0.192e3 * t707 * t246 + 0.256e3 * t710 * t246 - 0.64e2 * t550 * t702 - 0.1024e4 * t713 * t714; + const double t718 = t210 * t717; + const double t720 = t719 * t100; + const double t721 = t577 * t720; + const double t723 = t100 * t279; + const double t725 = t592 * t720; + const double t727 = t281 * sigma; + const double t733 = t730 * t100 * t275 + 0.4e1 * t727 * t117; + const double t735 = t610 * t720; + const double t737 = t733 * t294 + t722 * t723 - t721 - 0.2e1 * t725 - 0.3e1 * t735; + const double t738 = t93 * t737; + const double t740 = 0.2e1 * t738 * t156; + const double t742 = t297 * t690 / 0.4e1; + const double t744 = t743 * t100; + const double t745 = t622 * t744; + const double t748 = t100 * t318; + const double t751 = t635 * t744; + const double t753 = t320 * sigma; + const double t760 = 0.2e1 * t756 * t100 * t314 + 0.16e2 * t753 * t117; + const double t762 = t652 * t744; + const double t764 = t760 * t334 + 0.2e1 * t747 * t748 - 0.2e1 * t745 - 0.4e1 * t751 - 0.6e1 * t762; + const double t765 = t210 * t764; + const double t767 = 0.1e1 / t157; + const double t768 = t151 * t767; + const double t769 = t768 * t168; + const double t771 = t478 * t769 / 0.4e1; + const double t772 = t156 * tau; + const double t773 = t150 * t772; + const double t774 = t16 * t161; + const double t775 = t774 * t489; + const double t777 = 0.32e2 * t773 * t775; + const double t778 = t719 * t256; + const double t790 = 0.4e1 * t286 * t488 + 0.4e1 * t603 * t364; + const double t794 = 0.2e1 * t781 * t256 * t279 + t790 * t294 - 0.2e1 * t577 * t778 - 0.4e1 * t592 * t778 - 0.6e1 * t610 * t778; + const double t795 = t93 * t794; + const double t797 = 0.2e1 * t795 * t156; + const double t798 = t152 * t767; + const double t800 = t297 * t798 / 0.4e1; + const double t801 = t743 * t256; + const double t814 = 0.16e2 * t325 * t488 + 0.8e1 * t645 * t364; + const double t818 = 0.4e1 * t804 * t256 * t318 + t814 * t334 - 0.4e1 * t622 * t801 - 0.8e1 * t635 * t801 - 0.12e2 * t652 * t801; + const double t819 = t210 * t818; + + + eps = t171 + t250 + t299 + t337; + vrho = rho * t657 + t171 + t250 + t299 + t337; + vsigma = rho * ( t689 - t693 + t718 + t740 - t742 + t765 ); + vlapl = 0.e0; + vtau = rho * ( t771 + t777 + t797 + t800 + t819 ); + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_polar_impl( double rho_a, double rho_b, double sigma_aa, double sigma_ab, double sigma_bb, double lapl_a, double lapl_b, double tau_a, double tau_b, double& eps ) { + + (void)(sigma_ab); + (void)(lapl_a); + (void)(lapl_b); + (void)(eps); + constexpr double t11 = constants::m_cbrt_3; + constexpr double t13 = constants::m_cbrt_one_ov_pi; + constexpr double t15 = constants::m_cbrt_4; + constexpr double t20 = constants::m_cbrt_2; + constexpr double t395 = constants::m_cbrt_6; + constexpr double t398 = constants::m_cbrt_pi_sq; + constexpr double t14 = t11 * t13; + constexpr double t16 = t15 * t15; + constexpr double t17 = t14 * t16; + constexpr double t36 = t11 * t11; + constexpr double t37 = t13 * t13; + constexpr double t38 = t36 * t37; + constexpr double t39 = t38 * t15; + constexpr double t42 = t20 * t20; + constexpr double t100 = css_0; + constexpr double t101 = css_1; + constexpr double t102 = t101 * gamma_ss; + constexpr double t115 = css_2; + constexpr double t116 = gamma_ss * gamma_ss; + constexpr double t117 = t115 * t116; + constexpr double t128 = css_3; + constexpr double t129 = t116 * gamma_ss; + constexpr double t130 = t128 * t129; + constexpr double t139 = css_4; + constexpr double t140 = t116 * t116; + constexpr double t141 = t139 * t140; + constexpr double t164 = Fermi_D_cnst * Fermi_D_cnst; + constexpr double t165 = 0.1e1 / t164; + constexpr double t356 = cab_1; + constexpr double t357 = t356 * gamma_ab; + constexpr double t364 = cab_2; + constexpr double t365 = gamma_ab * gamma_ab; + constexpr double t366 = t364 * t365; + constexpr double t372 = cab_3; + constexpr double t373 = t365 * gamma_ab; + constexpr double t374 = t372 * t373; + constexpr double t380 = cab_4; + constexpr double t381 = t365 * t365; + constexpr double t382 = t380 * t381; + constexpr double t390 = dss_0; + constexpr double t396 = t395 * t395; + constexpr double t399 = t398 * t398; + constexpr double t400 = t396 * t399; + constexpr double t401 = 0.3e1 / 0.5e1 * t400; + constexpr double t407 = dss_1; + constexpr double t410 = dss_2; + constexpr double t417 = dss_3; + constexpr double t420 = dss_4; + constexpr double t424 = dss_5; + constexpr double t465 = dab_0; + constexpr double t466 = 0.6e1 / 0.5e1 * t400; + constexpr double t472 = dab_1; + constexpr double t474 = dab_2; + constexpr double t481 = dab_3; + constexpr double t483 = dab_4; + constexpr double t486 = dab_5; + + + const double t3 = rho_a - rho_b; + const double t4 = rho_a + rho_b; + const double t5 = 0.1e1 / t4; + const double t6 = t3 * t5; + const double t7 = 0.1e1 + t6; + const double t8 = t7 <= zeta_tol; + const double t9 = rho_a <= dens_tol || t8; + const double t10 = piecewise_functor_3( t8, zeta_tol, t7 ); + const double t18 = safe_math::cbrt( t4 ); + const double t19 = 0.1e1 / t18; + const double t21 = t19 * t20; + const double t22 = safe_math::cbrt( zeta_tol ); + const double t23 = 0.1e1 / t22; + const double t24 = safe_math::cbrt( t7 ); + const double t26 = piecewise_functor_3( t8, t23, 0.1e1 / t24 ); + const double t28 = t17 * t21 * t26; + const double t30 = 0.1e1 + 0.53425e-1 * t28; + const double t31 = safe_math::sqrt( t28 ); + const double t34 = pow_3_2( t28 ); + const double t40 = t18 * t18; + const double t41 = 0.1e1 / t40; + const double t43 = t41 * t42; + const double t44 = t26 * t26; + const double t46 = t39 * t43 * t44; + const double t48 = 0.379785e1 * t31 + 0.8969e0 * t28 + 0.204775e0 * t34 + 0.123235e0 * t46; + const double t51 = 0.1e1 + 0.16081979498692535067e2 / t48; + const double t52 = safe_math::log( t51 ); + const double t54 = 0.621814e-1 * t30 * t52; + const double t56 = t22 * zeta_tol; + const double t58 = piecewise_functor_3( 0.2e1 <= zeta_tol, t56, 0.2e1 * t20 ); + const double t60 = piecewise_functor_3( 0.e0 <= zeta_tol, t56, 0.0 ); + const double t64 = 0.1e1 / ( 0.2e1 * t20 - 0.2e1 ); + const double t65 = ( t58 + t60 - 0.2e1 ) * t64; + const double t67 = 0.1e1 + 0.5137e-1 * t28; + const double t72 = 0.705945e1 * t31 + 0.1549425e1 * t28 + 0.420775e0 * t34 + 0.1562925e0 * t46; + const double t75 = 0.1e1 + 0.32163958997385070134e2 / t72; + const double t76 = safe_math::log( t75 ); + const double t80 = 0.1e1 + 0.278125e-1 * t28; + const double t85 = 0.51785e1 * t31 + 0.905775e0 * t28 + 0.1100325e0 * t34 + 0.1241775e0 * t46; + const double t88 = 0.1e1 + 0.29608749977793437516e2 / t85; + const double t89 = safe_math::log( t88 ); + const double t90 = t80 * t89; + const double t96 = -t54 + t65 * ( -0.310907e-1 * t67 * t76 + t54 - 0.19751673498613801407e-1 * t90 ) + 0.19751673498613801407e-1 * t65 * t90; + const double t99 = piecewise_functor_3( t9, 0.0, t10 * t96 / 0.2e1 ); + const double t103 = rho_a * rho_a; + const double t104 = safe_math::cbrt( rho_a ); + const double t105 = t104 * t104; + const double t107 = 0.1e1 / t105 / t103; + const double t108 = sigma_aa * t107; + const double t111 = gamma_ss * sigma_aa * t107 + 0.1e1; + const double t112 = 0.1e1 / t111; + const double t118 = sigma_aa * sigma_aa; + const double t119 = t103 * t103; + const double t120 = t119 * rho_a; + const double t122 = 0.1e1 / t104 / t120; + const double t124 = t111 * t111; + const double t125 = 0.1e1 / t124; + const double t131 = t118 * sigma_aa; + const double t132 = t119 * t119; + const double t133 = 0.1e1 / t132; + const double t135 = t124 * t111; + const double t136 = 0.1e1 / t135; + const double t142 = t118 * t118; + const double t143 = t132 * t103; + const double t145 = 0.1e1 / t105 / t143; + const double t147 = t124 * t124; + const double t148 = 0.1e1 / t147; + const double t151 = t117 * t118 * t122 * t125 + t130 * t131 * t133 * t136 + t141 * t142 * t145 * t148 + t102 * t108 * t112 + t100; + const double t152 = t99 * t151; + const double t153 = 0.1e1 / rho_a; + const double t154 = sigma_aa * t153; + const double t155 = 0.1e1 / tau_a; + const double t158 = 0.1e1 - t154 * t155 / 0.8e1; + const double t159 = tau_a * tau_a; + const double t160 = t103 * rho_a; + const double t162 = 0.1e1 / t104 / t160; + const double t168 = safe_math::exp( -0.4e1 * t159 * t162 * t165 ); + const double t169 = 0.1e1 - t168; + const double t170 = t158 * t169; + const double t171 = t152 * t170; + const double t173 = 0.1e1 - t6; + const double t174 = t173 <= zeta_tol; + const double t175 = rho_b <= dens_tol || t174; + const double t176 = piecewise_functor_3( t174, zeta_tol, t173 ); + const double t177 = safe_math::cbrt( t173 ); + const double t179 = piecewise_functor_3( t174, t23, 0.1e1 / t177 ); + const double t181 = t17 * t21 * t179; + const double t183 = 0.1e1 + 0.53425e-1 * t181; + const double t184 = safe_math::sqrt( t181 ); + const double t187 = pow_3_2( t181 ); + const double t189 = t179 * t179; + const double t191 = t39 * t43 * t189; + const double t193 = 0.379785e1 * t184 + 0.8969e0 * t181 + 0.204775e0 * t187 + 0.123235e0 * t191; + const double t196 = 0.1e1 + 0.16081979498692535067e2 / t193; + const double t197 = safe_math::log( t196 ); + const double t199 = 0.621814e-1 * t183 * t197; + const double t201 = 0.1e1 + 0.5137e-1 * t181; + const double t206 = 0.705945e1 * t184 + 0.1549425e1 * t181 + 0.420775e0 * t187 + 0.1562925e0 * t191; + const double t209 = 0.1e1 + 0.32163958997385070134e2 / t206; + const double t210 = safe_math::log( t209 ); + const double t214 = 0.1e1 + 0.278125e-1 * t181; + const double t219 = 0.51785e1 * t184 + 0.905775e0 * t181 + 0.1100325e0 * t187 + 0.1241775e0 * t191; + const double t222 = 0.1e1 + 0.29608749977793437516e2 / t219; + const double t223 = safe_math::log( t222 ); + const double t224 = t214 * t223; + const double t230 = -t199 + t65 * ( -0.310907e-1 * t201 * t210 + t199 - 0.19751673498613801407e-1 * t224 ) + 0.19751673498613801407e-1 * t65 * t224; + const double t233 = piecewise_functor_3( t175, 0.0, t176 * t230 / 0.2e1 ); + const double t234 = rho_b * rho_b; + const double t235 = safe_math::cbrt( rho_b ); + const double t236 = t235 * t235; + const double t238 = 0.1e1 / t236 / t234; + const double t239 = sigma_bb * t238; + const double t242 = gamma_ss * sigma_bb * t238 + 0.1e1; + const double t243 = 0.1e1 / t242; + const double t246 = sigma_bb * sigma_bb; + const double t247 = t234 * t234; + const double t248 = t247 * rho_b; + const double t250 = 0.1e1 / t235 / t248; + const double t252 = t242 * t242; + const double t253 = 0.1e1 / t252; + const double t256 = t246 * sigma_bb; + const double t257 = t247 * t247; + const double t258 = 0.1e1 / t257; + const double t260 = t252 * t242; + const double t261 = 0.1e1 / t260; + const double t264 = t246 * t246; + const double t265 = t257 * t234; + const double t267 = 0.1e1 / t236 / t265; + const double t269 = t252 * t252; + const double t270 = 0.1e1 / t269; + const double t273 = t117 * t246 * t250 * t253 + t130 * t256 * t258 * t261 + t141 * t264 * t267 * t270 + t102 * t239 * t243 + t100; + const double t274 = t233 * t273; + const double t275 = 0.1e1 / rho_b; + const double t276 = sigma_bb * t275; + const double t277 = 0.1e1 / tau_b; + const double t280 = 0.1e1 - t276 * t277 / 0.8e1; + const double t281 = tau_b * tau_b; + const double t282 = t234 * rho_b; + const double t284 = 0.1e1 / t235 / t282; + const double t288 = safe_math::exp( -0.4e1 * t281 * t284 * t165 ); + const double t289 = 0.1e1 - t288; + const double t290 = t280 * t289; + const double t291 = t274 * t290; + const double t293 = t14 * t16 * t19; + const double t295 = 0.1e1 + 0.53425e-1 * t293; + const double t296 = safe_math::sqrt( t293 ); + const double t299 = pow_3_2( t293 ); + const double t302 = t38 * t15 * t41; + const double t304 = 0.379785e1 * t296 + 0.8969e0 * t293 + 0.204775e0 * t299 + 0.123235e0 * t302; + const double t307 = 0.1e1 + 0.16081979498692535067e2 / t304; + const double t308 = safe_math::log( t307 ); + const double t310 = 0.621814e-1 * t295 * t308; + const double t311 = t3 * t3; + const double t312 = t311 * t311; + const double t313 = t4 * t4; + const double t314 = t313 * t313; + const double t315 = 0.1e1 / t314; + const double t316 = t312 * t315; + const double t317 = t24 * t7; + const double t318 = piecewise_functor_3( t8, t56, t317 ); + const double t319 = t177 * t173; + const double t320 = piecewise_functor_3( t174, t56, t319 ); + const double t321 = t318 + t320 - 0.2e1; + const double t322 = t321 * t64; + const double t324 = 0.1e1 + 0.5137e-1 * t293; + const double t329 = 0.705945e1 * t296 + 0.1549425e1 * t293 + 0.420775e0 * t299 + 0.1562925e0 * t302; + const double t332 = 0.1e1 + 0.32163958997385070134e2 / t329; + const double t333 = safe_math::log( t332 ); + const double t337 = 0.1e1 + 0.278125e-1 * t293; + const double t342 = 0.51785e1 * t296 + 0.905775e0 * t293 + 0.1100325e0 * t299 + 0.1241775e0 * t302; + const double t345 = 0.1e1 + 0.29608749977793437516e2 / t342; + const double t346 = safe_math::log( t345 ); + const double t347 = t337 * t346; + const double t349 = -0.310907e-1 * t324 * t333 + t310 - 0.19751673498613801407e-1 * t347; + const double t350 = t322 * t349; + const double t354 = -t310 + t316 * t350 + 0.19751673498613801407e-1 * t322 * t347 - t99 - t233; + const double t358 = t108 + t239; + const double t360 = gamma_ab * t358 + 0.1e1; + const double t361 = 0.1e1 / t360; + const double t367 = t358 * t358; + const double t368 = t360 * t360; + const double t369 = 0.1e1 / t368; + const double t375 = t367 * t358; + const double t376 = t368 * t360; + const double t377 = 0.1e1 / t376; + const double t383 = t367 * t367; + const double t384 = t368 * t368; + const double t385 = 0.1e1 / t384; + const double t388 = t357 * t358 * t361 + t366 * t367 * t369 + t374 * t375 * t377 + t382 * t383 * t385 + cab_0; + const double t389 = t354 * t388; + const double t392 = 0.1e1 / t105 / rho_a; + const double t394 = 0.2e1 * tau_a * t392; + const double t404 = 0.1e1 + alpha_ss * ( t108 + t394 - t401 ); + const double t408 = t407 * sigma_aa; + const double t411 = t394 - t401; + const double t413 = t408 * t107 + t410 * t411; + const double t414 = t404 * t404; + const double t415 = 0.1e1 / t414; + const double t418 = t417 * t118; + const double t421 = t420 * sigma_aa; + const double t425 = t411 * t411; + const double t427 = t421 * t107 * t411 + t418 * t122 + t424 * t425; + const double t428 = t414 * t404; + const double t429 = 0.1e1 / t428; + const double t431 = t390 / t404 + t413 * t415 + t427 * t429; + const double t432 = t99 * t431; + const double t433 = t432 * t158; + const double t435 = 0.1e1 / t236 / rho_b; + const double t437 = 0.2e1 * tau_b * t435; + const double t440 = 0.1e1 + alpha_ss * ( t239 + t437 - t401 ); + const double t443 = t407 * sigma_bb; + const double t445 = t437 - t401; + const double t447 = t443 * t238 + t410 * t445; + const double t448 = t440 * t440; + const double t449 = 0.1e1 / t448; + const double t451 = t417 * t246; + const double t453 = t420 * sigma_bb; + const double t456 = t445 * t445; + const double t458 = t453 * t238 * t445 + t451 * t250 + t424 * t456; + const double t459 = t448 * t440; + const double t460 = 0.1e1 / t459; + const double t462 = t390 / t440 + t447 * t449 + t458 * t460; + const double t463 = t233 * t462; + const double t464 = t463 * t280; + const double t469 = 0.1e1 + alpha_ab * ( t108 + t239 + t394 + t437 - t466 ); + const double t475 = t394 + t437 - t466; + const double t477 = t472 * t358 + t474 * t475; + const double t478 = t469 * t469; + const double t479 = 0.1e1 / t478; + const double t484 = t483 * t358; + const double t487 = t475 * t475; + const double t489 = t481 * t367 + t484 * t475 + t486 * t487; + const double t490 = t478 * t469; + const double t491 = 0.1e1 / t490; + const double t493 = t465 / t469 + t477 * t479 + t489 * t491; + const double t494 = t354 * t493; + + + eps = t171 + t291 + t389 + t433 + t464 + t494; + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_vxc_polar_impl( double rho_a, double rho_b, double sigma_aa, double sigma_ab, double sigma_bb, double lapl_a, double lapl_b, double tau_a, double tau_b, double& eps, double& vrho_a, double& vrho_b, double& vsigma_aa, double& vsigma_ab, double& vsigma_bb, double& vlapl_a, double& vlapl_b, double& vtau_a, double& vtau_b ) { + + (void)(sigma_ab); + (void)(lapl_a); + (void)(lapl_b); + (void)(eps); + constexpr double t11 = constants::m_cbrt_3; + constexpr double t13 = constants::m_cbrt_one_ov_pi; + constexpr double t15 = constants::m_cbrt_4; + constexpr double t20 = constants::m_cbrt_2; + constexpr double t395 = constants::m_cbrt_6; + constexpr double t398 = constants::m_cbrt_pi_sq; + constexpr double t14 = t11 * t13; + constexpr double t16 = t15 * t15; + constexpr double t17 = t14 * t16; + constexpr double t36 = t11 * t11; + constexpr double t37 = t13 * t13; + constexpr double t38 = t36 * t37; + constexpr double t39 = t38 * t15; + constexpr double t42 = t20 * t20; + constexpr double t100 = css_0; + constexpr double t101 = css_1; + constexpr double t102 = t101 * gamma_ss; + constexpr double t115 = css_2; + constexpr double t116 = gamma_ss * gamma_ss; + constexpr double t117 = t115 * t116; + constexpr double t128 = css_3; + constexpr double t129 = t116 * gamma_ss; + constexpr double t130 = t128 * t129; + constexpr double t139 = css_4; + constexpr double t140 = t116 * t116; + constexpr double t141 = t139 * t140; + constexpr double t164 = Fermi_D_cnst * Fermi_D_cnst; + constexpr double t165 = 0.1e1 / t164; + constexpr double t356 = cab_1; + constexpr double t357 = t356 * gamma_ab; + constexpr double t364 = cab_2; + constexpr double t365 = gamma_ab * gamma_ab; + constexpr double t366 = t364 * t365; + constexpr double t372 = cab_3; + constexpr double t373 = t365 * gamma_ab; + constexpr double t374 = t372 * t373; + constexpr double t380 = cab_4; + constexpr double t381 = t365 * t365; + constexpr double t382 = t380 * t381; + constexpr double t390 = dss_0; + constexpr double t396 = t395 * t395; + constexpr double t399 = t398 * t398; + constexpr double t400 = t396 * t399; + constexpr double t401 = 0.3e1 / 0.5e1 * t400; + constexpr double t407 = dss_1; + constexpr double t410 = dss_2; + constexpr double t417 = dss_3; + constexpr double t420 = dss_4; + constexpr double t424 = dss_5; + constexpr double t465 = dab_0; + constexpr double t466 = 0.6e1 / 0.5e1 * t400; + constexpr double t472 = dab_1; + constexpr double t474 = dab_2; + constexpr double t481 = dab_3; + constexpr double t483 = dab_4; + constexpr double t486 = dab_5; + constexpr double t604 = t101 * t116; + constexpr double t614 = t115 * t129; + constexpr double t623 = t128 * t140; + constexpr double t633 = t140 * gamma_ss; + constexpr double t634 = t139 * t633; + constexpr double t766 = t13 * t16; + constexpr double t853 = t356 * t365; + constexpr double t862 = t364 * t373; + constexpr double t871 = t372 * t381; + constexpr double t880 = t381 * gamma_ab; + constexpr double t881 = t380 * t880; + + + const double t3 = rho_a - rho_b; + const double t4 = rho_a + rho_b; + const double t5 = 0.1e1 / t4; + const double t6 = t3 * t5; + const double t7 = 0.1e1 + t6; + const double t8 = t7 <= zeta_tol; + const double t9 = rho_a <= dens_tol || t8; + const double t10 = piecewise_functor_3( t8, zeta_tol, t7 ); + const double t18 = safe_math::cbrt( t4 ); + const double t19 = 0.1e1 / t18; + const double t21 = t19 * t20; + const double t22 = safe_math::cbrt( zeta_tol ); + const double t23 = 0.1e1 / t22; + const double t24 = safe_math::cbrt( t7 ); + const double t26 = piecewise_functor_3( t8, t23, 0.1e1 / t24 ); + const double t28 = t17 * t21 * t26; + const double t30 = 0.1e1 + 0.53425e-1 * t28; + const double t31 = safe_math::sqrt( t28 ); + const double t34 = pow_3_2( t28 ); + const double t40 = t18 * t18; + const double t41 = 0.1e1 / t40; + const double t43 = t41 * t42; + const double t44 = t26 * t26; + const double t46 = t39 * t43 * t44; + const double t48 = 0.379785e1 * t31 + 0.8969e0 * t28 + 0.204775e0 * t34 + 0.123235e0 * t46; + const double t51 = 0.1e1 + 0.16081979498692535067e2 / t48; + const double t52 = safe_math::log( t51 ); + const double t54 = 0.621814e-1 * t30 * t52; + const double t56 = t22 * zeta_tol; + const double t58 = piecewise_functor_3( 0.2e1 <= zeta_tol, t56, 0.2e1 * t20 ); + const double t60 = piecewise_functor_3( 0.e0 <= zeta_tol, t56, 0.0 ); + const double t64 = 0.1e1 / ( 0.2e1 * t20 - 0.2e1 ); + const double t65 = ( t58 + t60 - 0.2e1 ) * t64; + const double t67 = 0.1e1 + 0.5137e-1 * t28; + const double t72 = 0.705945e1 * t31 + 0.1549425e1 * t28 + 0.420775e0 * t34 + 0.1562925e0 * t46; + const double t75 = 0.1e1 + 0.32163958997385070134e2 / t72; + const double t76 = safe_math::log( t75 ); + const double t80 = 0.1e1 + 0.278125e-1 * t28; + const double t85 = 0.51785e1 * t31 + 0.905775e0 * t28 + 0.1100325e0 * t34 + 0.1241775e0 * t46; + const double t88 = 0.1e1 + 0.29608749977793437516e2 / t85; + const double t89 = safe_math::log( t88 ); + const double t90 = t80 * t89; + const double t96 = -t54 + t65 * ( -0.310907e-1 * t67 * t76 + t54 - 0.19751673498613801407e-1 * t90 ) + 0.19751673498613801407e-1 * t65 * t90; + const double t99 = piecewise_functor_3( t9, 0.0, t10 * t96 / 0.2e1 ); + const double t103 = rho_a * rho_a; + const double t104 = safe_math::cbrt( rho_a ); + const double t105 = t104 * t104; + const double t107 = 0.1e1 / t105 / t103; + const double t108 = sigma_aa * t107; + const double t111 = gamma_ss * sigma_aa * t107 + 0.1e1; + const double t112 = 0.1e1 / t111; + const double t118 = sigma_aa * sigma_aa; + const double t119 = t103 * t103; + const double t120 = t119 * rho_a; + const double t122 = 0.1e1 / t104 / t120; + const double t124 = t111 * t111; + const double t125 = 0.1e1 / t124; + const double t131 = t118 * sigma_aa; + const double t132 = t119 * t119; + const double t133 = 0.1e1 / t132; + const double t135 = t124 * t111; + const double t136 = 0.1e1 / t135; + const double t142 = t118 * t118; + const double t143 = t132 * t103; + const double t145 = 0.1e1 / t105 / t143; + const double t147 = t124 * t124; + const double t148 = 0.1e1 / t147; + const double t151 = t117 * t118 * t122 * t125 + t130 * t131 * t133 * t136 + t141 * t142 * t145 * t148 + t102 * t108 * t112 + t100; + const double t152 = t99 * t151; + const double t153 = 0.1e1 / rho_a; + const double t154 = sigma_aa * t153; + const double t155 = 0.1e1 / tau_a; + const double t158 = 0.1e1 - t154 * t155 / 0.8e1; + const double t159 = tau_a * tau_a; + const double t160 = t103 * rho_a; + const double t162 = 0.1e1 / t104 / t160; + const double t168 = safe_math::exp( -0.4e1 * t159 * t162 * t165 ); + const double t169 = 0.1e1 - t168; + const double t170 = t158 * t169; + const double t171 = t152 * t170; + const double t173 = 0.1e1 - t6; + const double t174 = t173 <= zeta_tol; + const double t175 = rho_b <= dens_tol || t174; + const double t176 = piecewise_functor_3( t174, zeta_tol, t173 ); + const double t177 = safe_math::cbrt( t173 ); + const double t179 = piecewise_functor_3( t174, t23, 0.1e1 / t177 ); + const double t181 = t17 * t21 * t179; + const double t183 = 0.1e1 + 0.53425e-1 * t181; + const double t184 = safe_math::sqrt( t181 ); + const double t187 = pow_3_2( t181 ); + const double t189 = t179 * t179; + const double t191 = t39 * t43 * t189; + const double t193 = 0.379785e1 * t184 + 0.8969e0 * t181 + 0.204775e0 * t187 + 0.123235e0 * t191; + const double t196 = 0.1e1 + 0.16081979498692535067e2 / t193; + const double t197 = safe_math::log( t196 ); + const double t199 = 0.621814e-1 * t183 * t197; + const double t201 = 0.1e1 + 0.5137e-1 * t181; + const double t206 = 0.705945e1 * t184 + 0.1549425e1 * t181 + 0.420775e0 * t187 + 0.1562925e0 * t191; + const double t209 = 0.1e1 + 0.32163958997385070134e2 / t206; + const double t210 = safe_math::log( t209 ); + const double t214 = 0.1e1 + 0.278125e-1 * t181; + const double t219 = 0.51785e1 * t184 + 0.905775e0 * t181 + 0.1100325e0 * t187 + 0.1241775e0 * t191; + const double t222 = 0.1e1 + 0.29608749977793437516e2 / t219; + const double t223 = safe_math::log( t222 ); + const double t224 = t214 * t223; + const double t230 = -t199 + t65 * ( -0.310907e-1 * t201 * t210 + t199 - 0.19751673498613801407e-1 * t224 ) + 0.19751673498613801407e-1 * t65 * t224; + const double t233 = piecewise_functor_3( t175, 0.0, t176 * t230 / 0.2e1 ); + const double t234 = rho_b * rho_b; + const double t235 = safe_math::cbrt( rho_b ); + const double t236 = t235 * t235; + const double t238 = 0.1e1 / t236 / t234; + const double t239 = sigma_bb * t238; + const double t242 = gamma_ss * sigma_bb * t238 + 0.1e1; + const double t243 = 0.1e1 / t242; + const double t246 = sigma_bb * sigma_bb; + const double t247 = t234 * t234; + const double t248 = t247 * rho_b; + const double t250 = 0.1e1 / t235 / t248; + const double t252 = t242 * t242; + const double t253 = 0.1e1 / t252; + const double t256 = t246 * sigma_bb; + const double t257 = t247 * t247; + const double t258 = 0.1e1 / t257; + const double t260 = t252 * t242; + const double t261 = 0.1e1 / t260; + const double t264 = t246 * t246; + const double t265 = t257 * t234; + const double t267 = 0.1e1 / t236 / t265; + const double t269 = t252 * t252; + const double t270 = 0.1e1 / t269; + const double t273 = t117 * t246 * t250 * t253 + t130 * t256 * t258 * t261 + t141 * t264 * t267 * t270 + t102 * t239 * t243 + t100; + const double t274 = t233 * t273; + const double t275 = 0.1e1 / rho_b; + const double t276 = sigma_bb * t275; + const double t277 = 0.1e1 / tau_b; + const double t280 = 0.1e1 - t276 * t277 / 0.8e1; + const double t281 = tau_b * tau_b; + const double t282 = t234 * rho_b; + const double t284 = 0.1e1 / t235 / t282; + const double t288 = safe_math::exp( -0.4e1 * t281 * t284 * t165 ); + const double t289 = 0.1e1 - t288; + const double t290 = t280 * t289; + const double t291 = t274 * t290; + const double t293 = t14 * t16 * t19; + const double t295 = 0.1e1 + 0.53425e-1 * t293; + const double t296 = safe_math::sqrt( t293 ); + const double t299 = pow_3_2( t293 ); + const double t302 = t38 * t15 * t41; + const double t304 = 0.379785e1 * t296 + 0.8969e0 * t293 + 0.204775e0 * t299 + 0.123235e0 * t302; + const double t307 = 0.1e1 + 0.16081979498692535067e2 / t304; + const double t308 = safe_math::log( t307 ); + const double t310 = 0.621814e-1 * t295 * t308; + const double t311 = t3 * t3; + const double t312 = t311 * t311; + const double t313 = t4 * t4; + const double t314 = t313 * t313; + const double t315 = 0.1e1 / t314; + const double t316 = t312 * t315; + const double t317 = t24 * t7; + const double t318 = piecewise_functor_3( t8, t56, t317 ); + const double t319 = t177 * t173; + const double t320 = piecewise_functor_3( t174, t56, t319 ); + const double t321 = t318 + t320 - 0.2e1; + const double t322 = t321 * t64; + const double t324 = 0.1e1 + 0.5137e-1 * t293; + const double t329 = 0.705945e1 * t296 + 0.1549425e1 * t293 + 0.420775e0 * t299 + 0.1562925e0 * t302; + const double t332 = 0.1e1 + 0.32163958997385070134e2 / t329; + const double t333 = safe_math::log( t332 ); + const double t337 = 0.1e1 + 0.278125e-1 * t293; + const double t342 = 0.51785e1 * t296 + 0.905775e0 * t293 + 0.1100325e0 * t299 + 0.1241775e0 * t302; + const double t345 = 0.1e1 + 0.29608749977793437516e2 / t342; + const double t346 = safe_math::log( t345 ); + const double t347 = t337 * t346; + const double t349 = -0.310907e-1 * t324 * t333 + t310 - 0.19751673498613801407e-1 * t347; + const double t350 = t322 * t349; + const double t354 = -t310 + t316 * t350 + 0.19751673498613801407e-1 * t322 * t347 - t99 - t233; + const double t358 = t108 + t239; + const double t360 = gamma_ab * t358 + 0.1e1; + const double t361 = 0.1e1 / t360; + const double t367 = t358 * t358; + const double t368 = t360 * t360; + const double t369 = 0.1e1 / t368; + const double t375 = t367 * t358; + const double t376 = t368 * t360; + const double t377 = 0.1e1 / t376; + const double t383 = t367 * t367; + const double t384 = t368 * t368; + const double t385 = 0.1e1 / t384; + const double t388 = t357 * t358 * t361 + t366 * t367 * t369 + t374 * t375 * t377 + t382 * t383 * t385 + cab_0; + const double t389 = t354 * t388; + const double t392 = 0.1e1 / t105 / rho_a; + const double t394 = 0.2e1 * tau_a * t392; + const double t404 = 0.1e1 + alpha_ss * ( t108 + t394 - t401 ); + const double t408 = t407 * sigma_aa; + const double t411 = t394 - t401; + const double t413 = t408 * t107 + t410 * t411; + const double t414 = t404 * t404; + const double t415 = 0.1e1 / t414; + const double t418 = t417 * t118; + const double t421 = t420 * sigma_aa; + const double t425 = t411 * t411; + const double t427 = t421 * t107 * t411 + t418 * t122 + t424 * t425; + const double t428 = t414 * t404; + const double t429 = 0.1e1 / t428; + const double t431 = t390 / t404 + t413 * t415 + t427 * t429; + const double t432 = t99 * t431; + const double t433 = t432 * t158; + const double t435 = 0.1e1 / t236 / rho_b; + const double t437 = 0.2e1 * tau_b * t435; + const double t440 = 0.1e1 + alpha_ss * ( t239 + t437 - t401 ); + const double t443 = t407 * sigma_bb; + const double t445 = t437 - t401; + const double t447 = t443 * t238 + t410 * t445; + const double t448 = t440 * t440; + const double t449 = 0.1e1 / t448; + const double t451 = t417 * t246; + const double t453 = t420 * sigma_bb; + const double t456 = t445 * t445; + const double t458 = t453 * t238 * t445 + t451 * t250 + t424 * t456; + const double t459 = t448 * t440; + const double t460 = 0.1e1 / t459; + const double t462 = t390 / t440 + t447 * t449 + t458 * t460; + const double t463 = t233 * t462; + const double t464 = t463 * t280; + const double t469 = 0.1e1 + alpha_ab * ( t108 + t239 + t394 + t437 - t466 ); + const double t475 = t394 + t437 - t466; + const double t477 = t472 * t358 + t474 * t475; + const double t478 = t469 * t469; + const double t479 = 0.1e1 / t478; + const double t484 = t483 * t358; + const double t487 = t475 * t475; + const double t489 = t481 * t367 + t484 * t475 + t486 * t487; + const double t490 = t478 * t469; + const double t491 = 0.1e1 / t490; + const double t493 = t465 / t469 + t477 * t479 + t489 * t491; + const double t494 = t354 * t493; + const double t495 = 0.1e1 / t313; + const double t496 = t3 * t495; + const double t497 = t5 - t496; + const double t498 = piecewise_functor_3( t8, 0.0, t497 ); + const double t501 = 0.1e1 / t18 / t4; + const double t502 = t501 * t20; + const double t504 = t17 * t502 * t26; + const double t505 = 0.17808333333333333333e-1 * t504; + const double t506 = 0.1e1 / t317; + const double t509 = piecewise_functor_3( t8, 0.0, -t506 * t497 / 0.3e1 ); + const double t511 = t17 * t21 * t509; + const double t513 = -t505 + 0.53425e-1 * t511; + const double t515 = 0.621814e-1 * t513 * t52; + const double t516 = t48 * t48; + const double t517 = 0.1e1 / t516; + const double t518 = t30 * t517; + const double t519 = 0.1e1 / t31; + const double t520 = t504 / 0.3e1; + const double t521 = -t520 + t511; + const double t522 = t519 * t521; + const double t524 = 0.29896666666666666667e0 * t504; + const double t526 = safe_math::sqrt( t28 ); + const double t527 = t526 * t521; + const double t530 = 0.1e1 / t40 / t4; + const double t531 = t530 * t42; + const double t533 = t39 * t531 * t44; + const double t534 = 0.82156666666666666667e-1 * t533; + const double t535 = t26 * t509; + const double t537 = t39 * t43 * t535; + const double t539 = 0.1898925e1 * t522 - t524 + 0.8969e0 * t511 + 0.3071625e0 * t527 - t534 + 0.24647e0 * t537; + const double t540 = 0.1e1 / t51; + const double t541 = t539 * t540; + const double t543 = 0.1e1 * t518 * t541; + const double t544 = 0.17123333333333333333e-1 * t504; + const double t546 = -t544 + 0.5137e-1 * t511; + const double t549 = t72 * t72; + const double t550 = 0.1e1 / t549; + const double t551 = t67 * t550; + const double t553 = 0.516475e0 * t504; + const double t556 = 0.104195e0 * t533; + const double t558 = 0.3529725e1 * t522 - t553 + 0.1549425e1 * t511 + 0.6311625e0 * t527 - t556 + 0.312585e0 * t537; + const double t559 = 0.1e1 / t75; + const double t560 = t558 * t559; + const double t563 = 0.92708333333333333333e-2 * t504; + const double t565 = -t563 + 0.278125e-1 * t511; + const double t566 = t565 * t89; + const double t568 = t85 * t85; + const double t569 = 0.1e1 / t568; + const double t570 = t80 * t569; + const double t572 = 0.301925e0 * t504; + const double t575 = 0.82785e-1 * t533; + const double t577 = 0.258925e1 * t522 - t572 + 0.905775e0 * t511 + 0.16504875e0 * t527 - t575 + 0.248355e0 * t537; + const double t578 = 0.1e1 / t88; + const double t579 = t577 * t578; + const double t586 = t65 * t80; + const double t588 = t569 * t577 * t578; + const double t591 = -t515 + t543 + t65 * ( -0.310907e-1 * t546 * t76 + 0.1e1 * t551 * t560 + t515 - t543 - 0.19751673498613801407e-1 * t566 + 0.5848223622634646207e0 * t570 * t579 ) + 0.19751673498613801407e-1 * t65 * t566 - 0.5848223622634646207e0 * t586 * t588; + const double t595 = piecewise_functor_3( t9, 0.0, t10 * t591 / 0.2e1 + t498 * t96 / 0.2e1 ); + const double t596 = t595 * t151; + const double t597 = t596 * t170; + const double t599 = 0.1e1 / t105 / t160; + const double t600 = sigma_aa * t599; + const double t605 = t119 * t103; + const double t607 = 0.1e1 / t104 / t605; + const double t609 = t118 * t607 * t125; + const double t615 = t132 * rho_a; + const double t616 = 0.1e1 / t615; + const double t618 = t131 * t616 * t136; + const double t624 = t132 * t160; + const double t626 = 0.1e1 / t105 / t624; + const double t628 = t142 * t626 * t148; + const double t635 = t142 * sigma_aa; + const double t636 = t132 * t605; + const double t638 = 0.1e1 / t104 / t636; + const double t641 = 0.1e1 / t147 / t111; + const double t645 = -0.8e1 / 0.3e1 * t102 * t600 * t112 + 0.8e1 / 0.3e1 * t604 * t609 - 0.16e2 / 0.3e1 * t117 * t609 + 0.16e2 / 0.3e1 * t614 * t618 - 0.8e1 * t130 * t618 + 0.8e1 * t623 * t628 - 0.32e2 / 0.3e1 * t141 * t628 + 0.32e2 / 0.3e1 * t634 * t635 * t638 * t641; + const double t646 = t99 * t645; + const double t647 = t646 * t170; + const double t648 = t152 * sigma_aa; + const double t649 = 0.1e1 / t103; + const double t650 = t649 * t155; + const double t651 = t650 * t169; + const double t652 = t648 * t651; + const double t653 = t652 / 0.8e1; + const double t654 = t152 * t158; + const double t656 = 0.1e1 / t104 / t119; + const double t658 = t165 * t168; + const double t659 = t159 * t656 * t658; + const double t660 = t654 * t659; + const double t661 = 0.4e2 / 0.3e1 * t660; + const double t662 = -t497; + const double t663 = piecewise_functor_3( t174, 0.0, t662 ); + const double t666 = t17 * t502 * t179; + const double t667 = 0.17808333333333333333e-1 * t666; + const double t668 = 0.1e1 / t319; + const double t671 = piecewise_functor_3( t174, 0.0, -t668 * t662 / 0.3e1 ); + const double t673 = t17 * t21 * t671; + const double t675 = -t667 + 0.53425e-1 * t673; + const double t677 = 0.621814e-1 * t675 * t197; + const double t678 = t193 * t193; + const double t679 = 0.1e1 / t678; + const double t680 = t183 * t679; + const double t681 = 0.1e1 / t184; + const double t682 = t666 / 0.3e1; + const double t683 = -t682 + t673; + const double t684 = t681 * t683; + const double t686 = 0.29896666666666666667e0 * t666; + const double t688 = safe_math::sqrt( t181 ); + const double t689 = t688 * t683; + const double t692 = t39 * t531 * t189; + const double t693 = 0.82156666666666666667e-1 * t692; + const double t694 = t179 * t671; + const double t696 = t39 * t43 * t694; + const double t698 = 0.1898925e1 * t684 - t686 + 0.8969e0 * t673 + 0.3071625e0 * t689 - t693 + 0.24647e0 * t696; + const double t699 = 0.1e1 / t196; + const double t700 = t698 * t699; + const double t702 = 0.1e1 * t680 * t700; + const double t703 = 0.17123333333333333333e-1 * t666; + const double t705 = -t703 + 0.5137e-1 * t673; + const double t708 = t206 * t206; + const double t709 = 0.1e1 / t708; + const double t710 = t201 * t709; + const double t712 = 0.516475e0 * t666; + const double t715 = 0.104195e0 * t692; + const double t717 = 0.3529725e1 * t684 - t712 + 0.1549425e1 * t673 + 0.6311625e0 * t689 - t715 + 0.312585e0 * t696; + const double t718 = 0.1e1 / t209; + const double t719 = t717 * t718; + const double t722 = 0.92708333333333333333e-2 * t666; + const double t724 = -t722 + 0.278125e-1 * t673; + const double t725 = t724 * t223; + const double t727 = t219 * t219; + const double t728 = 0.1e1 / t727; + const double t729 = t214 * t728; + const double t731 = 0.301925e0 * t666; + const double t734 = 0.82785e-1 * t692; + const double t736 = 0.258925e1 * t684 - t731 + 0.905775e0 * t673 + 0.16504875e0 * t689 - t734 + 0.248355e0 * t696; + const double t737 = 0.1e1 / t222; + const double t738 = t736 * t737; + const double t745 = t65 * t214; + const double t747 = t728 * t736 * t737; + const double t750 = -t677 + t702 + t65 * ( -0.310907e-1 * t705 * t210 + 0.1e1 * t710 * t719 + t677 - t702 - 0.19751673498613801407e-1 * t725 + 0.5848223622634646207e0 * t729 * t738 ) + 0.19751673498613801407e-1 * t65 * t725 - 0.5848223622634646207e0 * t745 * t747; + const double t754 = piecewise_functor_3( t175, 0.0, t176 * t750 / 0.2e1 + t663 * t230 / 0.2e1 ); + const double t755 = t754 * t273; + const double t756 = t755 * t290; + const double t757 = t16 * t501; + const double t760 = 0.11073470983333333333e-2 * t14 * t757 * t308; + const double t761 = t304 * t304; + const double t762 = 0.1e1 / t761; + const double t763 = t295 * t762; + const double t765 = 0.1e1 / t296 * t11; + const double t767 = t766 * t501; + const double t768 = t765 * t767; + const double t770 = t14 * t757; + const double t772 = safe_math::sqrt( t293 ); + const double t773 = t772 * t11; + const double t774 = t773 * t767; + const double t777 = t38 * t15 * t530; + const double t779 = -0.632975e0 * t768 - 0.29896666666666666667e0 * t770 - 0.1023875e0 * t774 - 0.82156666666666666667e-1 * t777; + const double t780 = 0.1e1 / t307; + const double t781 = t779 * t780; + const double t783 = 0.1e1 * t763 * t781; + const double t784 = t311 * t3; + const double t785 = t784 * t315; + const double t787 = 0.4e1 * t785 * t350; + const double t788 = t314 * t4; + const double t789 = 0.1e1 / t788; + const double t790 = t312 * t789; + const double t792 = 0.4e1 * t790 * t350; + const double t795 = piecewise_functor_3( t8, 0.0, 0.4e1 / 0.3e1 * t24 * t497 ); + const double t798 = piecewise_functor_3( t174, 0.0, 0.4e1 / 0.3e1 * t177 * t662 ); + const double t800 = ( t795 + t798 ) * t64; + const double t801 = t800 * t349; + const double t806 = t329 * t329; + const double t807 = 0.1e1 / t806; + const double t808 = t324 * t807; + const double t813 = -0.1176575e1 * t768 - 0.516475e0 * t770 - 0.2103875e0 * t774 - 0.104195e0 * t777; + const double t814 = 0.1e1 / t332; + const double t815 = t813 * t814; + const double t821 = t342 * t342; + const double t822 = 0.1e1 / t821; + const double t823 = t337 * t822; + const double t828 = -0.86308333333333333334e0 * t768 - 0.301925e0 * t770 - 0.5501625e-1 * t774 - 0.82785e-1 * t777; + const double t829 = 0.1e1 / t345; + const double t830 = t828 * t829; + const double t833 = 0.53237641966666666666e-3 * t14 * t757 * t333 + 0.1e1 * t808 * t815 - t760 - t783 + 0.18311447306006545054e-3 * t14 * t757 * t346 + 0.5848223622634646207e0 * t823 * t830; + const double t834 = t322 * t833; + const double t835 = t316 * t834; + const double t838 = t322 * t11; + const double t840 = t766 * t501 * t346; + const double t842 = 0.18311447306006545054e-3 * t838 * t840; + const double t843 = t322 * t337; + const double t845 = t822 * t828 * t829; + const double t847 = 0.5848223622634646207e0 * t843 * t845; + const double t848 = t760 + t783 + t787 - t792 + t316 * t801 + t835 + 0.19751673498613801407e-1 * t800 * t347 - t842 - t847 - t595 - t754; + const double t849 = t848 * t388; + const double t854 = t853 * t358; + const double t855 = t369 * sigma_aa; + const double t856 = t855 * t599; + const double t859 = t366 * t358; + const double t863 = t862 * t367; + const double t864 = t377 * sigma_aa; + const double t865 = t864 * t599; + const double t868 = t374 * t367; + const double t872 = t871 * t375; + const double t873 = t385 * sigma_aa; + const double t874 = t873 * t599; + const double t877 = t382 * t375; + const double t882 = t881 * t383; + const double t884 = 0.1e1 / t384 / t360; + const double t885 = t884 * sigma_aa; + const double t889 = -0.8e1 / 0.3e1 * t357 * t600 * t361 + 0.8e1 / 0.3e1 * t854 * t856 - 0.16e2 / 0.3e1 * t859 * t856 + 0.16e2 / 0.3e1 * t863 * t865 - 0.8e1 * t868 * t865 + 0.8e1 * t872 * t874 - 0.32e2 / 0.3e1 * t877 * t874 + 0.32e2 / 0.3e1 * t882 * t885 * t599; + const double t890 = t354 * t889; + const double t891 = t595 * t431; + const double t892 = t891 * t158; + const double t893 = t390 * t415; + const double t895 = tau_a * t107; + const double t897 = -0.8e1 / 0.3e1 * t600 - 0.1e2 / 0.3e1 * t895; + const double t898 = alpha_ss * t897; + const double t902 = t410 * tau_a; + const double t905 = -0.8e1 / 0.3e1 * t408 * t599 - 0.1e2 / 0.3e1 * t902 * t107; + const double t907 = t413 * t429; + const double t915 = t122 * tau_a; + const double t918 = t424 * t411; + const double t921 = -0.16e2 / 0.3e1 * t418 * t607 - 0.8e1 / 0.3e1 * t421 * t599 * t411 - 0.1e2 / 0.3e1 * t421 * t915 - 0.2e2 / 0.3e1 * t918 * t895; + const double t923 = t414 * t414; + const double t924 = 0.1e1 / t923; + const double t925 = t427 * t924; + const double t928 = t905 * t415 + t921 * t429 - t893 * t898 - 0.2e1 * t907 * t898 - 0.3e1 * t925 * t898; + const double t929 = t99 * t928; + const double t930 = t929 * t158; + const double t931 = sigma_aa * t649; + const double t932 = t931 * t155; + const double t933 = t432 * t932; + const double t934 = t933 / 0.8e1; + const double t935 = t754 * t462; + const double t936 = t935 * t280; + const double t937 = t848 * t493; + const double t938 = t465 * t479; + const double t939 = alpha_ab * t897; + const double t941 = t472 * sigma_aa; + const double t944 = t474 * tau_a; + const double t947 = -0.8e1 / 0.3e1 * t941 * t599 - 0.1e2 / 0.3e1 * t944 * t107; + const double t949 = t477 * t491; + const double t952 = t481 * t358; + const double t955 = t483 * sigma_aa; + const double t961 = t486 * t475; + const double t964 = -0.16e2 / 0.3e1 * t952 * t600 - 0.8e1 / 0.3e1 * t955 * t599 * t475 - 0.1e2 / 0.3e1 * t484 * t895 - 0.2e2 / 0.3e1 * t961 * t895; + const double t966 = t478 * t478; + const double t967 = 0.1e1 / t966; + const double t968 = t489 * t967; + const double t971 = t947 * t479 + t964 * t491 - t938 * t939 - 0.2e1 * t949 * t939 - 0.3e1 * t968 * t939; + const double t972 = t354 * t971; + const double t973 = t597 + t647 + t653 - t661 + t756 + t849 + t890 + t892 + t930 + t934 + t936 + t937 + t972; + const double t975 = -t5 - t496; + const double t976 = piecewise_functor_3( t8, 0.0, t975 ); + const double t980 = piecewise_functor_3( t8, 0.0, -t506 * t975 / 0.3e1 ); + const double t982 = t17 * t21 * t980; + const double t984 = -t505 + 0.53425e-1 * t982; + const double t986 = 0.621814e-1 * t984 * t52; + const double t987 = -t520 + t982; + const double t988 = t519 * t987; + const double t991 = t526 * t987; + const double t993 = t26 * t980; + const double t995 = t39 * t43 * t993; + const double t997 = 0.1898925e1 * t988 - t524 + 0.8969e0 * t982 + 0.3071625e0 * t991 - t534 + 0.24647e0 * t995; + const double t998 = t997 * t540; + const double t1000 = 0.1e1 * t518 * t998; + const double t1002 = -t544 + 0.5137e-1 * t982; + const double t1009 = 0.3529725e1 * t988 - t553 + 0.1549425e1 * t982 + 0.6311625e0 * t991 - t556 + 0.312585e0 * t995; + const double t1010 = t1009 * t559; + const double t1014 = -t563 + 0.278125e-1 * t982; + const double t1015 = t1014 * t89; + const double t1021 = 0.258925e1 * t988 - t572 + 0.905775e0 * t982 + 0.16504875e0 * t991 - t575 + 0.248355e0 * t995; + const double t1022 = t1021 * t578; + const double t1030 = t569 * t1021 * t578; + const double t1033 = -t986 + t1000 + t65 * ( -0.310907e-1 * t1002 * t76 + 0.1e1 * t551 * t1010 + t986 - t1000 - 0.19751673498613801407e-1 * t1015 + 0.5848223622634646207e0 * t570 * t1022 ) + 0.19751673498613801407e-1 * t65 * t1015 - 0.5848223622634646207e0 * t586 * t1030; + const double t1037 = piecewise_functor_3( t9, 0.0, t10 * t1033 / 0.2e1 + t976 * t96 / 0.2e1 ); + const double t1038 = t1037 * t151; + const double t1039 = t1038 * t170; + const double t1040 = -t975; + const double t1041 = piecewise_functor_3( t174, 0.0, t1040 ); + const double t1045 = piecewise_functor_3( t174, 0.0, -t668 * t1040 / 0.3e1 ); + const double t1047 = t17 * t21 * t1045; + const double t1049 = -t667 + 0.53425e-1 * t1047; + const double t1051 = 0.621814e-1 * t1049 * t197; + const double t1052 = -t682 + t1047; + const double t1053 = t681 * t1052; + const double t1056 = t688 * t1052; + const double t1058 = t179 * t1045; + const double t1060 = t39 * t43 * t1058; + const double t1062 = 0.1898925e1 * t1053 - t686 + 0.8969e0 * t1047 + 0.3071625e0 * t1056 - t693 + 0.24647e0 * t1060; + const double t1063 = t1062 * t699; + const double t1065 = 0.1e1 * t680 * t1063; + const double t1067 = -t703 + 0.5137e-1 * t1047; + const double t1074 = 0.3529725e1 * t1053 - t712 + 0.1549425e1 * t1047 + 0.6311625e0 * t1056 - t715 + 0.312585e0 * t1060; + const double t1075 = t1074 * t718; + const double t1079 = -t722 + 0.278125e-1 * t1047; + const double t1080 = t1079 * t223; + const double t1086 = 0.258925e1 * t1053 - t731 + 0.905775e0 * t1047 + 0.16504875e0 * t1056 - t734 + 0.248355e0 * t1060; + const double t1087 = t1086 * t737; + const double t1095 = t728 * t1086 * t737; + const double t1098 = -t1051 + t1065 + t65 * ( -0.310907e-1 * t1067 * t210 + 0.1e1 * t710 * t1075 + t1051 - t1065 - 0.19751673498613801407e-1 * t1080 + 0.5848223622634646207e0 * t729 * t1087 ) + 0.19751673498613801407e-1 * t65 * t1080 - 0.5848223622634646207e0 * t745 * t1095; + const double t1102 = piecewise_functor_3( t175, 0.0, t1041 * t230 / 0.2e1 + t176 * t1098 / 0.2e1 ); + const double t1103 = t1102 * t273; + const double t1104 = t1103 * t290; + const double t1106 = 0.1e1 / t236 / t282; + const double t1107 = sigma_bb * t1106; + const double t1111 = t247 * t234; + const double t1113 = 0.1e1 / t235 / t1111; + const double t1115 = t246 * t1113 * t253; + const double t1120 = t257 * rho_b; + const double t1121 = 0.1e1 / t1120; + const double t1123 = t256 * t1121 * t261; + const double t1128 = t257 * t282; + const double t1130 = 0.1e1 / t236 / t1128; + const double t1132 = t264 * t1130 * t270; + const double t1137 = t264 * sigma_bb; + const double t1138 = t257 * t1111; + const double t1140 = 0.1e1 / t235 / t1138; + const double t1143 = 0.1e1 / t269 / t242; + const double t1147 = -0.8e1 / 0.3e1 * t102 * t1107 * t243 + 0.8e1 / 0.3e1 * t604 * t1115 - 0.16e2 / 0.3e1 * t117 * t1115 + 0.16e2 / 0.3e1 * t614 * t1123 - 0.8e1 * t130 * t1123 + 0.8e1 * t623 * t1132 - 0.32e2 / 0.3e1 * t141 * t1132 + 0.32e2 / 0.3e1 * t634 * t1137 * t1140 * t1143; + const double t1148 = t233 * t1147; + const double t1149 = t1148 * t290; + const double t1150 = t274 * sigma_bb; + const double t1151 = 0.1e1 / t234; + const double t1152 = t1151 * t277; + const double t1153 = t1152 * t289; + const double t1154 = t1150 * t1153; + const double t1155 = t1154 / 0.8e1; + const double t1156 = t274 * t280; + const double t1158 = 0.1e1 / t235 / t247; + const double t1160 = t165 * t288; + const double t1161 = t281 * t1158 * t1160; + const double t1162 = t1156 * t1161; + const double t1163 = 0.4e2 / 0.3e1 * t1162; + const double t1166 = piecewise_functor_3( t8, 0.0, 0.4e1 / 0.3e1 * t24 * t975 ); + const double t1169 = piecewise_functor_3( t174, 0.0, 0.4e1 / 0.3e1 * t177 * t1040 ); + const double t1171 = ( t1166 + t1169 ) * t64; + const double t1172 = t1171 * t349; + const double t1176 = t760 + t783 - t787 - t792 + t316 * t1172 + t835 + 0.19751673498613801407e-1 * t1171 * t347 - t842 - t847 - t1037 - t1102; + const double t1177 = t1176 * t388; + const double t1181 = t369 * sigma_bb; + const double t1182 = t1181 * t1106; + const double t1187 = t377 * sigma_bb; + const double t1188 = t1187 * t1106; + const double t1193 = t385 * sigma_bb; + const double t1194 = t1193 * t1106; + const double t1199 = t884 * sigma_bb; + const double t1203 = -0.8e1 / 0.3e1 * t357 * t1107 * t361 + 0.8e1 / 0.3e1 * t854 * t1182 - 0.16e2 / 0.3e1 * t859 * t1182 + 0.16e2 / 0.3e1 * t863 * t1188 - 0.8e1 * t868 * t1188 + 0.8e1 * t872 * t1194 - 0.32e2 / 0.3e1 * t877 * t1194 + 0.32e2 / 0.3e1 * t882 * t1199 * t1106; + const double t1204 = t354 * t1203; + const double t1205 = t1037 * t431; + const double t1206 = t1205 * t158; + const double t1207 = t1102 * t462; + const double t1208 = t1207 * t280; + const double t1209 = t390 * t449; + const double t1211 = tau_b * t238; + const double t1213 = -0.8e1 / 0.3e1 * t1107 - 0.1e2 / 0.3e1 * t1211; + const double t1214 = alpha_ss * t1213; + const double t1218 = t410 * tau_b; + const double t1221 = -0.8e1 / 0.3e1 * t443 * t1106 - 0.1e2 / 0.3e1 * t1218 * t238; + const double t1223 = t447 * t460; + const double t1231 = t250 * tau_b; + const double t1234 = t424 * t445; + const double t1237 = -0.16e2 / 0.3e1 * t451 * t1113 - 0.8e1 / 0.3e1 * t453 * t1106 * t445 - 0.1e2 / 0.3e1 * t453 * t1231 - 0.2e2 / 0.3e1 * t1234 * t1211; + const double t1239 = t448 * t448; + const double t1240 = 0.1e1 / t1239; + const double t1241 = t458 * t1240; + const double t1244 = -t1209 * t1214 - 0.2e1 * t1223 * t1214 - 0.3e1 * t1241 * t1214 + t1221 * t449 + t1237 * t460; + const double t1245 = t233 * t1244; + const double t1246 = t1245 * t280; + const double t1247 = sigma_bb * t1151; + const double t1248 = t1247 * t277; + const double t1249 = t463 * t1248; + const double t1250 = t1249 / 0.8e1; + const double t1251 = t1176 * t493; + const double t1252 = alpha_ab * t1213; + const double t1254 = t472 * sigma_bb; + const double t1257 = t474 * tau_b; + const double t1260 = -0.8e1 / 0.3e1 * t1254 * t1106 - 0.1e2 / 0.3e1 * t1257 * t238; + const double t1266 = t483 * sigma_bb; + const double t1274 = -0.16e2 / 0.3e1 * t952 * t1107 - 0.8e1 / 0.3e1 * t1266 * t1106 * t475 - 0.1e2 / 0.3e1 * t484 * t1211 - 0.2e2 / 0.3e1 * t961 * t1211; + const double t1278 = -t938 * t1252 - 0.2e1 * t949 * t1252 - 0.3e1 * t968 * t1252 + t1260 * t479 + t1274 * t491; + const double t1279 = t354 * t1278; + const double t1280 = t1039 + t1104 + t1149 + t1155 - t1163 + t1177 + t1204 + t1206 + t1208 + t1246 + t1250 + t1251 + t1279; + const double t1285 = sigma_aa * t122 * t125; + const double t1290 = t118 * t133 * t136; + const double t1296 = t131 * t145 * t148; + const double t1301 = t132 * t120; + const double t1303 = 0.1e1 / t104 / t1301; + const double t1308 = -0.4e1 * t634 * t142 * t1303 * t641 + t102 * t107 * t112 + 0.2e1 * t117 * t1285 - t604 * t1285 + 0.3e1 * t130 * t1290 - 0.2e1 * t614 * t1290 + 0.4e1 * t141 * t1296 - 0.3e1 * t623 * t1296; + const double t1309 = t99 * t1308; + const double t1310 = t1309 * t170; + const double t1311 = t153 * t155; + const double t1312 = t1311 * t169; + const double t1314 = t152 * t1312 / 0.8e1; + const double t1317 = t358 * t369; + const double t1318 = t1317 * t107; + const double t1322 = t367 * t377; + const double t1323 = t1322 * t107; + const double t1328 = t375 * t385; + const double t1329 = t1328 * t107; + const double t1334 = t383 * t884; + const double t1338 = -0.4e1 * t881 * t1334 * t107 + t357 * t107 * t361 + 0.2e1 * t366 * t1318 - t853 * t1318 + 0.3e1 * t374 * t1323 - 0.2e1 * t862 * t1323 + 0.4e1 * t382 * t1329 - 0.3e1 * t871 * t1329; + const double t1339 = t354 * t1338; + const double t1340 = alpha_ss * t107; + const double t1341 = t893 * t1340; + const double t1342 = t407 * t107; + const double t1344 = t907 * t1340; + const double t1346 = t417 * sigma_aa; + const double t1351 = t420 * t107 * t411 + 0.2e1 * t1346 * t122; + const double t1353 = t925 * t1340; + const double t1355 = t1342 * t415 + t1351 * t429 - t1341 - 0.2e1 * t1344 - 0.3e1 * t1353; + const double t1356 = t99 * t1355; + const double t1357 = t1356 * t158; + const double t1359 = t432 * t1311 / 0.8e1; + const double t1360 = alpha_ab * t107; + const double t1361 = t938 * t1360; + const double t1362 = t472 * t107; + const double t1364 = t949 * t1360; + const double t1368 = t483 * t107; + const double t1370 = 0.2e1 * t952 * t107 + t1368 * t475; + const double t1372 = t968 * t1360; + const double t1374 = t1362 * t479 + t1370 * t491 - t1361 - 0.2e1 * t1364 - 0.3e1 * t1372; + const double t1375 = t354 * t1374; + const double t1380 = sigma_bb * t250 * t253; + const double t1385 = t246 * t258 * t261; + const double t1391 = t256 * t267 * t270; + const double t1396 = t257 * t248; + const double t1398 = 0.1e1 / t235 / t1396; + const double t1403 = -0.4e1 * t634 * t264 * t1398 * t1143 + t102 * t238 * t243 + 0.2e1 * t117 * t1380 + 0.3e1 * t130 * t1385 - t604 * t1380 - 0.2e1 * t614 * t1385 + 0.4e1 * t141 * t1391 - 0.3e1 * t623 * t1391; + const double t1404 = t233 * t1403; + const double t1405 = t1404 * t290; + const double t1406 = t275 * t277; + const double t1407 = t1406 * t289; + const double t1409 = t274 * t1407 / 0.8e1; + const double t1412 = t1317 * t238; + const double t1416 = t1322 * t238; + const double t1421 = t1328 * t238; + const double t1429 = -0.4e1 * t881 * t1334 * t238 + t357 * t238 * t361 + 0.2e1 * t366 * t1412 - t853 * t1412 + 0.3e1 * t374 * t1416 - 0.2e1 * t862 * t1416 + 0.4e1 * t382 * t1421 - 0.3e1 * t871 * t1421; + const double t1430 = t354 * t1429; + const double t1431 = alpha_ss * t238; + const double t1432 = t1209 * t1431; + const double t1433 = t407 * t238; + const double t1435 = t1223 * t1431; + const double t1437 = t417 * sigma_bb; + const double t1442 = t420 * t238 * t445 + 0.2e1 * t1437 * t250; + const double t1444 = t1241 * t1431; + const double t1446 = t1433 * t449 + t1442 * t460 - t1432 - 0.2e1 * t1435 - 0.3e1 * t1444; + const double t1447 = t233 * t1446; + const double t1448 = t1447 * t280; + const double t1450 = t463 * t1406 / 0.8e1; + const double t1451 = alpha_ab * t238; + const double t1452 = t938 * t1451; + const double t1453 = t472 * t238; + const double t1455 = t949 * t1451; + const double t1459 = t483 * t238; + const double t1461 = t1459 * t475 + 0.2e1 * t952 * t238; + const double t1463 = t968 * t1451; + const double t1465 = t1453 * t479 + t1461 * t491 - t1452 - 0.2e1 * t1455 - 0.3e1 * t1463; + const double t1466 = t354 * t1465; + const double t1468 = 0.1e1 / t159; + const double t1469 = t153 * t1468; + const double t1470 = t1469 * t169; + const double t1472 = t648 * t1470 / 0.8e1; + const double t1474 = tau_a * t162 * t658; + const double t1476 = 0.8e1 * t654 * t1474; + const double t1477 = alpha_ss * t392; + const double t1480 = t410 * t392; + const double t1489 = 0.4e1 * t918 * t392 + 0.2e1 * t421 * t656; + const double t1493 = -0.2e1 * t893 * t1477 - 0.4e1 * t907 * t1477 - 0.6e1 * t925 * t1477 + 0.2e1 * t1480 * t415 + t1489 * t429; + const double t1494 = t99 * t1493; + const double t1495 = t1494 * t158; + const double t1496 = t154 * t1468; + const double t1498 = t432 * t1496 / 0.8e1; + const double t1499 = alpha_ab * t392; + const double t1502 = t474 * t392; + const double t1511 = 0.2e1 * t484 * t392 + 0.4e1 * t961 * t392; + const double t1515 = -0.2e1 * t938 * t1499 - 0.4e1 * t949 * t1499 - 0.6e1 * t968 * t1499 + 0.2e1 * t1502 * t479 + t1511 * t491; + const double t1516 = t354 * t1515; + const double t1518 = 0.1e1 / t281; + const double t1519 = t275 * t1518; + const double t1520 = t1519 * t289; + const double t1522 = t1150 * t1520 / 0.8e1; + const double t1524 = tau_b * t284 * t1160; + const double t1526 = 0.8e1 * t1156 * t1524; + const double t1527 = alpha_ss * t435; + const double t1530 = t410 * t435; + const double t1539 = 0.2e1 * t453 * t1158 + 0.4e1 * t1234 * t435; + const double t1543 = -0.2e1 * t1209 * t1527 - 0.4e1 * t1223 * t1527 - 0.6e1 * t1241 * t1527 + 0.2e1 * t1530 * t449 + t1539 * t460; + const double t1544 = t233 * t1543; + const double t1545 = t1544 * t280; + const double t1546 = t276 * t1518; + const double t1548 = t463 * t1546 / 0.8e1; + const double t1549 = alpha_ab * t435; + const double t1552 = t474 * t435; + const double t1561 = 0.2e1 * t484 * t435 + 0.4e1 * t961 * t435; + const double t1565 = -0.2e1 * t938 * t1549 - 0.4e1 * t949 * t1549 - 0.6e1 * t968 * t1549 + 0.2e1 * t1552 * t479 + t1561 * t491; + const double t1566 = t354 * t1565; + + + eps = t171 + t291 + t389 + t433 + t464 + t494; + vrho_a = t4 * t973 + t171 + t291 + t389 + t433 + t464 + t494; + vrho_b = t4 * t1280 + t171 + t291 + t389 + t433 + t464 + t494; + vsigma_aa = t4 * ( t1310 - t1314 + t1339 + t1357 - t1359 + t1375 ); + vsigma_ab = 0.e0; + vsigma_bb = t4 * ( t1405 - t1409 + t1430 + t1448 - t1450 + t1466 ); + vlapl_a = 0.e0; + vlapl_b = 0.e0; + vtau_a = t4 * ( t1472 + t1476 + t1495 + t1498 + t1516 ); + vtau_b = t4 * ( t1522 + t1526 + t1545 + t1548 + t1566 ); + + } + + +}; + +struct BuiltinM062X_C : detail::BuiltinKernelImpl< BuiltinM062X_C > { + + BuiltinM062X_C( Spin p ) : + detail::BuiltinKernelImpl< BuiltinM062X_C >(p) { } + + virtual ~BuiltinM062X_C() = default; + +}; + + + +} // namespace ExchCXX \ No newline at end of file diff --git a/include/exchcxx/impl/builtin/kernels/m06_2x_x.hpp b/include/exchcxx/impl/builtin/kernels/m06_2x_x.hpp new file mode 100644 index 0000000..177bdb5 --- /dev/null +++ b/include/exchcxx/impl/builtin/kernels/m06_2x_x.hpp @@ -0,0 +1,849 @@ +#pragma once +#include + +#include +#include +#include +#include + +#include + + + +namespace ExchCXX { + +template <> +struct kernel_traits< BuiltinM062X_X > : + public mgga_screening_interface< BuiltinM062X_X > { + + static constexpr bool is_lda = false; + static constexpr bool is_gga = false; + static constexpr bool is_mgga = true; + static constexpr bool needs_laplacian = false; + static constexpr bool is_kedf = false; + static constexpr bool is_epc = false; + + static constexpr double dens_tol = 1e-15; + static constexpr double zeta_tol = 1e-15; + static constexpr double sigma_tol = 1.0000000000000027e-20; + static constexpr double tau_tol = is_kedf ? 0.0 : 1e-20; + + static constexpr bool is_hyb = true; + static constexpr double exx_coeff = 0.54; + + static constexpr double a_0 = 0.46; + static constexpr double a_1 = -0.2206052; + static constexpr double a_2 = -9.431788e-02; + static constexpr double a_3 = 2.164494e+00; + static constexpr double a_4 = -2.556466e+00; + static constexpr double a_5 = -1.422133e+01; + static constexpr double a_6 = 1.555044e+01; + static constexpr double a_7 = 3.598078e+01; + static constexpr double a_8 = -2.722754e+01; + static constexpr double a_9 = -3.924093e+01; + static constexpr double a_10 = 1.522808e+01; + static constexpr double a_11 = 1.522227e+01; + static constexpr double csi_HF = 1.0; + static constexpr double cx = 0.54; + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_unpolar_impl( double rho, double sigma, double lapl, double tau, double& eps ) { + + (void)(lapl); + (void)(eps); + constexpr double t4 = constants::m_cbrt_3; + constexpr double t5 = constants::m_cbrt_pi; + constexpr double t22 = constants::m_cbrt_6; + constexpr double t24 = constants::m_cbrt_pi_sq; + constexpr double t28 = constants::m_cbrt_2; + constexpr double t25 = t24 * t24; + constexpr double t26 = 0.1e1 / t25; + constexpr double t27 = t22 * t26; + constexpr double t29 = t28 * t28; + constexpr double t43 = a_1; + constexpr double t44 = t22 * t22; + constexpr double t46 = 0.3e1 / 0.1e2 * t44 * t25; + constexpr double t56 = a_2; + constexpr double t62 = a_3; + constexpr double t68 = a_4; + constexpr double t74 = a_5; + constexpr double t80 = a_6; + constexpr double t86 = a_7; + constexpr double t92 = a_8; + constexpr double t98 = a_9; + constexpr double t104 = a_10; + constexpr double t110 = a_11; + + + const double t3 = rho / 0.2e1 <= dens_tol; + const double t8 = 0.1e1 <= zeta_tol; + const double t9 = zeta_tol - 0.1e1; + const double t11 = piecewise_functor_5( t8, t9, t8, -t9, 0.0 ); + const double t12 = 0.1e1 + t11; + const double t14 = safe_math::cbrt( zeta_tol ); + const double t16 = safe_math::cbrt( t12 ); + const double t18 = piecewise_functor_3( t12 <= zeta_tol, t14 * zeta_tol, t16 * t12 ); + const double t19 = t4 / t5 * t18; + const double t20 = safe_math::cbrt( rho ); + const double t21 = t20 * csi_HF; + const double t30 = sigma * t29; + const double t31 = rho * rho; + const double t32 = t20 * t20; + const double t34 = 0.1e1 / t32 / t31; + const double t38 = 0.804e0 + 0.91464571985215458336e-2 * t27 * t30 * t34; + const double t41 = 0.1804e1 - 0.646416e0 / t38; + const double t47 = tau * t29; + const double t49 = 0.1e1 / t32 / rho; + const double t50 = t47 * t49; + const double t51 = t46 - t50; + const double t52 = t43 * t51; + const double t53 = t46 + t50; + const double t54 = 0.1e1 / t53; + const double t57 = t51 * t51; + const double t58 = t56 * t57; + const double t59 = t53 * t53; + const double t60 = 0.1e1 / t59; + const double t63 = t57 * t51; + const double t64 = t62 * t63; + const double t65 = t59 * t53; + const double t66 = 0.1e1 / t65; + const double t69 = t57 * t57; + const double t70 = t68 * t69; + const double t71 = t59 * t59; + const double t72 = 0.1e1 / t71; + const double t75 = t69 * t51; + const double t76 = t74 * t75; + const double t77 = t71 * t53; + const double t78 = 0.1e1 / t77; + const double t81 = t69 * t57; + const double t82 = t80 * t81; + const double t83 = t71 * t59; + const double t84 = 0.1e1 / t83; + const double t87 = t69 * t63; + const double t88 = t86 * t87; + const double t89 = t71 * t65; + const double t90 = 0.1e1 / t89; + const double t93 = t69 * t69; + const double t94 = t92 * t93; + const double t95 = t71 * t71; + const double t96 = 0.1e1 / t95; + const double t99 = t93 * t51; + const double t100 = t98 * t99; + const double t102 = 0.1e1 / t95 / t53; + const double t105 = t93 * t57; + const double t106 = t104 * t105; + const double t108 = 0.1e1 / t95 / t59; + const double t112 = t110 * t93 * t63; + const double t114 = 0.1e1 / t95 / t65; + const double t116 = t100 * t102 + t106 * t108 + t112 * t114 + t52 * t54 + t58 * t60 + t64 * t66 + t70 * t72 + t76 * t78 + t82 * t84 + t88 * t90 + t94 * t96 + a_0; + const double t117 = t41 * t116; + const double t121 = piecewise_functor_3( t3, 0.0, -0.3e1 / 0.8e1 * t19 * t21 * t117 ); + + + eps = 0.2e1 * t121; + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_vxc_unpolar_impl( double rho, double sigma, double lapl, double tau, double& eps, double& vrho, double& vsigma, double& vlapl, double& vtau ) { + + (void)(lapl); + (void)(eps); + constexpr double t4 = constants::m_cbrt_3; + constexpr double t5 = constants::m_cbrt_pi; + constexpr double t22 = constants::m_cbrt_6; + constexpr double t24 = constants::m_cbrt_pi_sq; + constexpr double t28 = constants::m_cbrt_2; + constexpr double t25 = t24 * t24; + constexpr double t26 = 0.1e1 / t25; + constexpr double t27 = t22 * t26; + constexpr double t29 = t28 * t28; + constexpr double t43 = a_1; + constexpr double t44 = t22 * t22; + constexpr double t46 = 0.3e1 / 0.1e2 * t44 * t25; + constexpr double t56 = a_2; + constexpr double t62 = a_3; + constexpr double t68 = a_4; + constexpr double t74 = a_5; + constexpr double t80 = a_6; + constexpr double t86 = a_7; + constexpr double t92 = a_8; + constexpr double t98 = a_9; + constexpr double t104 = a_10; + constexpr double t110 = a_11; + constexpr double t237 = t26 * t29; + constexpr double t244 = t43 * t29; + + + const double t3 = rho / 0.2e1 <= dens_tol; + const double t8 = 0.1e1 <= zeta_tol; + const double t9 = zeta_tol - 0.1e1; + const double t11 = piecewise_functor_5( t8, t9, t8, -t9, 0.0 ); + const double t12 = 0.1e1 + t11; + const double t14 = safe_math::cbrt( zeta_tol ); + const double t16 = safe_math::cbrt( t12 ); + const double t18 = piecewise_functor_3( t12 <= zeta_tol, t14 * zeta_tol, t16 * t12 ); + const double t19 = t4 / t5 * t18; + const double t20 = safe_math::cbrt( rho ); + const double t21 = t20 * csi_HF; + const double t30 = sigma * t29; + const double t31 = rho * rho; + const double t32 = t20 * t20; + const double t34 = 0.1e1 / t32 / t31; + const double t38 = 0.804e0 + 0.91464571985215458336e-2 * t27 * t30 * t34; + const double t41 = 0.1804e1 - 0.646416e0 / t38; + const double t47 = tau * t29; + const double t49 = 0.1e1 / t32 / rho; + const double t50 = t47 * t49; + const double t51 = t46 - t50; + const double t52 = t43 * t51; + const double t53 = t46 + t50; + const double t54 = 0.1e1 / t53; + const double t57 = t51 * t51; + const double t58 = t56 * t57; + const double t59 = t53 * t53; + const double t60 = 0.1e1 / t59; + const double t63 = t57 * t51; + const double t64 = t62 * t63; + const double t65 = t59 * t53; + const double t66 = 0.1e1 / t65; + const double t69 = t57 * t57; + const double t70 = t68 * t69; + const double t71 = t59 * t59; + const double t72 = 0.1e1 / t71; + const double t75 = t69 * t51; + const double t76 = t74 * t75; + const double t77 = t71 * t53; + const double t78 = 0.1e1 / t77; + const double t81 = t69 * t57; + const double t82 = t80 * t81; + const double t83 = t71 * t59; + const double t84 = 0.1e1 / t83; + const double t87 = t69 * t63; + const double t88 = t86 * t87; + const double t89 = t71 * t65; + const double t90 = 0.1e1 / t89; + const double t93 = t69 * t69; + const double t94 = t92 * t93; + const double t95 = t71 * t71; + const double t96 = 0.1e1 / t95; + const double t99 = t93 * t51; + const double t100 = t98 * t99; + const double t102 = 0.1e1 / t95 / t53; + const double t105 = t93 * t57; + const double t106 = t104 * t105; + const double t108 = 0.1e1 / t95 / t59; + const double t112 = t110 * t93 * t63; + const double t114 = 0.1e1 / t95 / t65; + const double t116 = t100 * t102 + t106 * t108 + t112 * t114 + t52 * t54 + t58 * t60 + t64 * t66 + t70 * t72 + t76 * t78 + t82 * t84 + t88 * t90 + t94 * t96 + a_0; + const double t117 = t41 * t116; + const double t121 = piecewise_functor_3( t3, 0.0, -0.3e1 / 0.8e1 * t19 * t21 * t117 ); + const double t123 = 0.1e1 / t32 * csi_HF; + const double t127 = t4 * t18; + const double t128 = t31 * rho; + const double t130 = 0.1e1 / t20 / t128; + const double t131 = t130 * csi_HF; + const double t132 = t38 * t38; + const double t133 = 0.1e1 / t132; + const double t135 = t127 * t131 * t133; + const double t137 = t27 * t30 * t116; + const double t140 = t43 * tau; + const double t145 = t52 * t60; + const double t146 = t47 * t34; + const double t149 = t56 * t51; + const double t150 = t149 * t60; + const double t153 = t58 * t66; + const double t156 = t62 * t57; + const double t157 = t156 * t66; + const double t160 = t64 * t72; + const double t163 = t68 * t63; + const double t164 = t163 * t72; + const double t167 = t70 * t78; + const double t170 = t74 * t69; + const double t171 = t170 * t78; + const double t174 = t76 * t84; + const double t177 = t80 * t75; + const double t178 = t177 * t84; + const double t181 = 0.5e1 / 0.3e1 * t140 * t29 * t34 * t54 + 0.5e1 / 0.3e1 * t145 * t146 + 0.1e2 / 0.3e1 * t150 * t146 + 0.1e2 / 0.3e1 * t153 * t146 + 0.5e1 * t157 * t146 + 0.5e1 * t160 * t146 + 0.2e2 / 0.3e1 * t164 * t146 + 0.2e2 / 0.3e1 * t167 * t146 + 0.25e2 / 0.3e1 * t171 * t146 + 0.25e2 / 0.3e1 * t174 * t146 + 0.1e2 * t178 * t146; + const double t182 = t82 * t90; + const double t185 = t86 * t81; + const double t186 = t185 * t90; + const double t189 = t88 * t96; + const double t192 = t92 * t87; + const double t193 = t192 * t96; + const double t196 = t94 * t102; + const double t199 = t98 * t93; + const double t200 = t199 * t102; + const double t203 = t100 * t108; + const double t206 = t104 * t99; + const double t207 = t206 * t108; + const double t210 = t106 * t114; + const double t213 = t110 * t105; + const double t214 = t213 * t114; + const double t218 = 0.1e1 / t95 / t71; + const double t219 = t112 * t218; + const double t222 = 0.1e2 * t182 * t146 + 0.35e2 / 0.3e1 * t186 * t146 + 0.35e2 / 0.3e1 * t189 * t146 + 0.4e2 / 0.3e1 * t193 * t146 + 0.4e2 / 0.3e1 * t196 * t146 + 0.15e2 * t200 * t146 + 0.15e2 * t203 * t146 + 0.5e2 / 0.3e1 * t207 * t146 + 0.5e2 / 0.3e1 * t210 * t146 + 0.55e2 / 0.3e1 * t214 * t146 + 0.55e2 / 0.3e1 * t219 * t146; + const double t223 = t181 + t222; + const double t224 = t41 * t223; + const double t229 = piecewise_functor_3( t3, 0.0, -t19 * t123 * t117 / 0.8e1 + 0.40369036088841097646e-2 * t135 * t137 - 0.3e1 / 0.8e1 * t19 * t21 * t224 ); + const double t235 = t127 / t20 / t31 * csi_HF; + const double t236 = t133 * t22; + const double t239 = t236 * t237 * t116; + const double t242 = piecewise_functor_3( t3, 0.0, -0.15138388533315411618e-2 * t235 * t239 ); + const double t247 = t60 * t29; + const double t248 = t247 * t49; + const double t252 = t66 * t29; + const double t253 = t252 * t49; + const double t258 = t72 * t29; + const double t259 = t258 * t49; + const double t264 = t78 * t29; + const double t265 = t264 * t49; + const double t270 = t84 * t29; + const double t271 = t270 * t49; + const double t276 = -t244 * t49 * t54 - 0.2e1 * t149 * t248 - 0.3e1 * t156 * t253 - 0.4e1 * t163 * t259 - 0.5e1 * t170 * t265 - 0.6e1 * t177 * t271 - t248 * t52 - 0.2e1 * t253 * t58 - 0.3e1 * t259 * t64 - 0.4e1 * t265 * t70 - 0.5e1 * t271 * t76; + const double t277 = t90 * t29; + const double t278 = t277 * t49; + const double t283 = t96 * t29; + const double t284 = t283 * t49; + const double t289 = t102 * t29; + const double t290 = t289 * t49; + const double t295 = t108 * t29; + const double t296 = t295 * t49; + const double t301 = t114 * t29; + const double t302 = t301 * t49; + const double t307 = t218 * t29; + const double t311 = -0.11e2 * t112 * t307 * t49 - 0.9e1 * t100 * t296 - 0.1e2 * t106 * t302 - 0.7e1 * t185 * t278 - 0.8e1 * t192 * t284 - 0.9e1 * t199 * t290 - 0.1e2 * t206 * t296 - 0.11e2 * t213 * t302 - 0.6e1 * t278 * t82 - 0.7e1 * t284 * t88 - 0.8e1 * t290 * t94; + const double t312 = t276 + t311; + const double t313 = t41 * t312; + const double t317 = piecewise_functor_3( t3, 0.0, -0.3e1 / 0.8e1 * t19 * t21 * t313 ); + + + eps = 0.2e1 * t121; + vrho = 0.2e1 * rho * t229 + 0.2e1 * t121; + vsigma = 0.2e1 * rho * t242; + vlapl = 0.e0; + vtau = 0.2e1 * rho * t317; + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_polar_impl( double rho_a, double rho_b, double sigma_aa, double sigma_ab, double sigma_bb, double lapl_a, double lapl_b, double tau_a, double tau_b, double& eps ) { + + (void)(sigma_ab); + (void)(lapl_a); + (void)(lapl_b); + (void)(eps); + constexpr double t3 = constants::m_cbrt_3; + constexpr double t4 = constants::m_cbrt_pi; + constexpr double t30 = constants::m_cbrt_6; + constexpr double t32 = constants::m_cbrt_pi_sq; + constexpr double t6 = t3 / t4; + constexpr double t33 = t32 * t32; + constexpr double t34 = 0.1e1 / t33; + constexpr double t35 = t30 * t34; + constexpr double t48 = a_0; + constexpr double t49 = a_1; + constexpr double t50 = t30 * t30; + constexpr double t52 = 0.3e1 / 0.1e2 * t50 * t33; + constexpr double t61 = a_2; + constexpr double t67 = a_3; + constexpr double t73 = a_4; + constexpr double t79 = a_5; + constexpr double t85 = a_6; + constexpr double t91 = a_7; + constexpr double t97 = a_8; + constexpr double t103 = a_9; + constexpr double t109 = a_10; + constexpr double t115 = a_11; + + + const double t2 = rho_a <= dens_tol; + const double t7 = rho_a + rho_b; + const double t8 = 0.1e1 / t7; + const double t11 = 0.2e1 * rho_a * t8 <= zeta_tol; + const double t12 = zeta_tol - 0.1e1; + const double t15 = 0.2e1 * rho_b * t8 <= zeta_tol; + const double t16 = -t12; + const double t17 = rho_a - rho_b; + const double t19 = piecewise_functor_5( t11, t12, t15, t16, t17 * t8 ); + const double t20 = 0.1e1 + t19; + const double t21 = t20 <= zeta_tol; + const double t22 = safe_math::cbrt( zeta_tol ); + const double t23 = t22 * zeta_tol; + const double t24 = safe_math::cbrt( t20 ); + const double t26 = piecewise_functor_3( t21, t23, t24 * t20 ); + const double t27 = t6 * t26; + const double t28 = safe_math::cbrt( t7 ); + const double t29 = t28 * csi_HF; + const double t36 = rho_a * rho_a; + const double t37 = safe_math::cbrt( rho_a ); + const double t38 = t37 * t37; + const double t40 = 0.1e1 / t38 / t36; + const double t44 = 0.804e0 + 0.91464571985215458336e-2 * t35 * sigma_aa * t40; + const double t47 = 0.1804e1 - 0.646416e0 / t44; + const double t54 = 0.1e1 / t38 / rho_a; + const double t55 = tau_a * t54; + const double t56 = t52 - t55; + const double t57 = t49 * t56; + const double t58 = t52 + t55; + const double t59 = 0.1e1 / t58; + const double t62 = t56 * t56; + const double t63 = t61 * t62; + const double t64 = t58 * t58; + const double t65 = 0.1e1 / t64; + const double t68 = t62 * t56; + const double t69 = t67 * t68; + const double t70 = t64 * t58; + const double t71 = 0.1e1 / t70; + const double t74 = t62 * t62; + const double t75 = t73 * t74; + const double t76 = t64 * t64; + const double t77 = 0.1e1 / t76; + const double t80 = t74 * t56; + const double t81 = t79 * t80; + const double t82 = t76 * t58; + const double t83 = 0.1e1 / t82; + const double t86 = t74 * t62; + const double t87 = t85 * t86; + const double t88 = t76 * t64; + const double t89 = 0.1e1 / t88; + const double t92 = t74 * t68; + const double t93 = t91 * t92; + const double t94 = t76 * t70; + const double t95 = 0.1e1 / t94; + const double t98 = t74 * t74; + const double t99 = t97 * t98; + const double t100 = t76 * t76; + const double t101 = 0.1e1 / t100; + const double t104 = t98 * t56; + const double t105 = t103 * t104; + const double t107 = 0.1e1 / t100 / t58; + const double t110 = t98 * t62; + const double t111 = t109 * t110; + const double t113 = 0.1e1 / t100 / t64; + const double t117 = t115 * t98 * t68; + const double t119 = 0.1e1 / t100 / t70; + const double t121 = t99 * t101 + t105 * t107 + t111 * t113 + t117 * t119 + t57 * t59 + t63 * t65 + t69 * t71 + t75 * t77 + t81 * t83 + t87 * t89 + t93 * t95 + t48; + const double t122 = t47 * t121; + const double t123 = t29 * t122; + const double t126 = piecewise_functor_3( t2, 0.0, -0.3e1 / 0.8e1 * t27 * t123 ); + const double t127 = rho_b <= dens_tol; + const double t128 = -t17; + const double t130 = piecewise_functor_5( t15, t12, t11, t16, t128 * t8 ); + const double t131 = 0.1e1 + t130; + const double t132 = t131 <= zeta_tol; + const double t133 = safe_math::cbrt( t131 ); + const double t135 = piecewise_functor_3( t132, t23, t133 * t131 ); + const double t136 = t6 * t135; + const double t137 = rho_b * rho_b; + const double t138 = safe_math::cbrt( rho_b ); + const double t139 = t138 * t138; + const double t141 = 0.1e1 / t139 / t137; + const double t145 = 0.804e0 + 0.91464571985215458336e-2 * t35 * sigma_bb * t141; + const double t148 = 0.1804e1 - 0.646416e0 / t145; + const double t150 = 0.1e1 / t139 / rho_b; + const double t151 = tau_b * t150; + const double t152 = t52 - t151; + const double t153 = t49 * t152; + const double t154 = t52 + t151; + const double t155 = 0.1e1 / t154; + const double t157 = t152 * t152; + const double t158 = t61 * t157; + const double t159 = t154 * t154; + const double t160 = 0.1e1 / t159; + const double t162 = t157 * t152; + const double t163 = t67 * t162; + const double t164 = t159 * t154; + const double t165 = 0.1e1 / t164; + const double t167 = t157 * t157; + const double t168 = t73 * t167; + const double t169 = t159 * t159; + const double t170 = 0.1e1 / t169; + const double t172 = t167 * t152; + const double t173 = t79 * t172; + const double t174 = t169 * t154; + const double t175 = 0.1e1 / t174; + const double t177 = t167 * t157; + const double t178 = t85 * t177; + const double t179 = t169 * t159; + const double t180 = 0.1e1 / t179; + const double t182 = t167 * t162; + const double t183 = t91 * t182; + const double t184 = t169 * t164; + const double t185 = 0.1e1 / t184; + const double t187 = t167 * t167; + const double t188 = t97 * t187; + const double t189 = t169 * t169; + const double t190 = 0.1e1 / t189; + const double t192 = t187 * t152; + const double t193 = t103 * t192; + const double t195 = 0.1e1 / t189 / t154; + const double t197 = t187 * t157; + const double t198 = t109 * t197; + const double t200 = 0.1e1 / t189 / t159; + const double t203 = t115 * t187 * t162; + const double t205 = 0.1e1 / t189 / t164; + const double t207 = t153 * t155 + t158 * t160 + t163 * t165 + t168 * t170 + t173 * t175 + t178 * t180 + t183 * t185 + t188 * t190 + t193 * t195 + t198 * t200 + t203 * t205 + t48; + const double t208 = t148 * t207; + const double t209 = t29 * t208; + const double t212 = piecewise_functor_3( t127, 0.0, -0.3e1 / 0.8e1 * t136 * t209 ); + + + eps = t126 + t212; + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_vxc_polar_impl( double rho_a, double rho_b, double sigma_aa, double sigma_ab, double sigma_bb, double lapl_a, double lapl_b, double tau_a, double tau_b, double& eps, double& vrho_a, double& vrho_b, double& vsigma_aa, double& vsigma_ab, double& vsigma_bb, double& vlapl_a, double& vlapl_b, double& vtau_a, double& vtau_b ) { + + (void)(sigma_ab); + (void)(lapl_a); + (void)(lapl_b); + (void)(eps); + constexpr double t3 = constants::m_cbrt_3; + constexpr double t4 = constants::m_cbrt_pi; + constexpr double t30 = constants::m_cbrt_6; + constexpr double t32 = constants::m_cbrt_pi_sq; + constexpr double t6 = t3 / t4; + constexpr double t33 = t32 * t32; + constexpr double t34 = 0.1e1 / t33; + constexpr double t35 = t30 * t34; + constexpr double t48 = a_0; + constexpr double t49 = a_1; + constexpr double t50 = t30 * t30; + constexpr double t52 = 0.3e1 / 0.1e2 * t50 * t33; + constexpr double t61 = a_2; + constexpr double t67 = a_3; + constexpr double t73 = a_4; + constexpr double t79 = a_5; + constexpr double t85 = a_6; + constexpr double t91 = a_7; + constexpr double t97 = a_8; + constexpr double t103 = a_9; + constexpr double t109 = a_10; + constexpr double t115 = a_11; + + + const double t2 = rho_a <= dens_tol; + const double t7 = rho_a + rho_b; + const double t8 = 0.1e1 / t7; + const double t11 = 0.2e1 * rho_a * t8 <= zeta_tol; + const double t12 = zeta_tol - 0.1e1; + const double t15 = 0.2e1 * rho_b * t8 <= zeta_tol; + const double t16 = -t12; + const double t17 = rho_a - rho_b; + const double t19 = piecewise_functor_5( t11, t12, t15, t16, t17 * t8 ); + const double t20 = 0.1e1 + t19; + const double t21 = t20 <= zeta_tol; + const double t22 = safe_math::cbrt( zeta_tol ); + const double t23 = t22 * zeta_tol; + const double t24 = safe_math::cbrt( t20 ); + const double t26 = piecewise_functor_3( t21, t23, t24 * t20 ); + const double t27 = t6 * t26; + const double t28 = safe_math::cbrt( t7 ); + const double t29 = t28 * csi_HF; + const double t36 = rho_a * rho_a; + const double t37 = safe_math::cbrt( rho_a ); + const double t38 = t37 * t37; + const double t40 = 0.1e1 / t38 / t36; + const double t44 = 0.804e0 + 0.91464571985215458336e-2 * t35 * sigma_aa * t40; + const double t47 = 0.1804e1 - 0.646416e0 / t44; + const double t54 = 0.1e1 / t38 / rho_a; + const double t55 = tau_a * t54; + const double t56 = t52 - t55; + const double t57 = t49 * t56; + const double t58 = t52 + t55; + const double t59 = 0.1e1 / t58; + const double t62 = t56 * t56; + const double t63 = t61 * t62; + const double t64 = t58 * t58; + const double t65 = 0.1e1 / t64; + const double t68 = t62 * t56; + const double t69 = t67 * t68; + const double t70 = t64 * t58; + const double t71 = 0.1e1 / t70; + const double t74 = t62 * t62; + const double t75 = t73 * t74; + const double t76 = t64 * t64; + const double t77 = 0.1e1 / t76; + const double t80 = t74 * t56; + const double t81 = t79 * t80; + const double t82 = t76 * t58; + const double t83 = 0.1e1 / t82; + const double t86 = t74 * t62; + const double t87 = t85 * t86; + const double t88 = t76 * t64; + const double t89 = 0.1e1 / t88; + const double t92 = t74 * t68; + const double t93 = t91 * t92; + const double t94 = t76 * t70; + const double t95 = 0.1e1 / t94; + const double t98 = t74 * t74; + const double t99 = t97 * t98; + const double t100 = t76 * t76; + const double t101 = 0.1e1 / t100; + const double t104 = t98 * t56; + const double t105 = t103 * t104; + const double t107 = 0.1e1 / t100 / t58; + const double t110 = t98 * t62; + const double t111 = t109 * t110; + const double t113 = 0.1e1 / t100 / t64; + const double t117 = t115 * t98 * t68; + const double t119 = 0.1e1 / t100 / t70; + const double t121 = t99 * t101 + t105 * t107 + t111 * t113 + t117 * t119 + t57 * t59 + t63 * t65 + t69 * t71 + t75 * t77 + t81 * t83 + t87 * t89 + t93 * t95 + t48; + const double t122 = t47 * t121; + const double t123 = t29 * t122; + const double t126 = piecewise_functor_3( t2, 0.0, -0.3e1 / 0.8e1 * t27 * t123 ); + const double t127 = rho_b <= dens_tol; + const double t128 = -t17; + const double t130 = piecewise_functor_5( t15, t12, t11, t16, t128 * t8 ); + const double t131 = 0.1e1 + t130; + const double t132 = t131 <= zeta_tol; + const double t133 = safe_math::cbrt( t131 ); + const double t135 = piecewise_functor_3( t132, t23, t133 * t131 ); + const double t136 = t6 * t135; + const double t137 = rho_b * rho_b; + const double t138 = safe_math::cbrt( rho_b ); + const double t139 = t138 * t138; + const double t141 = 0.1e1 / t139 / t137; + const double t145 = 0.804e0 + 0.91464571985215458336e-2 * t35 * sigma_bb * t141; + const double t148 = 0.1804e1 - 0.646416e0 / t145; + const double t150 = 0.1e1 / t139 / rho_b; + const double t151 = tau_b * t150; + const double t152 = t52 - t151; + const double t153 = t49 * t152; + const double t154 = t52 + t151; + const double t155 = 0.1e1 / t154; + const double t157 = t152 * t152; + const double t158 = t61 * t157; + const double t159 = t154 * t154; + const double t160 = 0.1e1 / t159; + const double t162 = t157 * t152; + const double t163 = t67 * t162; + const double t164 = t159 * t154; + const double t165 = 0.1e1 / t164; + const double t167 = t157 * t157; + const double t168 = t73 * t167; + const double t169 = t159 * t159; + const double t170 = 0.1e1 / t169; + const double t172 = t167 * t152; + const double t173 = t79 * t172; + const double t174 = t169 * t154; + const double t175 = 0.1e1 / t174; + const double t177 = t167 * t157; + const double t178 = t85 * t177; + const double t179 = t169 * t159; + const double t180 = 0.1e1 / t179; + const double t182 = t167 * t162; + const double t183 = t91 * t182; + const double t184 = t169 * t164; + const double t185 = 0.1e1 / t184; + const double t187 = t167 * t167; + const double t188 = t97 * t187; + const double t189 = t169 * t169; + const double t190 = 0.1e1 / t189; + const double t192 = t187 * t152; + const double t193 = t103 * t192; + const double t195 = 0.1e1 / t189 / t154; + const double t197 = t187 * t157; + const double t198 = t109 * t197; + const double t200 = 0.1e1 / t189 / t159; + const double t203 = t115 * t187 * t162; + const double t205 = 0.1e1 / t189 / t164; + const double t207 = t153 * t155 + t158 * t160 + t163 * t165 + t168 * t170 + t173 * t175 + t178 * t180 + t183 * t185 + t188 * t190 + t193 * t195 + t198 * t200 + t203 * t205 + t48; + const double t208 = t148 * t207; + const double t209 = t29 * t208; + const double t212 = piecewise_functor_3( t127, 0.0, -0.3e1 / 0.8e1 * t136 * t209 ); + const double t213 = t7 * t7; + const double t214 = 0.1e1 / t213; + const double t215 = t17 * t214; + const double t217 = piecewise_functor_5( t11, 0.0, t15, 0.0, t8 - t215 ); + const double t220 = piecewise_functor_3( t21, 0.0, 0.4e1 / 0.3e1 * t24 * t217 ); + const double t221 = t6 * t220; + const double t224 = t28 * t28; + const double t225 = 0.1e1 / t224; + const double t226 = t225 * csi_HF; + const double t227 = t226 * t122; + const double t229 = t27 * t227 / 0.8e1; + const double t230 = t3 * t26; + const double t231 = t44 * t44; + const double t232 = 0.1e1 / t231; + const double t233 = t29 * t232; + const double t234 = t230 * t233; + const double t235 = t36 * rho_a; + const double t237 = 0.1e1 / t38 / t235; + const double t238 = sigma_aa * t237; + const double t240 = t35 * t238 * t121; + const double t243 = t49 * tau_a; + const double t247 = t65 * tau_a; + const double t248 = t247 * t40; + const double t251 = t61 * t56; + const double t254 = t71 * tau_a; + const double t255 = t254 * t40; + const double t258 = t67 * t62; + const double t261 = t77 * tau_a; + const double t262 = t261 * t40; + const double t265 = t73 * t68; + const double t268 = t83 * tau_a; + const double t269 = t268 * t40; + const double t272 = t79 * t74; + const double t275 = t89 * tau_a; + const double t276 = t275 * t40; + const double t279 = t85 * t80; + const double t282 = 0.5e1 / 0.3e1 * t243 * t40 * t59 + 0.5e1 / 0.3e1 * t57 * t248 + 0.1e2 / 0.3e1 * t251 * t248 + 0.1e2 / 0.3e1 * t63 * t255 + 0.5e1 * t258 * t255 + 0.5e1 * t69 * t262 + 0.2e2 / 0.3e1 * t265 * t262 + 0.2e2 / 0.3e1 * t75 * t269 + 0.25e2 / 0.3e1 * t272 * t269 + 0.25e2 / 0.3e1 * t81 * t276 + 0.1e2 * t279 * t276; + const double t283 = t95 * tau_a; + const double t284 = t283 * t40; + const double t287 = t91 * t86; + const double t290 = t101 * tau_a; + const double t291 = t290 * t40; + const double t294 = t97 * t92; + const double t297 = t107 * tau_a; + const double t298 = t297 * t40; + const double t301 = t103 * t98; + const double t304 = t113 * tau_a; + const double t305 = t304 * t40; + const double t308 = t109 * t104; + const double t311 = t119 * tau_a; + const double t312 = t311 * t40; + const double t315 = t115 * t110; + const double t319 = 0.1e1 / t100 / t76; + const double t320 = t319 * tau_a; + const double t324 = 0.1e2 * t87 * t284 + 0.35e2 / 0.3e1 * t287 * t284 + 0.35e2 / 0.3e1 * t93 * t291 + 0.4e2 / 0.3e1 * t294 * t291 + 0.4e2 / 0.3e1 * t99 * t298 + 0.15e2 * t301 * t298 + 0.15e2 * t105 * t305 + 0.5e2 / 0.3e1 * t308 * t305 + 0.5e2 / 0.3e1 * t111 * t312 + 0.55e2 / 0.3e1 * t315 * t312 + 0.55e2 / 0.3e1 * t117 * t320 * t40; + const double t325 = t282 + t324; + const double t326 = t47 * t325; + const double t327 = t29 * t326; + const double t331 = piecewise_functor_3( t2, 0.0, -0.3e1 / 0.8e1 * t221 * t123 - t229 + 0.40369036088841097646e-2 * t234 * t240 - 0.3e1 / 0.8e1 * t27 * t327 ); + const double t332 = t128 * t214; + const double t334 = piecewise_functor_5( t15, 0.0, t11, 0.0, -t8 - t332 ); + const double t337 = piecewise_functor_3( t132, 0.0, 0.4e1 / 0.3e1 * t133 * t334 ); + const double t338 = t6 * t337; + const double t341 = t226 * t208; + const double t343 = t136 * t341 / 0.8e1; + const double t345 = piecewise_functor_3( t127, 0.0, -0.3e1 / 0.8e1 * t338 * t209 - t343 ); + const double t349 = piecewise_functor_5( t11, 0.0, t15, 0.0, -t8 - t215 ); + const double t352 = piecewise_functor_3( t21, 0.0, 0.4e1 / 0.3e1 * t24 * t349 ); + const double t353 = t6 * t352; + const double t357 = piecewise_functor_3( t2, 0.0, -0.3e1 / 0.8e1 * t353 * t123 - t229 ); + const double t359 = piecewise_functor_5( t15, 0.0, t11, 0.0, t8 - t332 ); + const double t362 = piecewise_functor_3( t132, 0.0, 0.4e1 / 0.3e1 * t133 * t359 ); + const double t363 = t6 * t362; + const double t366 = t3 * t135; + const double t367 = t145 * t145; + const double t368 = 0.1e1 / t367; + const double t369 = t29 * t368; + const double t370 = t366 * t369; + const double t371 = t137 * rho_b; + const double t373 = 0.1e1 / t139 / t371; + const double t374 = sigma_bb * t373; + const double t376 = t35 * t374 * t207; + const double t379 = t49 * tau_b; + const double t383 = t160 * tau_b; + const double t384 = t383 * t141; + const double t387 = t61 * t152; + const double t390 = t165 * tau_b; + const double t391 = t390 * t141; + const double t394 = t67 * t157; + const double t397 = t170 * tau_b; + const double t398 = t397 * t141; + const double t401 = t73 * t162; + const double t404 = t175 * tau_b; + const double t405 = t404 * t141; + const double t408 = t79 * t167; + const double t411 = t180 * tau_b; + const double t412 = t411 * t141; + const double t415 = t85 * t172; + const double t418 = 0.5e1 / 0.3e1 * t379 * t141 * t155 + 0.5e1 / 0.3e1 * t153 * t384 + 0.1e2 / 0.3e1 * t387 * t384 + 0.1e2 / 0.3e1 * t158 * t391 + 0.5e1 * t394 * t391 + 0.5e1 * t163 * t398 + 0.2e2 / 0.3e1 * t401 * t398 + 0.2e2 / 0.3e1 * t168 * t405 + 0.25e2 / 0.3e1 * t408 * t405 + 0.25e2 / 0.3e1 * t173 * t412 + 0.1e2 * t415 * t412; + const double t419 = t185 * tau_b; + const double t420 = t419 * t141; + const double t423 = t91 * t177; + const double t426 = t190 * tau_b; + const double t427 = t426 * t141; + const double t430 = t97 * t182; + const double t433 = t195 * tau_b; + const double t434 = t433 * t141; + const double t437 = t103 * t187; + const double t440 = t200 * tau_b; + const double t441 = t440 * t141; + const double t444 = t109 * t192; + const double t447 = t205 * tau_b; + const double t448 = t447 * t141; + const double t451 = t115 * t197; + const double t455 = 0.1e1 / t189 / t169; + const double t456 = t455 * tau_b; + const double t460 = 0.1e2 * t178 * t420 + 0.35e2 / 0.3e1 * t423 * t420 + 0.35e2 / 0.3e1 * t183 * t427 + 0.4e2 / 0.3e1 * t430 * t427 + 0.4e2 / 0.3e1 * t188 * t434 + 0.15e2 * t437 * t434 + 0.15e2 * t193 * t441 + 0.5e2 / 0.3e1 * t444 * t441 + 0.5e2 / 0.3e1 * t198 * t448 + 0.55e2 / 0.3e1 * t451 * t448 + 0.55e2 / 0.3e1 * t203 * t456 * t141; + const double t461 = t418 + t460; + const double t462 = t148 * t461; + const double t463 = t29 * t462; + const double t467 = piecewise_functor_3( t127, 0.0, -0.3e1 / 0.8e1 * t363 * t209 - t343 + 0.40369036088841097646e-2 * t370 * t376 - 0.3e1 / 0.8e1 * t136 * t463 ); + const double t470 = t230 * t29; + const double t471 = t232 * t30; + const double t472 = t34 * t40; + const double t474 = t471 * t472 * t121; + const double t477 = piecewise_functor_3( t2, 0.0, -0.15138388533315411618e-2 * t470 * t474 ); + const double t478 = t366 * t29; + const double t479 = t368 * t30; + const double t480 = t34 * t141; + const double t482 = t479 * t480 * t207; + const double t485 = piecewise_functor_3( t127, 0.0, -0.15138388533315411618e-2 * t478 * t482 ); + const double t488 = t65 * t54; + const double t492 = t71 * t54; + const double t497 = t77 * t54; + const double t502 = t83 * t54; + const double t507 = t89 * t54; + const double t512 = -t49 * t54 * t59 - 0.2e1 * t251 * t488 - 0.3e1 * t258 * t492 - 0.4e1 * t265 * t497 - 0.5e1 * t272 * t502 - 0.6e1 * t279 * t507 - t57 * t488 - 0.2e1 * t63 * t492 - 0.3e1 * t69 * t497 - 0.4e1 * t75 * t502 - 0.5e1 * t81 * t507; + const double t513 = t95 * t54; + const double t518 = t101 * t54; + const double t523 = t107 * t54; + const double t528 = t113 * t54; + const double t533 = t119 * t54; + const double t541 = -0.11e2 * t117 * t319 * t54 - 0.9e1 * t105 * t528 - 0.1e2 * t111 * t533 - 0.7e1 * t287 * t513 - 0.8e1 * t294 * t518 - 0.9e1 * t301 * t523 - 0.1e2 * t308 * t528 - 0.11e2 * t315 * t533 - 0.6e1 * t87 * t513 - 0.7e1 * t93 * t518 - 0.8e1 * t99 * t523; + const double t542 = t512 + t541; + const double t543 = t47 * t542; + const double t544 = t29 * t543; + const double t547 = piecewise_functor_3( t2, 0.0, -0.3e1 / 0.8e1 * t27 * t544 ); + const double t550 = t160 * t150; + const double t554 = t165 * t150; + const double t559 = t170 * t150; + const double t564 = t175 * t150; + const double t569 = t180 * t150; + const double t574 = -t49 * t150 * t155 - t153 * t550 - 0.2e1 * t158 * t554 - 0.3e1 * t163 * t559 - 0.4e1 * t168 * t564 - 0.5e1 * t173 * t569 - 0.2e1 * t387 * t550 - 0.3e1 * t394 * t554 - 0.4e1 * t401 * t559 - 0.5e1 * t408 * t564 - 0.6e1 * t415 * t569; + const double t575 = t185 * t150; + const double t580 = t190 * t150; + const double t585 = t195 * t150; + const double t590 = t200 * t150; + const double t595 = t205 * t150; + const double t603 = -0.11e2 * t203 * t455 * t150 - 0.6e1 * t178 * t575 - 0.7e1 * t183 * t580 - 0.8e1 * t188 * t585 - 0.9e1 * t193 * t590 - 0.1e2 * t198 * t595 - 0.7e1 * t423 * t575 - 0.8e1 * t430 * t580 - 0.9e1 * t437 * t585 - 0.1e2 * t444 * t590 - 0.11e2 * t451 * t595; + const double t604 = t574 + t603; + const double t605 = t148 * t604; + const double t606 = t29 * t605; + const double t609 = piecewise_functor_3( t127, 0.0, -0.3e1 / 0.8e1 * t136 * t606 ); + + + eps = t126 + t212; + vrho_a = t126 + t212 + t7 * ( t331 + t345 ); + vrho_b = t126 + t212 + t7 * ( t357 + t467 ); + vsigma_aa = t7 * t477; + vsigma_ab = 0.e0; + vsigma_bb = t7 * t485; + vlapl_a = 0.e0; + vlapl_b = 0.e0; + vtau_a = t7 * t547; + vtau_b = t7 * t609; + + } + + +}; + +struct BuiltinM062X_X : detail::BuiltinKernelImpl< BuiltinM062X_X > { + + BuiltinM062X_X( Spin p ) : + detail::BuiltinKernelImpl< BuiltinM062X_X >(p) { } + + virtual ~BuiltinM062X_X() = default; + +}; + + + +} // namespace ExchCXX \ No newline at end of file diff --git a/include/exchcxx/impl/builtin/kernels/pbe_c.hpp b/include/exchcxx/impl/builtin/kernels/pbe_c.hpp index 08049a7..4f0d0a8 100644 --- a/include/exchcxx/impl/builtin/kernels/pbe_c.hpp +++ b/include/exchcxx/impl/builtin/kernels/pbe_c.hpp @@ -378,7 +378,7 @@ struct kernel_traits< BuiltinPBE_C > : const double t138 = t134 * t137; const double t141 = t106 * t56 * t112 / 0.96e2 + t127 * t138 / 0.3072e4; const double t142 = beta * t141; - const double t146 = t123 * t141 * t143 + 0.1e1; + const double t146 = t143 * t123 * t141 + 0.1e1; const double t147 = 0.1e1 / t146; const double t148 = t116 * t147; const double t150 = t142 * t148 + 0.1e1; @@ -501,7 +501,7 @@ struct kernel_traits< BuiltinPBE_C > : const double t138 = t134 * t137; const double t141 = t106 * t56 * t112 / 0.96e2 + t127 * t138 / 0.3072e4; const double t142 = beta * t141; - const double t146 = t123 * t141 * t143 + 0.1e1; + const double t146 = t143 * t123 * t141 + 0.1e1; const double t147 = 0.1e1 / t146; const double t148 = t116 * t147; const double t150 = t142 * t148 + 0.1e1; @@ -595,7 +595,7 @@ struct kernel_traits< BuiltinPBE_C > : const double t287 = t286 * t1; const double t290 = ( t158 + t183 + t187 - t192 + t206 + t239 + t241 - t246 - t251 ) * t116; const double t292 = t133 * t262; - const double t295 = 0.3e1 * t118 * t292 - t119 * t290; + const double t295 = 0.3e1 * t118 * t292 - t290 * t119; const double t296 = t295 * t121; const double t297 = t288 * t296; const double t298 = t287 * t297; @@ -617,9 +617,9 @@ struct kernel_traits< BuiltinPBE_C > : const double t324 = t116 * t323; const double t325 = t143 * t282; const double t326 = t141 * t295; - const double t331 = -t121 * t325 * t326 + t123 * t143 * t319; + const double t331 = -t325 * t326 * t121 + t143 * t123 * t319; const double t332 = t324 * t331; - const double t334 = -t142 * t332 + t148 * t320; + const double t334 = -t142 * t332 + t320 * t148; const double t335 = 0.1e1 / t150; const double t336 = t334 * t335; const double t337 = t101 * t336; @@ -643,7 +643,7 @@ struct kernel_traits< BuiltinPBE_C > : const double t366 = t275 * t365; const double t370 = ( t158 + t183 - t187 - t192 + t351 + t239 + t353 - t246 - t251 ) * t116; const double t372 = t133 * t361; - const double t375 = 0.3e1 * t118 * t372 - t119 * t370; + const double t375 = 0.3e1 * t118 * t372 - t370 * t119; const double t376 = t375 * t121; const double t377 = t288 * t376; const double t378 = t287 * t377; @@ -651,9 +651,9 @@ struct kernel_traits< BuiltinPBE_C > : const double t385 = -t272 - t274 * t366 / 0.48e2 - t285 * t378 / 0.3072e4 - t307 - t310 * t382 / 0.768e3; const double t386 = beta * t385; const double t388 = t141 * t375; - const double t393 = -t121 * t325 * t388 + t123 * t143 * t385; + const double t393 = -t325 * t388 * t121 + t143 * t123 * t385; const double t394 = t324 * t393; - const double t396 = -t142 * t394 + t148 * t386; + const double t396 = -t142 * t394 + t386 * t148; const double t397 = t396 * t335; const double t398 = t101 * t397; const double t399 = t158 + t183 - t187 - t192 + t351 + t239 + t353 - t246 - t251 + t364 + t398; @@ -668,17 +668,17 @@ struct kernel_traits< BuiltinPBE_C > : const double t418 = t415 * t417; const double t419 = t323 * t123; const double t420 = t419 * t411; - const double t422 = t148 * t412 - t418 * t420; + const double t422 = t412 * t148 - t418 * t420; const double t427 = t405 / 0.48e2 + t409 / 0.768e3; const double t428 = beta * t427; const double t430 = t419 * t427; - const double t432 = t148 * t428 - t418 * t430; + const double t432 = t428 * t148 - t418 * t430; const double t433 = t100 * t432; eps = -t33 + t89 + t91 + t152; - vrho_a = t338 * t7 + t152 - t33 + t89 + t91; - vrho_b = t399 * t7 + t152 - t33 + t89 + t91; + vrho_a = t7 * t338 + t152 - t33 + t89 + t91; + vrho_b = t7 * t399 + t152 - t33 + t89 + t91; vsigma_aa = t401 * t100 * t422 * t335; vsigma_ab = t401 * t433 * t335; vsigma_bb = vsigma_aa; diff --git a/include/exchcxx/impl/builtin/kernels/pc07_k.hpp b/include/exchcxx/impl/builtin/kernels/pc07_k.hpp index c991a8f..97e92a3 100644 --- a/include/exchcxx/impl/builtin/kernels/pc07_k.hpp +++ b/include/exchcxx/impl/builtin/kernels/pc07_k.hpp @@ -313,8 +313,8 @@ struct kernel_traits< BuiltinPC07_K > : const double t285 = t276 * t102; const double t287 = t187 * t283 - t190 * t285; const double t288 = b * t287; - const double t292 = piecewise_functor_5( t88, 0.0, t90, 0.0, -t111 * t288 * t195 - t178 * t280 * t184 + t171 * t278 ); - const double t294 = t273 * t112 + t86 * t292; + const double t292 = piecewise_functor_5( t88, 0.0, t90, 0.0, -t111 * t195 * t288 - t178 * t184 * t280 + t171 * t278 ); + const double t294 = t112 * t273 + t292 * t86; const double t298 = piecewise_functor_3( t3, 0.0, 0.3e1 / 0.2e2 * t8 * t24 * t294 ); @@ -419,7 +419,7 @@ struct kernel_traits< BuiltinPC07_K > : const double t113 = 0.1e1 / t112; const double t114 = t108 * t113; const double t115 = piecewise_functor_5( t91, 0.0, t93, 1.0, t114 ); - const double t117 = t115 * t89 + t46; + const double t117 = t89 * t115 + t46; const double t121 = piecewise_functor_3( t2, 0.0, 0.3e1 / 0.2e2 * t7 * t32 * t117 ); const double t122 = rho_b <= dens_tol; const double t123 = -t18; @@ -579,7 +579,7 @@ struct kernel_traits< BuiltinPC07_K > : const double t113 = 0.1e1 / t112; const double t114 = t108 * t113; const double t115 = piecewise_functor_5( t91, 0.0, t93, 1.0, t114 ); - const double t117 = t115 * t89 + t46; + const double t117 = t89 * t115 + t46; const double t121 = piecewise_functor_3( t2, 0.0, 0.3e1 / 0.2e2 * t7 * t32 * t117 ); const double t122 = rho_b <= dens_tol; const double t123 = -t18; @@ -692,8 +692,8 @@ struct kernel_traits< BuiltinPC07_K > : const double t292 = t274 * t105; const double t294 = t288 * t289 - t291 * t292; const double t296 = 0.1e1 / t111; - const double t300 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * t294 * t296 * b - t279 * t282 * t285 + t272 * t277 ); - const double t302 = t115 * t268 + t300 * t89 - t230; + const double t300 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * b * t294 * t296 - t279 * t282 * t285 + t272 * t277 ); + const double t302 = t268 * t115 + t89 * t300 - t230; const double t307 = piecewise_functor_3( t2, 0.0, 0.3e1 / 0.2e2 * t7 * t217 * t117 + t225 + 0.3e1 / 0.2e2 * t7 * t32 * t302 ); const double t308 = t123 * t210; const double t310 = piecewise_functor_5( t16, 0.0, t12, 0.0, -t9 - t308 ); @@ -751,8 +751,8 @@ struct kernel_traits< BuiltinPC07_K > : const double t412 = t394 * t192; const double t414 = t408 * t409 - t411 * t412; const double t416 = 0.1e1 / t198; - const double t420 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * t414 * t416 * b - t399 * t402 * t405 + t392 * t397 ); - const double t422 = t179 * t420 + t202 * t388 - t350; + const double t420 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * b * t414 * t416 - t399 * t402 * t405 + t392 * t397 ); + const double t422 = t179 * t420 + t388 * t202 - t350; const double t427 = piecewise_functor_3( t122, 0.0, 0.3e1 / 0.2e2 * t7 * t342 * t204 + t321 + 0.3e1 / 0.2e2 * t7 * t132 * t422 ); const double t430 = t38 * t43; const double t431 = 0.5e1 / 0.72e2 * t430; @@ -773,8 +773,8 @@ struct kernel_traits< BuiltinPC07_K > : const double t460 = t451 * t105; const double t462 = t288 * t458 - t291 * t460; const double t463 = b * t462; - const double t467 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * t296 * t463 - t279 * t285 * t455 + t272 * t453 ); - const double t469 = t115 * t448 + t467 * t89 + t431; + const double t467 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * t463 * t296 - t279 * t455 * t285 + t272 * t453 ); + const double t469 = t448 * t115 + t89 * t467 + t431; const double t473 = piecewise_functor_3( t2, 0.0, 0.3e1 / 0.2e2 * t7 * t32 * t469 ); const double t474 = t38 * t137; const double t475 = 0.5e1 / 0.72e2 * t474; @@ -795,8 +795,8 @@ struct kernel_traits< BuiltinPC07_K > : const double t504 = t495 * t192; const double t506 = t408 * t502 - t411 * t504; const double t507 = b * t506; - const double t511 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * t416 * t507 - t399 * t405 * t499 + t392 * t497 ); - const double t513 = t179 * t511 + t202 * t492 + t475; + const double t511 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * t507 * t416 - t399 * t499 * t405 + t392 * t497 ); + const double t513 = t179 * t511 + t492 * t202 + t475; const double t517 = piecewise_functor_3( t122, 0.0, 0.3e1 / 0.2e2 * t7 * t132 * t513 ); const double t522 = t56 * lapl_a * t60 / 0.2916e4; const double t524 = t56 * t67 / 0.5184e4; @@ -813,15 +813,15 @@ struct kernel_traits< BuiltinPC07_K > : const double t542 = t533 * t105; const double t544 = t288 * t540 - t291 * t542; const double t545 = b * t544; - const double t549 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * t296 * t545 - t279 * t285 * t537 + t272 * t535 ); - const double t551 = t115 * t530 + t549 * t89; + const double t549 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * t545 * t296 - t279 * t537 * t285 + t272 * t535 ); + const double t551 = t530 * t115 + t89 * t549; const double t555 = piecewise_functor_3( t2, 0.0, 0.3e1 / 0.2e2 * t7 * t32 * t551 ); const double t560 = t56 * lapl_b * t150 / 0.2916e4; const double t562 = t56 * t157 / 0.5184e4; const double t563 = 0.5e1 / 0.54e2 * t38 * t143 + t560 - t562; const double t565 = t560 - t562; const double t566 = t373 * t565; - const double t568 = t177 * t563 - t372 * t566; + const double t568 = t563 * t177 - t372 * t566; const double t570 = piecewise_functor_3( t182, 0.0, t568 ); const double t571 = piecewise_functor_3( t184, t570, 0.0 ); const double t572 = t571 * t188; @@ -831,8 +831,8 @@ struct kernel_traits< BuiltinPC07_K > : const double t580 = t571 * t192; const double t582 = t408 * t578 - t411 * t580; const double t583 = b * t582; - const double t587 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * t416 * t583 - t399 * t405 * t575 + t392 * t573 ); - const double t589 = t179 * t587 + t202 * t568; + const double t587 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * t583 * t416 - t399 * t575 * t405 + t392 * t573 ); + const double t589 = t179 * t587 + t568 * t202; const double t593 = piecewise_functor_3( t122, 0.0, 0.3e1 / 0.2e2 * t7 * t132 * t589 ); diff --git a/include/exchcxx/impl/builtin/kernels/pc07opt_k.hpp b/include/exchcxx/impl/builtin/kernels/pc07opt_k.hpp index 7cd3f7e..7b12b1c 100644 --- a/include/exchcxx/impl/builtin/kernels/pc07opt_k.hpp +++ b/include/exchcxx/impl/builtin/kernels/pc07opt_k.hpp @@ -313,8 +313,8 @@ struct kernel_traits< BuiltinPC07OPT_K > : const double t285 = t276 * t102; const double t287 = t187 * t283 - t190 * t285; const double t288 = b * t287; - const double t292 = piecewise_functor_5( t88, 0.0, t90, 0.0, -t111 * t288 * t195 - t178 * t280 * t184 + t171 * t278 ); - const double t294 = t273 * t112 + t86 * t292; + const double t292 = piecewise_functor_5( t88, 0.0, t90, 0.0, -t111 * t195 * t288 - t178 * t184 * t280 + t171 * t278 ); + const double t294 = t112 * t273 + t292 * t86; const double t298 = piecewise_functor_3( t3, 0.0, 0.3e1 / 0.2e2 * t8 * t24 * t294 ); @@ -419,7 +419,7 @@ struct kernel_traits< BuiltinPC07OPT_K > : const double t113 = 0.1e1 / t112; const double t114 = t108 * t113; const double t115 = piecewise_functor_5( t91, 0.0, t93, 1.0, t114 ); - const double t117 = t115 * t89 + t46; + const double t117 = t89 * t115 + t46; const double t121 = piecewise_functor_3( t2, 0.0, 0.3e1 / 0.2e2 * t7 * t32 * t117 ); const double t122 = rho_b <= dens_tol; const double t123 = -t18; @@ -579,7 +579,7 @@ struct kernel_traits< BuiltinPC07OPT_K > : const double t113 = 0.1e1 / t112; const double t114 = t108 * t113; const double t115 = piecewise_functor_5( t91, 0.0, t93, 1.0, t114 ); - const double t117 = t115 * t89 + t46; + const double t117 = t89 * t115 + t46; const double t121 = piecewise_functor_3( t2, 0.0, 0.3e1 / 0.2e2 * t7 * t32 * t117 ); const double t122 = rho_b <= dens_tol; const double t123 = -t18; @@ -692,8 +692,8 @@ struct kernel_traits< BuiltinPC07OPT_K > : const double t292 = t274 * t105; const double t294 = t288 * t289 - t291 * t292; const double t296 = 0.1e1 / t111; - const double t300 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * t294 * t296 * b - t279 * t282 * t285 + t272 * t277 ); - const double t302 = t115 * t268 + t300 * t89 - t230; + const double t300 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * b * t294 * t296 - t279 * t282 * t285 + t272 * t277 ); + const double t302 = t268 * t115 + t89 * t300 - t230; const double t307 = piecewise_functor_3( t2, 0.0, 0.3e1 / 0.2e2 * t7 * t217 * t117 + t225 + 0.3e1 / 0.2e2 * t7 * t32 * t302 ); const double t308 = t123 * t210; const double t310 = piecewise_functor_5( t16, 0.0, t12, 0.0, -t9 - t308 ); @@ -751,8 +751,8 @@ struct kernel_traits< BuiltinPC07OPT_K > : const double t412 = t394 * t192; const double t414 = t408 * t409 - t411 * t412; const double t416 = 0.1e1 / t198; - const double t420 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * t414 * t416 * b - t399 * t402 * t405 + t392 * t397 ); - const double t422 = t179 * t420 + t202 * t388 - t350; + const double t420 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * b * t414 * t416 - t399 * t402 * t405 + t392 * t397 ); + const double t422 = t179 * t420 + t388 * t202 - t350; const double t427 = piecewise_functor_3( t122, 0.0, 0.3e1 / 0.2e2 * t7 * t342 * t204 + t321 + 0.3e1 / 0.2e2 * t7 * t132 * t422 ); const double t430 = t38 * t43; const double t431 = 0.5e1 / 0.72e2 * t430; @@ -773,8 +773,8 @@ struct kernel_traits< BuiltinPC07OPT_K > : const double t460 = t451 * t105; const double t462 = t288 * t458 - t291 * t460; const double t463 = b * t462; - const double t467 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * t296 * t463 - t279 * t285 * t455 + t272 * t453 ); - const double t469 = t115 * t448 + t467 * t89 + t431; + const double t467 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * t463 * t296 - t279 * t455 * t285 + t272 * t453 ); + const double t469 = t448 * t115 + t89 * t467 + t431; const double t473 = piecewise_functor_3( t2, 0.0, 0.3e1 / 0.2e2 * t7 * t32 * t469 ); const double t474 = t38 * t137; const double t475 = 0.5e1 / 0.72e2 * t474; @@ -795,8 +795,8 @@ struct kernel_traits< BuiltinPC07OPT_K > : const double t504 = t495 * t192; const double t506 = t408 * t502 - t411 * t504; const double t507 = b * t506; - const double t511 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * t416 * t507 - t399 * t405 * t499 + t392 * t497 ); - const double t513 = t179 * t511 + t202 * t492 + t475; + const double t511 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * t507 * t416 - t399 * t499 * t405 + t392 * t497 ); + const double t513 = t179 * t511 + t492 * t202 + t475; const double t517 = piecewise_functor_3( t122, 0.0, 0.3e1 / 0.2e2 * t7 * t132 * t513 ); const double t522 = t56 * lapl_a * t60 / 0.2916e4; const double t524 = t56 * t67 / 0.5184e4; @@ -813,15 +813,15 @@ struct kernel_traits< BuiltinPC07OPT_K > : const double t542 = t533 * t105; const double t544 = t288 * t540 - t291 * t542; const double t545 = b * t544; - const double t549 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * t296 * t545 - t279 * t285 * t537 + t272 * t535 ); - const double t551 = t115 * t530 + t549 * t89; + const double t549 = piecewise_functor_5( t91, 0.0, t93, 0.0, -t114 * t545 * t296 - t279 * t537 * t285 + t272 * t535 ); + const double t551 = t530 * t115 + t89 * t549; const double t555 = piecewise_functor_3( t2, 0.0, 0.3e1 / 0.2e2 * t7 * t32 * t551 ); const double t560 = t56 * lapl_b * t150 / 0.2916e4; const double t562 = t56 * t157 / 0.5184e4; const double t563 = 0.5e1 / 0.54e2 * t38 * t143 + t560 - t562; const double t565 = t560 - t562; const double t566 = t373 * t565; - const double t568 = t177 * t563 - t372 * t566; + const double t568 = t563 * t177 - t372 * t566; const double t570 = piecewise_functor_3( t182, 0.0, t568 ); const double t571 = piecewise_functor_3( t184, t570, 0.0 ); const double t572 = t571 * t188; @@ -831,8 +831,8 @@ struct kernel_traits< BuiltinPC07OPT_K > : const double t580 = t571 * t192; const double t582 = t408 * t578 - t411 * t580; const double t583 = b * t582; - const double t587 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * t416 * t583 - t399 * t405 * t575 + t392 * t573 ); - const double t589 = t179 * t587 + t202 * t568; + const double t587 = piecewise_functor_5( t180, 0.0, t181, 0.0, -t201 * t583 * t416 - t399 * t575 * t405 + t392 * t573 ); + const double t589 = t179 * t587 + t568 * t202; const double t593 = piecewise_functor_3( t122, 0.0, 0.3e1 / 0.2e2 * t7 * t132 * t589 ); diff --git a/include/exchcxx/impl/builtin/kernels/pkzb_c.hpp b/include/exchcxx/impl/builtin/kernels/pkzb_c.hpp new file mode 100644 index 0000000..ef4e569 --- /dev/null +++ b/include/exchcxx/impl/builtin/kernels/pkzb_c.hpp @@ -0,0 +1,1631 @@ +#pragma once +#include + +#include +#include +#include +#include + +#include + + + +namespace ExchCXX { + +template <> +struct kernel_traits< BuiltinPKZB_C > : + public mgga_screening_interface< BuiltinPKZB_C > { + + static constexpr bool is_lda = false; + static constexpr bool is_gga = false; + static constexpr bool is_mgga = true; + static constexpr bool needs_laplacian = false; + static constexpr bool is_kedf = false; + static constexpr bool is_epc = false; + + static constexpr double dens_tol = 1e-13; + static constexpr double zeta_tol = 1e-15; + static constexpr double sigma_tol = 4.641588833612789e-18; + static constexpr double tau_tol = is_kedf ? 0.0 : 1e-20; + + static constexpr bool is_hyb = false; + static constexpr double exx_coeff = 0.0; + + + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_unpolar_impl( double rho, double sigma, double lapl, double tau, double& eps ) { + + (void)(lapl); + (void)(eps); + constexpr double t11 = constants::m_cbrt_3; + constexpr double t13 = constants::m_cbrt_one_ov_pi; + constexpr double t15 = constants::m_cbrt_4; + constexpr double t49 = constants::m_cbrt_2; + constexpr double t70 = constants::m_pi_sq; + constexpr double t14 = t11 * t13; + constexpr double t16 = t15 * t15; + constexpr double t28 = t11 * t11; + constexpr double t29 = t13 * t13; + constexpr double t30 = t28 * t29; + constexpr double t71 = 0.1e1 / t70; + constexpr double t83 = 0.1e1 / t13; + constexpr double t84 = t83 * t15; + constexpr double t103 = t49 * t49; + constexpr double t107 = 0.1e1 / t29; + constexpr double t108 = t11 * t107; + constexpr double t109 = t108 * t16; + constexpr double t130 = t14 * t16; + constexpr double t143 = t30 * t15; + constexpr double t220 = t16 * t49; + + + const double t2 = sigma * sigma; + const double t3 = rho * rho; + const double t4 = 0.1e1 / t3; + const double t5 = t2 * t4; + const double t6 = tau * tau; + const double t7 = 0.1e1 / t6; + const double t10 = 0.1e1 + 0.828125e-2 * t5 * t7; + const double t17 = safe_math::cbrt( rho ); + const double t18 = 0.1e1 / t17; + const double t20 = t14 * t16 * t18; + const double t22 = 0.1e1 + 0.53425e-1 * t20; + const double t23 = safe_math::sqrt( t20 ); + const double t26 = pow_3_2( t20 ); + const double t31 = t17 * t17; + const double t32 = 0.1e1 / t31; + const double t34 = t30 * t15 * t32; + const double t36 = 0.379785e1 * t23 + 0.8969e0 * t20 + 0.204775e0 * t26 + 0.123235e0 * t34; + const double t39 = 0.1e1 + 0.16081979498692535067e2 / t36; + const double t40 = safe_math::log( t39 ); + const double t42 = 0.621814e-1 * t22 * t40; + const double t43 = 0.1e1 <= zeta_tol; + const double t44 = safe_math::cbrt( zeta_tol ); + const double t45 = t44 * zeta_tol; + const double t46 = piecewise_functor_3( t43, t45, 1.0 ); + const double t52 = 0.1e1 / ( 0.2e1 * t49 - 0.2e1 ); + const double t53 = ( 0.2e1 * t46 - 0.2e1 ) * t52; + const double t55 = 0.1e1 + 0.278125e-1 * t20; + const double t60 = 0.51785e1 * t23 + 0.905775e0 * t20 + 0.1100325e0 * t26 + 0.1241775e0 * t34; + const double t63 = 0.1e1 + 0.29608749977793437516e2 / t60; + const double t64 = safe_math::log( t63 ); + const double t67 = 0.19751673498613801407e-1 * t53 * t55 * t64; + const double t68 = safe_math::log( 0.2e1 ); + const double t69 = 0.1e1 - t68; + const double t72 = t69 * t71; + const double t73 = t44 * t44; + const double t74 = piecewise_functor_3( t43, t73, 1.0 ); + const double t75 = t74 * t74; + const double t76 = t75 * t74; + const double t78 = 0.1e1 / t17 / t3; + const double t79 = sigma * t78; + const double t81 = 0.1e1 / t75; + const double t85 = t81 * t28 * t84; + const double t88 = 0.1e1 / t69; + const double t91 = 0.1e1 / t76; + const double t92 = t70 * t91; + const double t94 = safe_math::exp( -( -t42 + t67 ) * t88 * t92 ); + const double t95 = t94 - 0.1e1; + const double t96 = 0.1e1 / t95; + const double t97 = t88 * t96; + const double t98 = t3 * t3; + const double t100 = 0.1e1 / t31 / t98; + const double t101 = t2 * t100; + const double t104 = t75 * t75; + const double t105 = 0.1e1 / t104; + const double t106 = t103 * t105; + const double t110 = t106 * t109; + const double t113 = t79 * t49 * t85 / 0.96e2 + 0.21437009059034868486e-3 * t97 * t101 * t110; + const double t114 = t113 * t88; + const double t117 = 0.1e1 + 0.65854491829355115987e0 * t97 * t113; + const double t118 = 0.1e1 / t117; + const double t121 = 0.1e1 + 0.65854491829355115987e0 * t114 * t118; + const double t122 = safe_math::log( t121 ); + const double t125 = t72 * t76 * t122 - t42 + t67; + const double t126 = t10 * t125; + const double t129 = rho / 0.2e1 <= dens_tol || t43; + const double t133 = piecewise_functor_3( t43, 0.1e1 / t44, 1.0 ); + const double t135 = t130 * t18 * t49 * t133; + const double t137 = 0.1e1 + 0.53425e-1 * t135; + const double t138 = safe_math::sqrt( t135 ); + const double t141 = pow_3_2( t135 ); + const double t145 = t133 * t133; + const double t147 = t143 * t32 * t103 * t145; + const double t149 = 0.379785e1 * t138 + 0.8969e0 * t135 + 0.204775e0 * t141 + 0.123235e0 * t147; + const double t152 = 0.1e1 + 0.16081979498692535067e2 / t149; + const double t153 = safe_math::log( t152 ); + const double t155 = 0.621814e-1 * t137 * t153; + const double t156 = 0.2e1 <= zeta_tol; + const double t158 = piecewise_functor_3( t156, t45, 0.2e1 * t49 ); + const double t159 = 0.e0 <= zeta_tol; + const double t160 = piecewise_functor_3( t159, t45, 0.0 ); + const double t162 = ( t158 + t160 - 0.2e1 ) * t52; + const double t164 = 0.1e1 + 0.5137e-1 * t135; + const double t169 = 0.705945e1 * t138 + 0.1549425e1 * t135 + 0.420775e0 * t141 + 0.1562925e0 * t147; + const double t172 = 0.1e1 + 0.32163958997385070134e2 / t169; + const double t173 = safe_math::log( t172 ); + const double t177 = 0.1e1 + 0.278125e-1 * t135; + const double t182 = 0.51785e1 * t138 + 0.905775e0 * t135 + 0.1100325e0 * t141 + 0.1241775e0 * t147; + const double t185 = 0.1e1 + 0.29608749977793437516e2 / t182; + const double t186 = safe_math::log( t185 ); + const double t187 = t177 * t186; + const double t190 = t162 * ( -0.310907e-1 * t164 * t173 + t155 - 0.19751673498613801407e-1 * t187 ); + const double t192 = 0.19751673498613801407e-1 * t162 * t187; + const double t193 = piecewise_functor_3( t156, t73, t103 ); + const double t194 = piecewise_functor_3( t159, t73, 0.0 ); + const double t196 = t193 / 0.2e1 + t194 / 0.2e1; + const double t197 = t196 * t196; + const double t198 = t197 * t196; + const double t199 = 0.1e1 / t197; + const double t200 = t199 * t28; + const double t204 = t84 * t103 / t133; + const double t209 = 0.1e1 / t198; + const double t210 = t70 * t209; + const double t212 = safe_math::exp( -( -t155 + t190 + t192 ) * t88 * t210 ); + const double t213 = t212 - 0.1e1; + const double t214 = 0.1e1 / t213; + const double t215 = t88 * t214; + const double t216 = t197 * t197; + const double t217 = 0.1e1 / t216; + const double t221 = 0.1e1 / t145; + const double t222 = t220 * t221; + const double t223 = t108 * t222; + const double t226 = t79 * t200 * t204 / 0.96e2 + 0.42874018118069736972e-3 * t215 * t101 * t217 * t223; + const double t227 = t226 * t88; + const double t230 = 0.1e1 + 0.65854491829355115987e0 * t215 * t226; + const double t231 = 0.1e1 / t230; + const double t234 = 0.1e1 + 0.65854491829355115987e0 * t227 * t231; + const double t235 = safe_math::log( t234 ); + const double t239 = piecewise_functor_3( t43, zeta_tol, 1.0 ); + const double t242 = piecewise_functor_3( t129, 0.0, ( t72 * t198 * t235 - t155 + t190 + t192 ) * t239 / 0.2e1 ); + const double t243 = t7 * t242; + const double t245 = 0.478125e-1 * t5 * t243; + + + eps = t126 - t245; + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_vxc_unpolar_impl( double rho, double sigma, double lapl, double tau, double& eps, double& vrho, double& vsigma, double& vlapl, double& vtau ) { + + (void)(lapl); + (void)(eps); + constexpr double t11 = constants::m_cbrt_3; + constexpr double t13 = constants::m_cbrt_one_ov_pi; + constexpr double t15 = constants::m_cbrt_4; + constexpr double t49 = constants::m_cbrt_2; + constexpr double t70 = constants::m_pi_sq; + constexpr double t14 = t11 * t13; + constexpr double t16 = t15 * t15; + constexpr double t28 = t11 * t11; + constexpr double t29 = t13 * t13; + constexpr double t30 = t28 * t29; + constexpr double t71 = 0.1e1 / t70; + constexpr double t83 = 0.1e1 / t13; + constexpr double t84 = t83 * t15; + constexpr double t103 = t49 * t49; + constexpr double t107 = 0.1e1 / t29; + constexpr double t108 = t11 * t107; + constexpr double t109 = t108 * t16; + constexpr double t130 = t14 * t16; + constexpr double t143 = t30 * t15; + constexpr double t220 = t16 * t49; + constexpr double t263 = t13 * t16; + constexpr double t445 = t107 * t16; + constexpr double t446 = t445 * t49; + constexpr double t498 = t28 * t83 * t15; + + + const double t2 = sigma * sigma; + const double t3 = rho * rho; + const double t4 = 0.1e1 / t3; + const double t5 = t2 * t4; + const double t6 = tau * tau; + const double t7 = 0.1e1 / t6; + const double t10 = 0.1e1 + 0.828125e-2 * t5 * t7; + const double t17 = safe_math::cbrt( rho ); + const double t18 = 0.1e1 / t17; + const double t20 = t14 * t16 * t18; + const double t22 = 0.1e1 + 0.53425e-1 * t20; + const double t23 = safe_math::sqrt( t20 ); + const double t26 = pow_3_2( t20 ); + const double t31 = t17 * t17; + const double t32 = 0.1e1 / t31; + const double t34 = t30 * t15 * t32; + const double t36 = 0.379785e1 * t23 + 0.8969e0 * t20 + 0.204775e0 * t26 + 0.123235e0 * t34; + const double t39 = 0.1e1 + 0.16081979498692535067e2 / t36; + const double t40 = safe_math::log( t39 ); + const double t42 = 0.621814e-1 * t22 * t40; + const double t43 = 0.1e1 <= zeta_tol; + const double t44 = safe_math::cbrt( zeta_tol ); + const double t45 = t44 * zeta_tol; + const double t46 = piecewise_functor_3( t43, t45, 1.0 ); + const double t52 = 0.1e1 / ( 0.2e1 * t49 - 0.2e1 ); + const double t53 = ( 0.2e1 * t46 - 0.2e1 ) * t52; + const double t55 = 0.1e1 + 0.278125e-1 * t20; + const double t60 = 0.51785e1 * t23 + 0.905775e0 * t20 + 0.1100325e0 * t26 + 0.1241775e0 * t34; + const double t63 = 0.1e1 + 0.29608749977793437516e2 / t60; + const double t64 = safe_math::log( t63 ); + const double t67 = 0.19751673498613801407e-1 * t53 * t55 * t64; + const double t68 = safe_math::log( 0.2e1 ); + const double t69 = 0.1e1 - t68; + const double t72 = t69 * t71; + const double t73 = t44 * t44; + const double t74 = piecewise_functor_3( t43, t73, 1.0 ); + const double t75 = t74 * t74; + const double t76 = t75 * t74; + const double t78 = 0.1e1 / t17 / t3; + const double t79 = sigma * t78; + const double t81 = 0.1e1 / t75; + const double t85 = t81 * t28 * t84; + const double t88 = 0.1e1 / t69; + const double t91 = 0.1e1 / t76; + const double t92 = t70 * t91; + const double t94 = safe_math::exp( -( -t42 + t67 ) * t88 * t92 ); + const double t95 = t94 - 0.1e1; + const double t96 = 0.1e1 / t95; + const double t97 = t88 * t96; + const double t98 = t3 * t3; + const double t100 = 0.1e1 / t31 / t98; + const double t101 = t2 * t100; + const double t104 = t75 * t75; + const double t105 = 0.1e1 / t104; + const double t106 = t103 * t105; + const double t110 = t106 * t109; + const double t113 = t79 * t49 * t85 / 0.96e2 + 0.21437009059034868486e-3 * t97 * t101 * t110; + const double t114 = t113 * t88; + const double t117 = 0.1e1 + 0.65854491829355115987e0 * t97 * t113; + const double t118 = 0.1e1 / t117; + const double t121 = 0.1e1 + 0.65854491829355115987e0 * t114 * t118; + const double t122 = safe_math::log( t121 ); + const double t125 = t72 * t76 * t122 - t42 + t67; + const double t126 = t10 * t125; + const double t129 = rho / 0.2e1 <= dens_tol || t43; + const double t133 = piecewise_functor_3( t43, 0.1e1 / t44, 1.0 ); + const double t135 = t130 * t18 * t49 * t133; + const double t137 = 0.1e1 + 0.53425e-1 * t135; + const double t138 = safe_math::sqrt( t135 ); + const double t141 = pow_3_2( t135 ); + const double t145 = t133 * t133; + const double t147 = t143 * t32 * t103 * t145; + const double t149 = 0.379785e1 * t138 + 0.8969e0 * t135 + 0.204775e0 * t141 + 0.123235e0 * t147; + const double t152 = 0.1e1 + 0.16081979498692535067e2 / t149; + const double t153 = safe_math::log( t152 ); + const double t155 = 0.621814e-1 * t137 * t153; + const double t156 = 0.2e1 <= zeta_tol; + const double t158 = piecewise_functor_3( t156, t45, 0.2e1 * t49 ); + const double t159 = 0.e0 <= zeta_tol; + const double t160 = piecewise_functor_3( t159, t45, 0.0 ); + const double t162 = ( t158 + t160 - 0.2e1 ) * t52; + const double t164 = 0.1e1 + 0.5137e-1 * t135; + const double t169 = 0.705945e1 * t138 + 0.1549425e1 * t135 + 0.420775e0 * t141 + 0.1562925e0 * t147; + const double t172 = 0.1e1 + 0.32163958997385070134e2 / t169; + const double t173 = safe_math::log( t172 ); + const double t177 = 0.1e1 + 0.278125e-1 * t135; + const double t182 = 0.51785e1 * t138 + 0.905775e0 * t135 + 0.1100325e0 * t141 + 0.1241775e0 * t147; + const double t185 = 0.1e1 + 0.29608749977793437516e2 / t182; + const double t186 = safe_math::log( t185 ); + const double t187 = t177 * t186; + const double t190 = t162 * ( -0.310907e-1 * t164 * t173 + t155 - 0.19751673498613801407e-1 * t187 ); + const double t192 = 0.19751673498613801407e-1 * t162 * t187; + const double t193 = piecewise_functor_3( t156, t73, t103 ); + const double t194 = piecewise_functor_3( t159, t73, 0.0 ); + const double t196 = t193 / 0.2e1 + t194 / 0.2e1; + const double t197 = t196 * t196; + const double t198 = t197 * t196; + const double t199 = 0.1e1 / t197; + const double t200 = t199 * t28; + const double t204 = t84 * t103 / t133; + const double t209 = 0.1e1 / t198; + const double t210 = t70 * t209; + const double t212 = safe_math::exp( -( -t155 + t190 + t192 ) * t88 * t210 ); + const double t213 = t212 - 0.1e1; + const double t214 = 0.1e1 / t213; + const double t215 = t88 * t214; + const double t216 = t197 * t197; + const double t217 = 0.1e1 / t216; + const double t221 = 0.1e1 / t145; + const double t222 = t220 * t221; + const double t223 = t108 * t222; + const double t226 = t79 * t200 * t204 / 0.96e2 + 0.42874018118069736972e-3 * t215 * t101 * t217 * t223; + const double t227 = t226 * t88; + const double t230 = 0.1e1 + 0.65854491829355115987e0 * t215 * t226; + const double t231 = 0.1e1 / t230; + const double t234 = 0.1e1 + 0.65854491829355115987e0 * t227 * t231; + const double t235 = safe_math::log( t234 ); + const double t239 = piecewise_functor_3( t43, zeta_tol, 1.0 ); + const double t242 = piecewise_functor_3( t129, 0.0, ( t72 * t198 * t235 - t155 + t190 + t192 ) * t239 / 0.2e1 ); + const double t243 = t7 * t242; + const double t245 = 0.478125e-1 * t5 * t243; + const double t246 = t3 * rho; + const double t247 = 0.1e1 / t246; + const double t248 = t2 * t247; + const double t249 = t7 * t125; + const double t250 = t248 * t249; + const double t253 = 0.1e1 / t17 / rho; + const double t254 = t16 * t253; + const double t257 = 0.11073470983333333333e-2 * t14 * t254 * t40; + const double t258 = t36 * t36; + const double t259 = 0.1e1 / t258; + const double t260 = t22 * t259; + const double t262 = 0.1e1 / t23 * t11; + const double t264 = t263 * t253; + const double t265 = t262 * t264; + const double t267 = t14 * t254; + const double t269 = safe_math::sqrt( t20 ); + const double t270 = t269 * t11; + const double t271 = t270 * t264; + const double t274 = 0.1e1 / t31 / rho; + const double t276 = t30 * t15 * t274; + const double t278 = -0.632975e0 * t265 - 0.29896666666666666667e0 * t267 - 0.1023875e0 * t271 - 0.82156666666666666667e-1 * t276; + const double t279 = 0.1e1 / t39; + const double t280 = t278 * t279; + const double t282 = 0.1e1 * t260 * t280; + const double t283 = t53 * t11; + const double t287 = 0.18311447306006545054e-3 * t283 * t263 * t253 * t64; + const double t288 = t53 * t55; + const double t289 = t60 * t60; + const double t290 = 0.1e1 / t289; + const double t295 = -0.86308333333333333334e0 * t265 - 0.301925e0 * t267 - 0.5501625e-1 * t271 - 0.82785e-1 * t276; + const double t297 = 0.1e1 / t63; + const double t298 = t290 * t295 * t297; + const double t300 = 0.5848223622634646207e0 * t288 * t298; + const double t302 = 0.1e1 / t17 / t246; + const double t303 = sigma * t302; + const double t307 = t69 * t69; + const double t308 = 0.1e1 / t307; + const double t309 = t95 * t95; + const double t310 = 0.1e1 / t309; + const double t311 = t308 * t310; + const double t312 = t311 * t2; + const double t313 = t100 * t103; + const double t315 = 0.1e1 / t104 / t76; + const double t316 = t313 * t315; + const double t317 = t312 * t316; + const double t318 = t257 + t282 - t287 - t300; + const double t319 = t318 * t70; + const double t320 = t319 * t94; + const double t321 = t109 * t320; + const double t324 = t98 * rho; + const double t326 = 0.1e1 / t31 / t324; + const double t327 = t2 * t326; + const double t331 = -0.7e1 / 0.288e3 * t303 * t49 * t85 + 0.21437009059034868486e-3 * t317 * t321 - 0.10003937560882938627e-2 * t97 * t327 * t110; + const double t332 = t331 * t88; + const double t335 = t117 * t117; + const double t336 = 0.1e1 / t335; + const double t337 = t311 * t113; + const double t338 = t91 * t94; + const double t339 = t319 * t338; + const double t344 = 0.65854491829355115987e0 * t337 * t339 + 0.65854491829355115987e0 * t97 * t331; + const double t345 = t336 * t344; + const double t348 = 0.65854491829355115987e0 * t332 * t118 - 0.65854491829355115987e0 * t114 * t345; + const double t350 = 0.1e1 / t121; + const double t353 = t72 * t76 * t348 * t350 + t257 + t282 - t287 - t300; + const double t354 = t10 * t353; + const double t355 = t248 * t243; + const double t357 = t253 * t49; + const double t358 = t133 * t153; + const double t361 = 0.11073470983333333333e-2 * t130 * t357 * t358; + const double t362 = t149 * t149; + const double t363 = 0.1e1 / t362; + const double t364 = t137 * t363; + const double t367 = 0.1e1 / t138 * t11 * t13; + const double t368 = t49 * t133; + const double t369 = t254 * t368; + const double t370 = t367 * t369; + const double t372 = t357 * t133; + const double t373 = t130 * t372; + const double t375 = safe_math::sqrt( t135 ); + const double t377 = t375 * t11 * t13; + const double t378 = t377 * t369; + const double t382 = t143 * t274 * t103 * t145; + const double t384 = -0.632975e0 * t370 - 0.29896666666666666667e0 * t373 - 0.1023875e0 * t378 - 0.82156666666666666667e-1 * t382; + const double t385 = 0.1e1 / t152; + const double t386 = t384 * t385; + const double t388 = 0.1e1 * t364 * t386; + const double t389 = t133 * t173; + const double t393 = t169 * t169; + const double t394 = 0.1e1 / t393; + const double t395 = t164 * t394; + const double t400 = -0.1176575e1 * t370 - 0.516475e0 * t373 - 0.2103875e0 * t378 - 0.104195e0 * t382; + const double t401 = 0.1e1 / t172; + const double t402 = t400 * t401; + const double t405 = t133 * t186; + const double t409 = t182 * t182; + const double t410 = 0.1e1 / t409; + const double t411 = t177 * t410; + const double t416 = -0.86308333333333333334e0 * t370 - 0.301925e0 * t373 - 0.5501625e-1 * t378 - 0.82785e-1 * t382; + const double t417 = 0.1e1 / t185; + const double t418 = t416 * t417; + const double t422 = t162 * ( 0.53237641966666666666e-3 * t130 * t357 * t389 + 0.1e1 * t395 * t402 - t361 - t388 + 0.18311447306006545054e-3 * t130 * t357 * t405 + 0.5848223622634646207e0 * t411 * t418 ); + const double t423 = t162 * t14; + const double t424 = t368 * t186; + const double t427 = 0.18311447306006545054e-3 * t423 * t254 * t424; + const double t428 = t162 * t177; + const double t430 = t410 * t416 * t417; + const double t432 = 0.5848223622634646207e0 * t428 * t430; + const double t436 = t213 * t213; + const double t437 = 0.1e1 / t436; + const double t438 = t308 * t437; + const double t439 = t438 * t2; + const double t441 = 0.1e1 / t216 / t198; + const double t442 = t100 * t441; + const double t443 = t442 * t11; + const double t444 = t439 * t443; + const double t447 = t361 + t388 + t422 - t427 - t432; + const double t449 = t70 * t212; + const double t450 = t221 * t447 * t449; + const double t451 = t446 * t450; + const double t458 = -0.7e1 / 0.288e3 * t303 * t200 * t204 + 0.42874018118069736972e-3 * t444 * t451 - 0.20007875121765877254e-2 * t215 * t327 * t217 * t223; + const double t459 = t458 * t88; + const double t462 = t230 * t230; + const double t463 = 0.1e1 / t462; + const double t464 = t438 * t226; + const double t465 = t447 * t70; + const double t466 = t209 * t212; + const double t467 = t465 * t466; + const double t472 = 0.65854491829355115987e0 * t464 * t467 + 0.65854491829355115987e0 * t215 * t458; + const double t473 = t463 * t472; + const double t476 = 0.65854491829355115987e0 * t459 * t231 - 0.65854491829355115987e0 * t227 * t473; + const double t478 = 0.1e1 / t234; + const double t484 = piecewise_functor_3( t129, 0.0, ( t72 * t198 * t476 * t478 + t361 + t388 + t422 - t427 - t432 ) * t239 / 0.2e1 ); + const double t485 = t7 * t484; + const double t486 = t5 * t485; + const double t490 = sigma * t4; + const double t492 = 0.165625e-1 * t490 * t249; + const double t493 = t10 * t69; + const double t494 = t493 * t71; + const double t495 = t78 * t49; + const double t501 = sigma * t100; + const double t505 = t495 * t81 * t498 / 0.96e2 + 0.42874018118069736972e-3 * t97 * t501 * t110; + const double t506 = t505 * t88; + const double t509 = t113 * t308; + const double t510 = t336 * t96; + const double t511 = t510 * t505; + const double t514 = 0.65854491829355115987e0 * t506 * t118 - 0.4336814094102599731e0 * t509 * t511; + const double t515 = t76 * t514; + const double t516 = t515 * t350; + const double t517 = t494 * t516; + const double t519 = 0.95625e-1 * t490 * t243; + const double t520 = t72 * t198; + const double t529 = t78 * t199 * t28 * t204 / 0.96e2 + 0.85748036236139473944e-3 * t215 * t501 * t217 * t223; + const double t530 = t529 * t88; + const double t533 = t226 * t308; + const double t534 = t463 * t214; + const double t535 = t534 * t529; + const double t538 = 0.65854491829355115987e0 * t530 * t231 - 0.4336814094102599731e0 * t533 * t535; + const double t543 = piecewise_functor_3( t129, 0.0, t520 * t538 * t478 * t239 / 0.2e1 ); + const double t544 = t7 * t543; + const double t546 = 0.478125e-1 * t5 * t544; + const double t549 = 0.1e1 / t6 / tau; + const double t550 = t549 * t125; + const double t552 = 0.165625e-1 * t5 * t550; + const double t553 = t549 * t242; + const double t555 = 0.95625e-1 * t5 * t553; + + + eps = t126 - t245; + vrho = t126 - t245 + rho * ( -0.165625e-1 * t250 + t354 + 0.95625e-1 * t355 - 0.478125e-1 * t486 ); + vsigma = rho * ( t492 + t517 - t519 - t546 ); + vlapl = 0.e0; + vtau = rho * ( -t552 + t555 ); + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_polar_impl( double rho_a, double rho_b, double sigma_aa, double sigma_ab, double sigma_bb, double lapl_a, double lapl_b, double tau_a, double tau_b, double& eps ) { + + (void)(lapl_a); + (void)(lapl_b); + (void)(eps); + constexpr double t46 = constants::m_cbrt_3; + constexpr double t48 = constants::m_cbrt_one_ov_pi; + constexpr double t50 = constants::m_cbrt_4; + constexpr double t95 = constants::m_cbrt_2; + constexpr double t133 = constants::m_pi_sq; + constexpr double t49 = t46 * t48; + constexpr double t51 = t50 * t50; + constexpr double t63 = t46 * t46; + constexpr double t64 = t48 * t48; + constexpr double t65 = t63 * t64; + constexpr double t134 = 0.1e1 / t133; + constexpr double t153 = 0.1e1 / t48; + constexpr double t154 = t153 * t50; + constexpr double t173 = t95 * t95; + constexpr double t177 = 0.1e1 / t64; + constexpr double t178 = t46 * t177; + constexpr double t179 = t178 * t51; + constexpr double t204 = t49 * t51; + constexpr double t218 = t65 * t50; + + + const double t2 = rho_a * rho_a; + const double t3 = safe_math::cbrt( rho_a ); + const double t4 = t3 * t3; + const double t6 = 0.1e1 / t4 / t2; + const double t7 = sigma_aa * t6; + const double t8 = rho_a - rho_b; + const double t9 = rho_a + rho_b; + const double t10 = 0.1e1 / t9; + const double t11 = t8 * t10; + const double t12 = 0.1e1 + t11; + const double t13 = t12 / 0.2e1; + const double t14 = safe_math::cbrt( t13 ); + const double t15 = t14 * t14; + const double t16 = t15 * t13; + const double t18 = rho_b * rho_b; + const double t19 = safe_math::cbrt( rho_b ); + const double t20 = t19 * t19; + const double t22 = 0.1e1 / t20 / t18; + const double t23 = sigma_bb * t22; + const double t24 = 0.1e1 - t11; + const double t25 = t24 / 0.2e1; + const double t26 = safe_math::cbrt( t25 ); + const double t27 = t26 * t26; + const double t28 = t27 * t25; + const double t30 = t16 * t7 + t23 * t28; + const double t31 = t30 * t30; + const double t33 = 0.1e1 / t4 / rho_a; + const double t34 = tau_a * t33; + const double t37 = 0.1e1 / t20 / rho_b; + const double t38 = tau_b * t37; + const double t40 = t16 * t34 + t28 * t38; + const double t41 = t40 * t40; + const double t42 = 0.1e1 / t41; + const double t45 = 0.1e1 + 0.828125e-2 * t31 * t42; + const double t52 = safe_math::cbrt( t9 ); + const double t53 = 0.1e1 / t52; + const double t54 = t51 * t53; + const double t55 = t49 * t54; + const double t57 = 0.1e1 + 0.53425e-1 * t55; + const double t58 = safe_math::sqrt( t55 ); + const double t61 = pow_3_2( t55 ); + const double t66 = t52 * t52; + const double t67 = 0.1e1 / t66; + const double t68 = t50 * t67; + const double t69 = t65 * t68; + const double t71 = 0.379785e1 * t58 + 0.8969e0 * t55 + 0.204775e0 * t61 + 0.123235e0 * t69; + const double t74 = 0.1e1 + 0.16081979498692535067e2 / t71; + const double t75 = safe_math::log( t74 ); + const double t77 = 0.621814e-1 * t57 * t75; + const double t78 = t8 * t8; + const double t79 = t78 * t78; + const double t80 = t9 * t9; + const double t81 = t80 * t80; + const double t82 = 0.1e1 / t81; + const double t83 = t79 * t82; + const double t84 = t12 <= zeta_tol; + const double t85 = safe_math::cbrt( zeta_tol ); + const double t86 = t85 * zeta_tol; + const double t87 = safe_math::cbrt( t12 ); + const double t88 = t87 * t12; + const double t89 = piecewise_functor_3( t84, t86, t88 ); + const double t90 = t24 <= zeta_tol; + const double t91 = safe_math::cbrt( t24 ); + const double t92 = t91 * t24; + const double t93 = piecewise_functor_3( t90, t86, t92 ); + const double t94 = t89 + t93 - 0.2e1; + const double t98 = 0.1e1 / ( 0.2e1 * t95 - 0.2e1 ); + const double t99 = t94 * t98; + const double t101 = 0.1e1 + 0.5137e-1 * t55; + const double t106 = 0.705945e1 * t58 + 0.1549425e1 * t55 + 0.420775e0 * t61 + 0.1562925e0 * t69; + const double t109 = 0.1e1 + 0.32163958997385070134e2 / t106; + const double t110 = safe_math::log( t109 ); + const double t114 = 0.1e1 + 0.278125e-1 * t55; + const double t119 = 0.51785e1 * t58 + 0.905775e0 * t55 + 0.1100325e0 * t61 + 0.1241775e0 * t69; + const double t122 = 0.1e1 + 0.29608749977793437516e2 / t119; + const double t123 = safe_math::log( t122 ); + const double t124 = t114 * t123; + const double t126 = -0.310907e-1 * t101 * t110 + t77 - 0.19751673498613801407e-1 * t124; + const double t127 = t99 * t126; + const double t128 = t83 * t127; + const double t130 = 0.19751673498613801407e-1 * t99 * t124; + const double t131 = safe_math::log( 0.2e1 ); + const double t132 = 0.1e1 - t131; + const double t135 = t132 * t134; + const double t136 = t85 * t85; + const double t137 = t87 * t87; + const double t138 = piecewise_functor_3( t84, t136, t137 ); + const double t139 = t91 * t91; + const double t140 = piecewise_functor_3( t90, t136, t139 ); + const double t142 = t138 / 0.2e1 + t140 / 0.2e1; + const double t143 = t142 * t142; + const double t144 = t143 * t142; + const double t146 = sigma_aa + 0.2e1 * sigma_ab + sigma_bb; + const double t148 = 0.1e1 / t52 / t80; + const double t149 = t146 * t148; + const double t151 = 0.1e1 / t143; + const double t155 = t151 * t63 * t154; + const double t158 = 0.1e1 / t132; + const double t160 = ( -t77 + t128 + t130 ) * t158; + const double t161 = 0.1e1 / t144; + const double t162 = t133 * t161; + const double t164 = safe_math::exp( -t160 * t162 ); + const double t165 = t164 - 0.1e1; + const double t166 = 0.1e1 / t165; + const double t167 = t158 * t166; + const double t168 = t146 * t146; + const double t170 = 0.1e1 / t66 / t81; + const double t171 = t168 * t170; + const double t174 = t143 * t143; + const double t175 = 0.1e1 / t174; + const double t176 = t173 * t175; + const double t180 = t176 * t179; + const double t183 = t149 * t95 * t155 / 0.96e2 + 0.21437009059034868486e-3 * t167 * t171 * t180; + const double t184 = t183 * t158; + const double t187 = 0.1e1 + 0.65854491829355115987e0 * t167 * t183; + const double t188 = 0.1e1 / t187; + const double t191 = 0.1e1 + 0.65854491829355115987e0 * t184 * t188; + const double t192 = safe_math::log( t191 ); + const double t195 = t135 * t144 * t192 + t128 + t130 - t77; + const double t196 = t45 * t195; + const double t197 = sigma_aa * sigma_aa; + const double t198 = 0.1e1 / t2; + const double t199 = t197 * t198; + const double t200 = tau_a * tau_a; + const double t201 = 0.1e1 / t200; + const double t203 = rho_a <= dens_tol || t84; + const double t205 = t53 * t95; + const double t206 = 0.1e1 / t85; + const double t207 = 0.1e1 / t87; + const double t208 = piecewise_functor_3( t84, t206, t207 ); + const double t210 = t204 * t205 * t208; + const double t212 = 0.1e1 + 0.53425e-1 * t210; + const double t213 = safe_math::sqrt( t210 ); + const double t216 = pow_3_2( t210 ); + const double t219 = t67 * t173; + const double t220 = t208 * t208; + const double t222 = t218 * t219 * t220; + const double t224 = 0.379785e1 * t213 + 0.8969e0 * t210 + 0.204775e0 * t216 + 0.123235e0 * t222; + const double t227 = 0.1e1 + 0.16081979498692535067e2 / t224; + const double t228 = safe_math::log( t227 ); + const double t230 = 0.621814e-1 * t212 * t228; + const double t231 = 0.2e1 <= zeta_tol; + const double t233 = piecewise_functor_3( t231, t86, 0.2e1 * t95 ); + const double t234 = 0.e0 <= zeta_tol; + const double t235 = piecewise_functor_3( t234, t86, 0.0 ); + const double t237 = ( t233 + t235 - 0.2e1 ) * t98; + const double t239 = 0.1e1 + 0.5137e-1 * t210; + const double t244 = 0.705945e1 * t213 + 0.1549425e1 * t210 + 0.420775e0 * t216 + 0.1562925e0 * t222; + const double t247 = 0.1e1 + 0.32163958997385070134e2 / t244; + const double t248 = safe_math::log( t247 ); + const double t252 = 0.1e1 + 0.278125e-1 * t210; + const double t257 = 0.51785e1 * t213 + 0.905775e0 * t210 + 0.1100325e0 * t216 + 0.1241775e0 * t222; + const double t260 = 0.1e1 + 0.29608749977793437516e2 / t257; + const double t261 = safe_math::log( t260 ); + const double t262 = t252 * t261; + const double t265 = t237 * ( -0.310907e-1 * t239 * t248 + t230 - 0.19751673498613801407e-1 * t262 ); + const double t267 = 0.19751673498613801407e-1 * t237 * t262; + const double t268 = piecewise_functor_3( t231, t136, t173 ); + const double t269 = piecewise_functor_3( t234, t136, 0.0 ); + const double t271 = t268 / 0.2e1 + t269 / 0.2e1; + const double t272 = t271 * t271; + const double t273 = t272 * t271; + const double t274 = 0.1e1 / t272; + const double t275 = t274 * t63; + const double t276 = t7 * t275; + const double t277 = 0.1e1 / t208; + const double t279 = t154 * t52 * t277; + const double t284 = 0.1e1 / t273; + const double t285 = t133 * t284; + const double t287 = safe_math::exp( -( -t230 + t265 + t267 ) * t158 * t285 ); + const double t288 = t287 - 0.1e1; + const double t289 = 0.1e1 / t288; + const double t290 = t158 * t289; + const double t291 = t2 * t2; + const double t292 = t291 * rho_a; + const double t294 = 0.1e1 / t3 / t292; + const double t295 = t197 * t294; + const double t296 = t272 * t272; + const double t297 = 0.1e1 / t296; + const double t299 = t290 * t295 * t297; + const double t300 = t51 * t66; + const double t301 = 0.1e1 / t220; + const double t302 = t300 * t301; + const double t303 = t178 * t302; + const double t306 = t276 * t279 / 0.96e2 + 0.21437009059034868486e-3 * t299 * t303; + const double t307 = t306 * t158; + const double t310 = 0.1e1 + 0.65854491829355115987e0 * t290 * t306; + const double t311 = 0.1e1 / t310; + const double t314 = 0.1e1 + 0.65854491829355115987e0 * t307 * t311; + const double t315 = safe_math::log( t314 ); + const double t318 = t135 * t273 * t315 - t230 + t265 + t267; + const double t319 = piecewise_functor_3( t84, zeta_tol, t12 ); + const double t322 = piecewise_functor_3( t203, 0.0, t318 * t319 / 0.2e1 ); + const double t323 = t201 * t322; + const double t325 = 0.2390625e-1 * t199 * t323; + const double t326 = sigma_bb * sigma_bb; + const double t327 = 0.1e1 / t18; + const double t328 = t326 * t327; + const double t329 = tau_b * tau_b; + const double t330 = 0.1e1 / t329; + const double t332 = rho_b <= dens_tol || t90; + const double t333 = 0.1e1 / t91; + const double t334 = piecewise_functor_3( t90, t206, t333 ); + const double t336 = t204 * t205 * t334; + const double t338 = 0.1e1 + 0.53425e-1 * t336; + const double t339 = safe_math::sqrt( t336 ); + const double t342 = pow_3_2( t336 ); + const double t344 = t334 * t334; + const double t346 = t218 * t219 * t344; + const double t348 = 0.379785e1 * t339 + 0.8969e0 * t336 + 0.204775e0 * t342 + 0.123235e0 * t346; + const double t351 = 0.1e1 + 0.16081979498692535067e2 / t348; + const double t352 = safe_math::log( t351 ); + const double t354 = 0.621814e-1 * t338 * t352; + const double t356 = 0.1e1 + 0.5137e-1 * t336; + const double t361 = 0.705945e1 * t339 + 0.1549425e1 * t336 + 0.420775e0 * t342 + 0.1562925e0 * t346; + const double t364 = 0.1e1 + 0.32163958997385070134e2 / t361; + const double t365 = safe_math::log( t364 ); + const double t369 = 0.1e1 + 0.278125e-1 * t336; + const double t374 = 0.51785e1 * t339 + 0.905775e0 * t336 + 0.1100325e0 * t342 + 0.1241775e0 * t346; + const double t377 = 0.1e1 + 0.29608749977793437516e2 / t374; + const double t378 = safe_math::log( t377 ); + const double t379 = t369 * t378; + const double t382 = t237 * ( -0.310907e-1 * t356 * t365 + t354 - 0.19751673498613801407e-1 * t379 ); + const double t384 = 0.19751673498613801407e-1 * t237 * t379; + const double t385 = t23 * t275; + const double t386 = 0.1e1 / t334; + const double t388 = t154 * t52 * t386; + const double t394 = safe_math::exp( -( -t354 + t382 + t384 ) * t158 * t285 ); + const double t395 = t394 - 0.1e1; + const double t396 = 0.1e1 / t395; + const double t397 = t158 * t396; + const double t398 = t18 * t18; + const double t399 = t398 * rho_b; + const double t401 = 0.1e1 / t19 / t399; + const double t402 = t326 * t401; + const double t404 = t397 * t402 * t297; + const double t405 = 0.1e1 / t344; + const double t406 = t300 * t405; + const double t407 = t178 * t406; + const double t410 = t385 * t388 / 0.96e2 + 0.21437009059034868486e-3 * t404 * t407; + const double t411 = t410 * t158; + const double t414 = 0.1e1 + 0.65854491829355115987e0 * t397 * t410; + const double t415 = 0.1e1 / t414; + const double t418 = 0.1e1 + 0.65854491829355115987e0 * t411 * t415; + const double t419 = safe_math::log( t418 ); + const double t422 = t135 * t273 * t419 - t354 + t382 + t384; + const double t423 = piecewise_functor_3( t90, zeta_tol, t24 ); + const double t426 = piecewise_functor_3( t332, 0.0, t422 * t423 / 0.2e1 ); + const double t427 = t330 * t426; + const double t429 = 0.2390625e-1 * t328 * t427; + + + eps = t196 - t325 - t429; + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_vxc_polar_impl( double rho_a, double rho_b, double sigma_aa, double sigma_ab, double sigma_bb, double lapl_a, double lapl_b, double tau_a, double tau_b, double& eps, double& vrho_a, double& vrho_b, double& vsigma_aa, double& vsigma_ab, double& vsigma_bb, double& vlapl_a, double& vlapl_b, double& vtau_a, double& vtau_b ) { + + (void)(lapl_a); + (void)(lapl_b); + (void)(eps); + constexpr double t46 = constants::m_cbrt_3; + constexpr double t48 = constants::m_cbrt_one_ov_pi; + constexpr double t50 = constants::m_cbrt_4; + constexpr double t95 = constants::m_cbrt_2; + constexpr double t133 = constants::m_pi_sq; + constexpr double t49 = t46 * t48; + constexpr double t51 = t50 * t50; + constexpr double t63 = t46 * t46; + constexpr double t64 = t48 * t48; + constexpr double t65 = t63 * t64; + constexpr double t134 = 0.1e1 / t133; + constexpr double t153 = 0.1e1 / t48; + constexpr double t154 = t153 * t50; + constexpr double t173 = t95 * t95; + constexpr double t177 = 0.1e1 / t64; + constexpr double t178 = t46 * t177; + constexpr double t179 = t178 * t51; + constexpr double t204 = t49 * t51; + constexpr double t218 = t65 * t50; + constexpr double t475 = t48 * t51; + constexpr double t581 = t63 * t153; + constexpr double t616 = t177 * t51; + constexpr double t1283 = t581 * t50; + + + const double t2 = rho_a * rho_a; + const double t3 = safe_math::cbrt( rho_a ); + const double t4 = t3 * t3; + const double t6 = 0.1e1 / t4 / t2; + const double t7 = sigma_aa * t6; + const double t8 = rho_a - rho_b; + const double t9 = rho_a + rho_b; + const double t10 = 0.1e1 / t9; + const double t11 = t8 * t10; + const double t12 = 0.1e1 + t11; + const double t13 = t12 / 0.2e1; + const double t14 = safe_math::cbrt( t13 ); + const double t15 = t14 * t14; + const double t16 = t15 * t13; + const double t18 = rho_b * rho_b; + const double t19 = safe_math::cbrt( rho_b ); + const double t20 = t19 * t19; + const double t22 = 0.1e1 / t20 / t18; + const double t23 = sigma_bb * t22; + const double t24 = 0.1e1 - t11; + const double t25 = t24 / 0.2e1; + const double t26 = safe_math::cbrt( t25 ); + const double t27 = t26 * t26; + const double t28 = t27 * t25; + const double t30 = t16 * t7 + t23 * t28; + const double t31 = t30 * t30; + const double t33 = 0.1e1 / t4 / rho_a; + const double t34 = tau_a * t33; + const double t37 = 0.1e1 / t20 / rho_b; + const double t38 = tau_b * t37; + const double t40 = t16 * t34 + t28 * t38; + const double t41 = t40 * t40; + const double t42 = 0.1e1 / t41; + const double t45 = 0.1e1 + 0.828125e-2 * t31 * t42; + const double t52 = safe_math::cbrt( t9 ); + const double t53 = 0.1e1 / t52; + const double t54 = t51 * t53; + const double t55 = t49 * t54; + const double t57 = 0.1e1 + 0.53425e-1 * t55; + const double t58 = safe_math::sqrt( t55 ); + const double t61 = pow_3_2( t55 ); + const double t66 = t52 * t52; + const double t67 = 0.1e1 / t66; + const double t68 = t50 * t67; + const double t69 = t65 * t68; + const double t71 = 0.379785e1 * t58 + 0.8969e0 * t55 + 0.204775e0 * t61 + 0.123235e0 * t69; + const double t74 = 0.1e1 + 0.16081979498692535067e2 / t71; + const double t75 = safe_math::log( t74 ); + const double t77 = 0.621814e-1 * t57 * t75; + const double t78 = t8 * t8; + const double t79 = t78 * t78; + const double t80 = t9 * t9; + const double t81 = t80 * t80; + const double t82 = 0.1e1 / t81; + const double t83 = t79 * t82; + const double t84 = t12 <= zeta_tol; + const double t85 = safe_math::cbrt( zeta_tol ); + const double t86 = t85 * zeta_tol; + const double t87 = safe_math::cbrt( t12 ); + const double t88 = t87 * t12; + const double t89 = piecewise_functor_3( t84, t86, t88 ); + const double t90 = t24 <= zeta_tol; + const double t91 = safe_math::cbrt( t24 ); + const double t92 = t91 * t24; + const double t93 = piecewise_functor_3( t90, t86, t92 ); + const double t94 = t89 + t93 - 0.2e1; + const double t98 = 0.1e1 / ( 0.2e1 * t95 - 0.2e1 ); + const double t99 = t94 * t98; + const double t101 = 0.1e1 + 0.5137e-1 * t55; + const double t106 = 0.705945e1 * t58 + 0.1549425e1 * t55 + 0.420775e0 * t61 + 0.1562925e0 * t69; + const double t109 = 0.1e1 + 0.32163958997385070134e2 / t106; + const double t110 = safe_math::log( t109 ); + const double t114 = 0.1e1 + 0.278125e-1 * t55; + const double t119 = 0.51785e1 * t58 + 0.905775e0 * t55 + 0.1100325e0 * t61 + 0.1241775e0 * t69; + const double t122 = 0.1e1 + 0.29608749977793437516e2 / t119; + const double t123 = safe_math::log( t122 ); + const double t124 = t114 * t123; + const double t126 = -0.310907e-1 * t101 * t110 + t77 - 0.19751673498613801407e-1 * t124; + const double t127 = t99 * t126; + const double t128 = t83 * t127; + const double t130 = 0.19751673498613801407e-1 * t99 * t124; + const double t131 = safe_math::log( 0.2e1 ); + const double t132 = 0.1e1 - t131; + const double t135 = t132 * t134; + const double t136 = t85 * t85; + const double t137 = t87 * t87; + const double t138 = piecewise_functor_3( t84, t136, t137 ); + const double t139 = t91 * t91; + const double t140 = piecewise_functor_3( t90, t136, t139 ); + const double t142 = t138 / 0.2e1 + t140 / 0.2e1; + const double t143 = t142 * t142; + const double t144 = t143 * t142; + const double t146 = sigma_aa + 0.2e1 * sigma_ab + sigma_bb; + const double t148 = 0.1e1 / t52 / t80; + const double t149 = t146 * t148; + const double t151 = 0.1e1 / t143; + const double t155 = t151 * t63 * t154; + const double t158 = 0.1e1 / t132; + const double t160 = ( -t77 + t128 + t130 ) * t158; + const double t161 = 0.1e1 / t144; + const double t162 = t133 * t161; + const double t164 = safe_math::exp( -t160 * t162 ); + const double t165 = t164 - 0.1e1; + const double t166 = 0.1e1 / t165; + const double t167 = t158 * t166; + const double t168 = t146 * t146; + const double t170 = 0.1e1 / t66 / t81; + const double t171 = t168 * t170; + const double t174 = t143 * t143; + const double t175 = 0.1e1 / t174; + const double t176 = t173 * t175; + const double t180 = t176 * t179; + const double t183 = t149 * t95 * t155 / 0.96e2 + 0.21437009059034868486e-3 * t167 * t171 * t180; + const double t184 = t183 * t158; + const double t187 = 0.1e1 + 0.65854491829355115987e0 * t167 * t183; + const double t188 = 0.1e1 / t187; + const double t191 = 0.1e1 + 0.65854491829355115987e0 * t184 * t188; + const double t192 = safe_math::log( t191 ); + const double t195 = t135 * t144 * t192 + t128 + t130 - t77; + const double t196 = t45 * t195; + const double t197 = sigma_aa * sigma_aa; + const double t198 = 0.1e1 / t2; + const double t199 = t197 * t198; + const double t200 = tau_a * tau_a; + const double t201 = 0.1e1 / t200; + const double t203 = rho_a <= dens_tol || t84; + const double t205 = t53 * t95; + const double t206 = 0.1e1 / t85; + const double t207 = 0.1e1 / t87; + const double t208 = piecewise_functor_3( t84, t206, t207 ); + const double t210 = t204 * t205 * t208; + const double t212 = 0.1e1 + 0.53425e-1 * t210; + const double t213 = safe_math::sqrt( t210 ); + const double t216 = pow_3_2( t210 ); + const double t219 = t67 * t173; + const double t220 = t208 * t208; + const double t222 = t218 * t219 * t220; + const double t224 = 0.379785e1 * t213 + 0.8969e0 * t210 + 0.204775e0 * t216 + 0.123235e0 * t222; + const double t227 = 0.1e1 + 0.16081979498692535067e2 / t224; + const double t228 = safe_math::log( t227 ); + const double t230 = 0.621814e-1 * t212 * t228; + const double t231 = 0.2e1 <= zeta_tol; + const double t233 = piecewise_functor_3( t231, t86, 0.2e1 * t95 ); + const double t234 = 0.e0 <= zeta_tol; + const double t235 = piecewise_functor_3( t234, t86, 0.0 ); + const double t237 = ( t233 + t235 - 0.2e1 ) * t98; + const double t239 = 0.1e1 + 0.5137e-1 * t210; + const double t244 = 0.705945e1 * t213 + 0.1549425e1 * t210 + 0.420775e0 * t216 + 0.1562925e0 * t222; + const double t247 = 0.1e1 + 0.32163958997385070134e2 / t244; + const double t248 = safe_math::log( t247 ); + const double t252 = 0.1e1 + 0.278125e-1 * t210; + const double t257 = 0.51785e1 * t213 + 0.905775e0 * t210 + 0.1100325e0 * t216 + 0.1241775e0 * t222; + const double t260 = 0.1e1 + 0.29608749977793437516e2 / t257; + const double t261 = safe_math::log( t260 ); + const double t262 = t252 * t261; + const double t265 = t237 * ( -0.310907e-1 * t239 * t248 + t230 - 0.19751673498613801407e-1 * t262 ); + const double t267 = 0.19751673498613801407e-1 * t237 * t262; + const double t268 = piecewise_functor_3( t231, t136, t173 ); + const double t269 = piecewise_functor_3( t234, t136, 0.0 ); + const double t271 = t268 / 0.2e1 + t269 / 0.2e1; + const double t272 = t271 * t271; + const double t273 = t272 * t271; + const double t274 = 0.1e1 / t272; + const double t275 = t274 * t63; + const double t276 = t7 * t275; + const double t277 = 0.1e1 / t208; + const double t279 = t154 * t52 * t277; + const double t284 = 0.1e1 / t273; + const double t285 = t133 * t284; + const double t287 = safe_math::exp( -( -t230 + t265 + t267 ) * t158 * t285 ); + const double t288 = t287 - 0.1e1; + const double t289 = 0.1e1 / t288; + const double t290 = t158 * t289; + const double t291 = t2 * t2; + const double t292 = t291 * rho_a; + const double t294 = 0.1e1 / t3 / t292; + const double t295 = t197 * t294; + const double t296 = t272 * t272; + const double t297 = 0.1e1 / t296; + const double t299 = t290 * t295 * t297; + const double t300 = t51 * t66; + const double t301 = 0.1e1 / t220; + const double t302 = t300 * t301; + const double t303 = t178 * t302; + const double t306 = t276 * t279 / 0.96e2 + 0.21437009059034868486e-3 * t299 * t303; + const double t307 = t306 * t158; + const double t310 = 0.1e1 + 0.65854491829355115987e0 * t290 * t306; + const double t311 = 0.1e1 / t310; + const double t314 = 0.1e1 + 0.65854491829355115987e0 * t307 * t311; + const double t315 = safe_math::log( t314 ); + const double t318 = t135 * t273 * t315 - t230 + t265 + t267; + const double t319 = piecewise_functor_3( t84, zeta_tol, t12 ); + const double t322 = piecewise_functor_3( t203, 0.0, t318 * t319 / 0.2e1 ); + const double t323 = t201 * t322; + const double t325 = 0.2390625e-1 * t199 * t323; + const double t326 = sigma_bb * sigma_bb; + const double t327 = 0.1e1 / t18; + const double t328 = t326 * t327; + const double t329 = tau_b * tau_b; + const double t330 = 0.1e1 / t329; + const double t332 = rho_b <= dens_tol || t90; + const double t333 = 0.1e1 / t91; + const double t334 = piecewise_functor_3( t90, t206, t333 ); + const double t336 = t204 * t205 * t334; + const double t338 = 0.1e1 + 0.53425e-1 * t336; + const double t339 = safe_math::sqrt( t336 ); + const double t342 = pow_3_2( t336 ); + const double t344 = t334 * t334; + const double t346 = t218 * t219 * t344; + const double t348 = 0.379785e1 * t339 + 0.8969e0 * t336 + 0.204775e0 * t342 + 0.123235e0 * t346; + const double t351 = 0.1e1 + 0.16081979498692535067e2 / t348; + const double t352 = safe_math::log( t351 ); + const double t354 = 0.621814e-1 * t338 * t352; + const double t356 = 0.1e1 + 0.5137e-1 * t336; + const double t361 = 0.705945e1 * t339 + 0.1549425e1 * t336 + 0.420775e0 * t342 + 0.1562925e0 * t346; + const double t364 = 0.1e1 + 0.32163958997385070134e2 / t361; + const double t365 = safe_math::log( t364 ); + const double t369 = 0.1e1 + 0.278125e-1 * t336; + const double t374 = 0.51785e1 * t339 + 0.905775e0 * t336 + 0.1100325e0 * t342 + 0.1241775e0 * t346; + const double t377 = 0.1e1 + 0.29608749977793437516e2 / t374; + const double t378 = safe_math::log( t377 ); + const double t379 = t369 * t378; + const double t382 = t237 * ( -0.310907e-1 * t356 * t365 + t354 - 0.19751673498613801407e-1 * t379 ); + const double t384 = 0.19751673498613801407e-1 * t237 * t379; + const double t385 = t23 * t275; + const double t386 = 0.1e1 / t334; + const double t388 = t154 * t52 * t386; + const double t394 = safe_math::exp( -( -t354 + t382 + t384 ) * t158 * t285 ); + const double t395 = t394 - 0.1e1; + const double t396 = 0.1e1 / t395; + const double t397 = t158 * t396; + const double t398 = t18 * t18; + const double t399 = t398 * rho_b; + const double t401 = 0.1e1 / t19 / t399; + const double t402 = t326 * t401; + const double t404 = t397 * t402 * t297; + const double t405 = 0.1e1 / t344; + const double t406 = t300 * t405; + const double t407 = t178 * t406; + const double t410 = t385 * t388 / 0.96e2 + 0.21437009059034868486e-3 * t404 * t407; + const double t411 = t410 * t158; + const double t414 = 0.1e1 + 0.65854491829355115987e0 * t397 * t410; + const double t415 = 0.1e1 / t414; + const double t418 = 0.1e1 + 0.65854491829355115987e0 * t411 * t415; + const double t419 = safe_math::log( t418 ); + const double t422 = t135 * t273 * t419 - t354 + t382 + t384; + const double t423 = piecewise_functor_3( t90, zeta_tol, t24 ); + const double t426 = piecewise_functor_3( t332, 0.0, t422 * t423 / 0.2e1 ); + const double t427 = t330 * t426; + const double t429 = 0.2390625e-1 * t328 * t427; + const double t430 = t30 * t42; + const double t431 = t2 * rho_a; + const double t433 = 0.1e1 / t4 / t431; + const double t434 = sigma_aa * t433; + const double t437 = 0.1e1 / t80; + const double t438 = t8 * t437; + const double t439 = t10 - t438; + const double t440 = t439 / 0.2e1; + const double t441 = t15 * t440; + const double t444 = -t440; + const double t445 = t27 * t444; + const double t448 = -0.8e1 / 0.3e1 * t434 * t16 + 0.5e1 / 0.3e1 * t7 * t441 + 0.5e1 / 0.3e1 * t23 * t445; + const double t452 = 0.1e1 / t41 / t40; + const double t453 = t31 * t452; + const double t454 = tau_a * t6; + const double t459 = -0.5e1 / 0.3e1 * t454 * t16 + 0.5e1 / 0.3e1 * t34 * t441 + 0.5e1 / 0.3e1 * t38 * t445; + const double t462 = 0.165625e-1 * t430 * t448 - 0.165625e-1 * t453 * t459; + const double t463 = t462 * t195; + const double t464 = t52 * t9; + const double t465 = 0.1e1 / t464; + const double t466 = t51 * t465; + const double t469 = 0.11073470983333333333e-2 * t49 * t466 * t75; + const double t470 = t71 * t71; + const double t471 = 0.1e1 / t470; + const double t472 = t57 * t471; + const double t474 = 0.1e1 / t58 * t46; + const double t476 = t475 * t465; + const double t477 = t474 * t476; + const double t479 = t49 * t466; + const double t481 = safe_math::sqrt( t55 ); + const double t482 = t481 * t46; + const double t483 = t482 * t476; + const double t486 = 0.1e1 / t66 / t9; + const double t487 = t50 * t486; + const double t488 = t65 * t487; + const double t490 = -0.632975e0 * t477 - 0.29896666666666666667e0 * t479 - 0.1023875e0 * t483 - 0.82156666666666666667e-1 * t488; + const double t491 = 0.1e1 / t74; + const double t492 = t490 * t491; + const double t494 = 0.1e1 * t472 * t492; + const double t495 = t78 * t8; + const double t496 = t495 * t82; + const double t498 = 0.4e1 * t496 * t127; + const double t499 = t81 * t9; + const double t500 = 0.1e1 / t499; + const double t501 = t79 * t500; + const double t503 = 0.4e1 * t501 * t127; + const double t506 = piecewise_functor_3( t84, 0.0, 0.4e1 / 0.3e1 * t87 * t439 ); + const double t507 = -t439; + const double t510 = piecewise_functor_3( t90, 0.0, 0.4e1 / 0.3e1 * t91 * t507 ); + const double t512 = ( t506 + t510 ) * t98; + const double t513 = t512 * t126; + const double t514 = t83 * t513; + const double t518 = t106 * t106; + const double t519 = 0.1e1 / t518; + const double t520 = t101 * t519; + const double t525 = -0.1176575e1 * t477 - 0.516475e0 * t479 - 0.2103875e0 * t483 - 0.104195e0 * t488; + const double t526 = 0.1e1 / t109; + const double t527 = t525 * t526; + const double t533 = t119 * t119; + const double t534 = 0.1e1 / t533; + const double t535 = t114 * t534; + const double t540 = -0.86308333333333333334e0 * t477 - 0.301925e0 * t479 - 0.5501625e-1 * t483 - 0.82785e-1 * t488; + const double t541 = 0.1e1 / t122; + const double t542 = t540 * t541; + const double t545 = 0.53237641966666666666e-3 * t49 * t466 * t110 + 0.1e1 * t520 * t527 - t469 - t494 + 0.18311447306006545054e-3 * t49 * t466 * t123 + 0.5848223622634646207e0 * t535 * t542; + const double t546 = t99 * t545; + const double t547 = t83 * t546; + const double t549 = 0.19751673498613801407e-1 * t512 * t124; + const double t550 = t99 * t46; + const double t552 = t475 * t465 * t123; + const double t554 = 0.18311447306006545054e-3 * t550 * t552; + const double t555 = t99 * t114; + const double t557 = t534 * t540 * t541; + const double t559 = 0.5848223622634646207e0 * t555 * t557; + const double t560 = t143 * t192; + const double t563 = piecewise_functor_3( t84, 0.0, 0.2e1 / 0.3e1 * t207 * t439 ); + const double t566 = piecewise_functor_3( t90, 0.0, 0.2e1 / 0.3e1 * t333 * t507 ); + const double t568 = t563 / 0.2e1 + t566 / 0.2e1; + const double t572 = t80 * t9; + const double t574 = 0.1e1 / t52 / t572; + const double t575 = t146 * t574; + const double t578 = 0.7e1 / 0.288e3 * t575 * t95 * t155; + const double t579 = t95 * t161; + const double t580 = t149 * t579; + const double t582 = t50 * t568; + const double t583 = t581 * t582; + const double t586 = t165 * t165; + const double t587 = 0.1e1 / t586; + const double t588 = t158 * t587; + const double t589 = t171 * t173; + const double t590 = t588 * t589; + const double t591 = t175 * t46; + const double t592 = t591 * t177; + const double t594 = ( t469 + t494 + t498 - t503 + t514 + t547 + t549 - t554 - t559 ) * t158; + const double t596 = t133 * t175; + const double t597 = t596 * t568; + const double t600 = 0.3e1 * t160 * t597 - t162 * t594; + const double t601 = t51 * t600; + const double t603 = t592 * t601 * t164; + const double t607 = 0.1e1 / t66 / t499; + const double t608 = t168 * t607; + const double t611 = 0.10003937560882938627e-2 * t167 * t608 * t180; + const double t612 = t167 * t589; + const double t614 = 0.1e1 / t174 / t142; + const double t615 = t614 * t46; + const double t617 = t616 * t568; + const double t618 = t615 * t617; + const double t621 = -t578 - t580 * t583 / 0.48e2 - 0.21437009059034868486e-3 * t590 * t603 - t611 - 0.85748036236139473944e-3 * t612 * t618; + const double t622 = t621 * t158; + const double t625 = t187 * t187; + const double t626 = 0.1e1 / t625; + const double t633 = -0.65854491829355115987e0 * t588 * t183 * t600 * t164 + 0.65854491829355115987e0 * t167 * t621; + const double t634 = t626 * t633; + const double t637 = 0.65854491829355115987e0 * t622 * t188 - 0.65854491829355115987e0 * t184 * t634; + const double t639 = 0.1e1 / t191; + const double t642 = t135 * t144 * t637 * t639 + 0.3e1 * t135 * t560 * t568 + t469 + t494 + t498 - t503 + t514 + t547 + t549 - t554 - t559; + const double t643 = t45 * t642; + const double t644 = 0.1e1 / t431; + const double t645 = t197 * t644; + const double t646 = t645 * t323; + const double t647 = 0.478125e-1 * t646; + const double t648 = t465 * t95; + const double t650 = t204 * t648 * t208; + const double t651 = 0.17808333333333333333e-1 * t650; + const double t652 = 0.1e1 / t88; + const double t653 = t652 * t439; + const double t655 = piecewise_functor_3( t84, 0.0, -t653 / 0.3e1 ); + const double t657 = t204 * t205 * t655; + const double t659 = -t651 + 0.53425e-1 * t657; + const double t661 = 0.621814e-1 * t659 * t228; + const double t662 = t224 * t224; + const double t663 = 0.1e1 / t662; + const double t664 = t212 * t663; + const double t665 = 0.1e1 / t213; + const double t666 = t650 / 0.3e1; + const double t667 = -t666 + t657; + const double t668 = t665 * t667; + const double t670 = 0.29896666666666666667e0 * t650; + const double t672 = safe_math::sqrt( t210 ); + const double t673 = t672 * t667; + const double t675 = t486 * t173; + const double t677 = t218 * t675 * t220; + const double t678 = 0.82156666666666666667e-1 * t677; + const double t679 = t208 * t655; + const double t681 = t218 * t219 * t679; + const double t683 = 0.1898925e1 * t668 - t670 + 0.8969e0 * t657 + 0.3071625e0 * t673 - t678 + 0.24647e0 * t681; + const double t684 = 0.1e1 / t227; + const double t685 = t683 * t684; + const double t687 = 0.1e1 * t664 * t685; + const double t688 = 0.17123333333333333333e-1 * t650; + const double t690 = -t688 + 0.5137e-1 * t657; + const double t693 = t244 * t244; + const double t694 = 0.1e1 / t693; + const double t695 = t239 * t694; + const double t697 = 0.516475e0 * t650; + const double t700 = 0.104195e0 * t677; + const double t702 = 0.3529725e1 * t668 - t697 + 0.1549425e1 * t657 + 0.6311625e0 * t673 - t700 + 0.312585e0 * t681; + const double t703 = 0.1e1 / t247; + const double t704 = t702 * t703; + const double t707 = 0.92708333333333333333e-2 * t650; + const double t709 = -t707 + 0.278125e-1 * t657; + const double t710 = t709 * t261; + const double t712 = t257 * t257; + const double t713 = 0.1e1 / t712; + const double t714 = t252 * t713; + const double t716 = 0.301925e0 * t650; + const double t719 = 0.82785e-1 * t677; + const double t721 = 0.258925e1 * t668 - t716 + 0.905775e0 * t657 + 0.16504875e0 * t673 - t719 + 0.248355e0 * t681; + const double t722 = 0.1e1 / t260; + const double t723 = t721 * t722; + const double t727 = t237 * ( -0.310907e-1 * t690 * t248 + 0.1e1 * t695 * t704 + t661 - t687 - 0.19751673498613801407e-1 * t710 + 0.5848223622634646207e0 * t714 * t723 ); + const double t729 = 0.19751673498613801407e-1 * t237 * t710; + const double t730 = t237 * t252; + const double t732 = t713 * t721 * t722; + const double t734 = 0.5848223622634646207e0 * t730 * t732; + const double t735 = t434 * t275; + const double t739 = t154 * t67 * t277; + const double t741 = t276 * t739 / 0.288e3; + const double t742 = t52 * t301; + const double t744 = t154 * t742 * t655; + const double t747 = t132 * t132; + const double t748 = 0.1e1 / t747; + const double t749 = t288 * t288; + const double t750 = 0.1e1 / t749; + const double t751 = t748 * t750; + const double t752 = t751 * t197; + const double t754 = 0.1e1 / t296 / t273; + const double t755 = t294 * t754; + const double t756 = t755 * t46; + const double t757 = t752 * t756; + const double t758 = t616 * t66; + const double t759 = -t661 + t687 + t727 + t729 - t734; + const double t761 = t133 * t287; + const double t762 = t301 * t759 * t761; + const double t763 = t758 * t762; + const double t766 = t291 * t2; + const double t768 = 0.1e1 / t3 / t766; + const double t771 = t290 * t197 * t768 * t297; + const double t774 = t54 * t301; + const double t775 = t178 * t774; + const double t777 = 0.14291339372689912324e-3 * t299 * t775; + const double t778 = t220 * t208; + const double t779 = 0.1e1 / t778; + const double t780 = t66 * t779; + const double t782 = t179 * t780 * t655; + const double t785 = -t735 * t279 / 0.36e2 + t741 - t276 * t744 / 0.96e2 + 0.21437009059034868486e-3 * t757 * t763 - 0.11433071498151929859e-2 * t771 * t303 + t777 - 0.42874018118069736972e-3 * t299 * t782; + const double t786 = t785 * t158; + const double t789 = t310 * t310; + const double t790 = 0.1e1 / t789; + const double t791 = t751 * t306; + const double t792 = t759 * t133; + const double t793 = t284 * t287; + const double t794 = t792 * t793; + const double t799 = 0.65854491829355115987e0 * t791 * t794 + 0.65854491829355115987e0 * t290 * t785; + const double t800 = t790 * t799; + const double t803 = 0.65854491829355115987e0 * t786 * t311 - 0.65854491829355115987e0 * t307 * t800; + const double t805 = 0.1e1 / t314; + const double t808 = t135 * t273 * t803 * t805 - t661 + t687 + t727 + t729 - t734; + const double t810 = piecewise_functor_3( t84, 0.0, t439 ); + const double t814 = piecewise_functor_3( t203, 0.0, t318 * t810 / 0.2e1 + t808 * t319 / 0.2e1 ); + const double t815 = t201 * t814; + const double t816 = t199 * t815; + const double t817 = 0.2390625e-1 * t816; + const double t819 = t204 * t648 * t334; + const double t820 = 0.17808333333333333333e-1 * t819; + const double t821 = 0.1e1 / t92; + const double t822 = t821 * t507; + const double t824 = piecewise_functor_3( t90, 0.0, -t822 / 0.3e1 ); + const double t826 = t204 * t205 * t824; + const double t828 = -t820 + 0.53425e-1 * t826; + const double t830 = 0.621814e-1 * t828 * t352; + const double t831 = t348 * t348; + const double t832 = 0.1e1 / t831; + const double t833 = t338 * t832; + const double t834 = 0.1e1 / t339; + const double t835 = t819 / 0.3e1; + const double t836 = -t835 + t826; + const double t837 = t834 * t836; + const double t839 = 0.29896666666666666667e0 * t819; + const double t841 = safe_math::sqrt( t336 ); + const double t842 = t841 * t836; + const double t845 = t218 * t675 * t344; + const double t846 = 0.82156666666666666667e-1 * t845; + const double t847 = t334 * t824; + const double t849 = t218 * t219 * t847; + const double t851 = 0.1898925e1 * t837 - t839 + 0.8969e0 * t826 + 0.3071625e0 * t842 - t846 + 0.24647e0 * t849; + const double t852 = 0.1e1 / t351; + const double t853 = t851 * t852; + const double t855 = 0.1e1 * t833 * t853; + const double t856 = 0.17123333333333333333e-1 * t819; + const double t858 = -t856 + 0.5137e-1 * t826; + const double t861 = t361 * t361; + const double t862 = 0.1e1 / t861; + const double t863 = t356 * t862; + const double t865 = 0.516475e0 * t819; + const double t868 = 0.104195e0 * t845; + const double t870 = 0.3529725e1 * t837 - t865 + 0.1549425e1 * t826 + 0.6311625e0 * t842 - t868 + 0.312585e0 * t849; + const double t871 = 0.1e1 / t364; + const double t872 = t870 * t871; + const double t875 = 0.92708333333333333333e-2 * t819; + const double t877 = -t875 + 0.278125e-1 * t826; + const double t878 = t877 * t378; + const double t880 = t374 * t374; + const double t881 = 0.1e1 / t880; + const double t882 = t369 * t881; + const double t884 = 0.301925e0 * t819; + const double t887 = 0.82785e-1 * t845; + const double t889 = 0.258925e1 * t837 - t884 + 0.905775e0 * t826 + 0.16504875e0 * t842 - t887 + 0.248355e0 * t849; + const double t890 = 0.1e1 / t377; + const double t891 = t889 * t890; + const double t895 = t237 * ( -0.310907e-1 * t858 * t365 + 0.1e1 * t863 * t872 + t830 - t855 - 0.19751673498613801407e-1 * t878 + 0.5848223622634646207e0 * t882 * t891 ); + const double t897 = 0.19751673498613801407e-1 * t237 * t878; + const double t898 = t237 * t369; + const double t900 = t881 * t889 * t890; + const double t902 = 0.5848223622634646207e0 * t898 * t900; + const double t904 = t154 * t67 * t386; + const double t906 = t385 * t904 / 0.288e3; + const double t907 = t52 * t405; + const double t909 = t154 * t907 * t824; + const double t912 = t395 * t395; + const double t913 = 0.1e1 / t912; + const double t914 = t748 * t913; + const double t915 = t914 * t326; + const double t916 = t401 * t754; + const double t917 = t916 * t46; + const double t918 = t915 * t917; + const double t919 = -t830 + t855 + t895 + t897 - t902; + const double t921 = t133 * t394; + const double t922 = t405 * t919 * t921; + const double t923 = t758 * t922; + const double t926 = t54 * t405; + const double t927 = t178 * t926; + const double t929 = 0.14291339372689912324e-3 * t404 * t927; + const double t930 = t344 * t334; + const double t931 = 0.1e1 / t930; + const double t932 = t66 * t931; + const double t934 = t179 * t932 * t824; + const double t937 = t906 - t385 * t909 / 0.96e2 + 0.21437009059034868486e-3 * t918 * t923 + t929 - 0.42874018118069736972e-3 * t404 * t934; + const double t938 = t937 * t158; + const double t941 = t414 * t414; + const double t942 = 0.1e1 / t941; + const double t943 = t914 * t410; + const double t944 = t919 * t133; + const double t945 = t284 * t394; + const double t946 = t944 * t945; + const double t951 = 0.65854491829355115987e0 * t943 * t946 + 0.65854491829355115987e0 * t397 * t937; + const double t952 = t942 * t951; + const double t955 = 0.65854491829355115987e0 * t938 * t415 - 0.65854491829355115987e0 * t411 * t952; + const double t957 = 0.1e1 / t418; + const double t960 = t135 * t273 * t955 * t957 - t830 + t855 + t895 + t897 - t902; + const double t962 = piecewise_functor_3( t90, 0.0, t507 ); + const double t966 = piecewise_functor_3( t332, 0.0, t422 * t962 / 0.2e1 + t960 * t423 / 0.2e1 ); + const double t967 = t330 * t966; + const double t968 = t328 * t967; + const double t969 = 0.2390625e-1 * t968; + const double t972 = -t10 - t438; + const double t973 = t972 / 0.2e1; + const double t974 = t15 * t973; + const double t977 = t18 * rho_b; + const double t979 = 0.1e1 / t20 / t977; + const double t980 = sigma_bb * t979; + const double t983 = -t973; + const double t984 = t27 * t983; + const double t987 = 0.5e1 / 0.3e1 * t7 * t974 - 0.8e1 / 0.3e1 * t980 * t28 + 0.5e1 / 0.3e1 * t23 * t984; + const double t991 = tau_b * t22; + const double t995 = -0.5e1 / 0.3e1 * t991 * t28 + 0.5e1 / 0.3e1 * t34 * t974 + 0.5e1 / 0.3e1 * t38 * t984; + const double t998 = 0.165625e-1 * t430 * t987 - 0.165625e-1 * t453 * t995; + const double t999 = t998 * t195; + const double t1002 = piecewise_functor_3( t84, 0.0, 0.4e1 / 0.3e1 * t87 * t972 ); + const double t1003 = -t972; + const double t1006 = piecewise_functor_3( t90, 0.0, 0.4e1 / 0.3e1 * t91 * t1003 ); + const double t1008 = ( t1002 + t1006 ) * t98; + const double t1009 = t1008 * t126; + const double t1010 = t83 * t1009; + const double t1012 = 0.19751673498613801407e-1 * t1008 * t124; + const double t1015 = piecewise_functor_3( t84, 0.0, 0.2e1 / 0.3e1 * t207 * t972 ); + const double t1018 = piecewise_functor_3( t90, 0.0, 0.2e1 / 0.3e1 * t333 * t1003 ); + const double t1020 = t1015 / 0.2e1 + t1018 / 0.2e1; + const double t1024 = t50 * t1020; + const double t1025 = t581 * t1024; + const double t1029 = ( t469 + t494 - t498 - t503 + t1010 + t547 + t1012 - t554 - t559 ) * t158; + const double t1031 = t596 * t1020; + const double t1034 = -t1029 * t162 + 0.3e1 * t1031 * t160; + const double t1035 = t51 * t1034; + const double t1037 = t592 * t1035 * t164; + const double t1040 = t616 * t1020; + const double t1041 = t615 * t1040; + const double t1044 = -t578 - t580 * t1025 / 0.48e2 - 0.21437009059034868486e-3 * t590 * t1037 - t611 - 0.85748036236139473944e-3 * t612 * t1041; + const double t1045 = t1044 * t158; + const double t1054 = -0.65854491829355115987e0 * t588 * t183 * t1034 * t164 + 0.65854491829355115987e0 * t167 * t1044; + const double t1055 = t626 * t1054; + const double t1058 = 0.65854491829355115987e0 * t1045 * t188 - 0.65854491829355115987e0 * t184 * t1055; + const double t1062 = t1058 * t135 * t144 * t639 + 0.3e1 * t1020 * t135 * t560 + t1010 + t1012 + t469 + t494 - t498 - t503 + t547 - t554 - t559; + const double t1063 = t45 * t1062; + const double t1064 = t652 * t972; + const double t1066 = piecewise_functor_3( t84, 0.0, -t1064 / 0.3e1 ); + const double t1068 = t204 * t205 * t1066; + const double t1070 = -t651 + 0.53425e-1 * t1068; + const double t1072 = 0.621814e-1 * t1070 * t228; + const double t1073 = -t666 + t1068; + const double t1074 = t665 * t1073; + const double t1077 = t672 * t1073; + const double t1079 = t208 * t1066; + const double t1081 = t218 * t219 * t1079; + const double t1083 = 0.1898925e1 * t1074 - t670 + 0.8969e0 * t1068 + 0.3071625e0 * t1077 - t678 + 0.24647e0 * t1081; + const double t1084 = t1083 * t684; + const double t1086 = 0.1e1 * t664 * t1084; + const double t1088 = -t688 + 0.5137e-1 * t1068; + const double t1095 = 0.3529725e1 * t1074 - t697 + 0.1549425e1 * t1068 + 0.6311625e0 * t1077 - t700 + 0.312585e0 * t1081; + const double t1096 = t1095 * t703; + const double t1100 = -t707 + 0.278125e-1 * t1068; + const double t1101 = t1100 * t261; + const double t1107 = 0.258925e1 * t1074 - t716 + 0.905775e0 * t1068 + 0.16504875e0 * t1077 - t719 + 0.248355e0 * t1081; + const double t1108 = t1107 * t722; + const double t1112 = t237 * ( -0.310907e-1 * t1088 * t248 + 0.1e1 * t695 * t1096 + t1072 - t1086 - 0.19751673498613801407e-1 * t1101 + 0.5848223622634646207e0 * t714 * t1108 ); + const double t1114 = 0.19751673498613801407e-1 * t237 * t1101; + const double t1116 = t713 * t1107 * t722; + const double t1118 = 0.5848223622634646207e0 * t730 * t1116; + const double t1120 = t154 * t742 * t1066; + const double t1123 = -t1072 + t1086 + t1112 + t1114 - t1118; + const double t1124 = t301 * t1123; + const double t1125 = t1124 * t761; + const double t1126 = t758 * t1125; + const double t1130 = t179 * t780 * t1066; + const double t1133 = t741 - t276 * t1120 / 0.96e2 + 0.21437009059034868486e-3 * t757 * t1126 + t777 - 0.42874018118069736972e-3 * t299 * t1130; + const double t1134 = t1133 * t158; + const double t1137 = t1123 * t133; + const double t1138 = t1137 * t793; + const double t1143 = 0.65854491829355115987e0 * t791 * t1138 + 0.65854491829355115987e0 * t290 * t1133; + const double t1144 = t790 * t1143; + const double t1147 = 0.65854491829355115987e0 * t1134 * t311 - 0.65854491829355115987e0 * t307 * t1144; + const double t1151 = t1147 * t135 * t273 * t805 - t1072 + t1086 + t1112 + t1114 - t1118; + const double t1153 = piecewise_functor_3( t84, 0.0, t972 ); + const double t1157 = piecewise_functor_3( t203, 0.0, t1151 * t319 / 0.2e1 + t318 * t1153 / 0.2e1 ); + const double t1158 = t201 * t1157; + const double t1159 = t199 * t1158; + const double t1160 = 0.2390625e-1 * t1159; + const double t1161 = 0.1e1 / t977; + const double t1162 = t326 * t1161; + const double t1163 = t1162 * t427; + const double t1164 = 0.478125e-1 * t1163; + const double t1165 = t821 * t1003; + const double t1167 = piecewise_functor_3( t90, 0.0, -t1165 / 0.3e1 ); + const double t1169 = t204 * t205 * t1167; + const double t1171 = -t820 + 0.53425e-1 * t1169; + const double t1173 = 0.621814e-1 * t1171 * t352; + const double t1174 = -t835 + t1169; + const double t1175 = t834 * t1174; + const double t1178 = t841 * t1174; + const double t1180 = t334 * t1167; + const double t1182 = t218 * t219 * t1180; + const double t1184 = 0.1898925e1 * t1175 - t839 + 0.8969e0 * t1169 + 0.3071625e0 * t1178 - t846 + 0.24647e0 * t1182; + const double t1185 = t1184 * t852; + const double t1187 = 0.1e1 * t833 * t1185; + const double t1189 = -t856 + 0.5137e-1 * t1169; + const double t1196 = 0.3529725e1 * t1175 - t865 + 0.1549425e1 * t1169 + 0.6311625e0 * t1178 - t868 + 0.312585e0 * t1182; + const double t1197 = t1196 * t871; + const double t1201 = -t875 + 0.278125e-1 * t1169; + const double t1202 = t1201 * t378; + const double t1208 = 0.258925e1 * t1175 - t884 + 0.905775e0 * t1169 + 0.16504875e0 * t1178 - t887 + 0.248355e0 * t1182; + const double t1209 = t1208 * t890; + const double t1213 = t237 * ( -0.310907e-1 * t1189 * t365 + 0.1e1 * t863 * t1197 + t1173 - t1187 - 0.19751673498613801407e-1 * t1202 + 0.5848223622634646207e0 * t882 * t1209 ); + const double t1215 = 0.19751673498613801407e-1 * t237 * t1202; + const double t1217 = t881 * t1208 * t890; + const double t1219 = 0.5848223622634646207e0 * t898 * t1217; + const double t1220 = t980 * t275; + const double t1224 = t154 * t907 * t1167; + const double t1227 = -t1173 + t1187 + t1213 + t1215 - t1219; + const double t1228 = t405 * t1227; + const double t1229 = t1228 * t921; + const double t1230 = t758 * t1229; + const double t1233 = t398 * t18; + const double t1235 = 0.1e1 / t19 / t1233; + const double t1238 = t397 * t326 * t1235 * t297; + const double t1242 = t179 * t932 * t1167; + const double t1245 = -t1220 * t388 / 0.36e2 + t906 - t385 * t1224 / 0.96e2 + 0.21437009059034868486e-3 * t918 * t1230 - 0.11433071498151929859e-2 * t1238 * t407 + t929 - 0.42874018118069736972e-3 * t404 * t1242; + const double t1246 = t1245 * t158; + const double t1249 = t1227 * t133; + const double t1250 = t1249 * t945; + const double t1255 = 0.65854491829355115987e0 * t943 * t1250 + 0.65854491829355115987e0 * t397 * t1245; + const double t1256 = t942 * t1255; + const double t1259 = 0.65854491829355115987e0 * t1246 * t415 - 0.65854491829355115987e0 * t411 * t1256; + const double t1263 = t1259 * t135 * t273 * t957 - t1173 + t1187 + t1213 + t1215 - t1219; + const double t1265 = piecewise_functor_3( t90, 0.0, t1003 ); + const double t1269 = piecewise_functor_3( t332, 0.0, t1263 * t423 / 0.2e1 + t422 * t1265 / 0.2e1 ); + const double t1270 = t330 * t1269; + const double t1271 = t328 * t1270; + const double t1272 = 0.2390625e-1 * t1271; + const double t1275 = t6 * t16; + const double t1276 = t1275 * t195; + const double t1278 = 0.165625e-1 * t430 * t1276; + const double t1279 = t45 * t132; + const double t1280 = t1279 * t134; + const double t1281 = t148 * t95; + const double t1284 = t1281 * t151 * t1283; + const double t1286 = t146 * t170; + const double t1288 = t167 * t1286 * t180; + const double t1290 = t1284 / 0.96e2 + 0.42874018118069736972e-3 * t1288; + const double t1291 = t1290 * t158; + const double t1294 = t183 * t748; + const double t1295 = t626 * t166; + const double t1296 = t1295 * t1290; + const double t1299 = 0.65854491829355115987e0 * t1291 * t188 - 0.4336814094102599731e0 * t1294 * t1296; + const double t1300 = t144 * t1299; + const double t1301 = t1300 * t639; + const double t1302 = t1280 * t1301; + const double t1303 = sigma_aa * t198; + const double t1305 = 0.478125e-1 * t1303 * t323; + const double t1306 = t135 * t273; + const double t1307 = t6 * t274; + const double t1308 = t1307 * t63; + const double t1313 = t290 * sigma_aa * t294 * t297; + const double t1316 = t1308 * t279 / 0.96e2 + 0.42874018118069736972e-3 * t1313 * t303; + const double t1317 = t1316 * t158; + const double t1320 = t306 * t748; + const double t1321 = t790 * t289; + const double t1322 = t1321 * t1316; + const double t1325 = 0.65854491829355115987e0 * t1317 * t311 - 0.4336814094102599731e0 * t1320 * t1322; + const double t1326 = t1325 * t805; + const double t1330 = piecewise_functor_3( t203, 0.0, t1306 * t1326 * t319 / 0.2e1 ); + const double t1331 = t201 * t1330; + const double t1333 = 0.2390625e-1 * t199 * t1331; + const double t1335 = t9 * t45; + const double t1336 = t1335 * t132; + const double t1337 = t134 * t144; + const double t1340 = t1284 / 0.48e2 + 0.85748036236139473944e-3 * t1288; + const double t1341 = t1340 * t158; + const double t1344 = t1295 * t1340; + const double t1347 = 0.65854491829355115987e0 * t1341 * t188 - 0.4336814094102599731e0 * t1294 * t1344; + const double t1348 = t1347 * t639; + const double t1349 = t1337 * t1348; + const double t1350 = t22 * t28; + const double t1351 = t1350 * t195; + const double t1353 = 0.165625e-1 * t430 * t1351; + const double t1354 = sigma_bb * t327; + const double t1356 = 0.478125e-1 * t1354 * t427; + const double t1357 = t22 * t274; + const double t1358 = t1357 * t63; + const double t1363 = t397 * sigma_bb * t401 * t297; + const double t1366 = t1358 * t388 / 0.96e2 + 0.42874018118069736972e-3 * t1363 * t407; + const double t1367 = t1366 * t158; + const double t1370 = t410 * t748; + const double t1371 = t942 * t396; + const double t1372 = t1371 * t1366; + const double t1375 = 0.65854491829355115987e0 * t1367 * t415 - 0.4336814094102599731e0 * t1370 * t1372; + const double t1376 = t1375 * t957; + const double t1380 = piecewise_functor_3( t332, 0.0, t1306 * t1376 * t423 / 0.2e1 ); + const double t1381 = t330 * t1380; + const double t1383 = 0.2390625e-1 * t328 * t1381; + const double t1385 = t33 * t16; + const double t1386 = t1385 * t195; + const double t1388 = 0.165625e-1 * t453 * t1386; + const double t1390 = 0.1e1 / t200 / tau_a; + const double t1391 = t1390 * t322; + const double t1393 = 0.478125e-1 * t199 * t1391; + const double t1395 = t37 * t28; + const double t1396 = t1395 * t195; + const double t1398 = 0.165625e-1 * t453 * t1396; + const double t1400 = 0.1e1 / t329 / tau_b; + const double t1401 = t1400 * t426; + const double t1403 = 0.478125e-1 * t328 * t1401; + + + eps = t196 - t325 - t429; + vrho_a = t196 - t325 - t429 + t9 * ( t463 + t643 + t647 - t817 - t969 ); + vrho_b = t196 - t325 - t429 + t9 * ( t999 + t1063 - t1160 + t1164 - t1272 ); + vsigma_aa = t9 * ( t1278 + t1302 - t1305 - t1333 ); + vsigma_ab = t1336 * t1349; + vsigma_bb = t9 * ( t1353 + t1302 - t1356 - t1383 ); + vlapl_a = 0.e0; + vlapl_b = 0.e0; + vtau_a = t9 * ( -t1388 + t1393 ); + vtau_b = t9 * ( -t1398 + t1403 ); + + } + + +}; + +struct BuiltinPKZB_C : detail::BuiltinKernelImpl< BuiltinPKZB_C > { + + BuiltinPKZB_C( Spin p ) : + detail::BuiltinKernelImpl< BuiltinPKZB_C >(p) { } + + virtual ~BuiltinPKZB_C() = default; + +}; + + + +} // namespace ExchCXX diff --git a/include/exchcxx/impl/builtin/kernels/pkzb_x.hpp b/include/exchcxx/impl/builtin/kernels/pkzb_x.hpp new file mode 100644 index 0000000..5df91d9 --- /dev/null +++ b/include/exchcxx/impl/builtin/kernels/pkzb_x.hpp @@ -0,0 +1,442 @@ +#pragma once +#include + +#include +#include +#include +#include + +#include + + + +namespace ExchCXX { + +template <> +struct kernel_traits< BuiltinPKZB_X > : + public mgga_screening_interface< BuiltinPKZB_X > { + + static constexpr bool is_lda = false; + static constexpr bool is_gga = false; + static constexpr bool is_mgga = true; + static constexpr bool needs_laplacian = false; + static constexpr bool is_kedf = false; + static constexpr bool is_epc = false; + + static constexpr double dens_tol = 1e-15; + static constexpr double zeta_tol = 1e-15; + static constexpr double sigma_tol = 1.0000000000000027e-20; + static constexpr double tau_tol = is_kedf ? 0.0 : 1e-20; + + static constexpr bool is_hyb = false; + static constexpr double exx_coeff = 0.0; + + + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_unpolar_impl( double rho, double sigma, double lapl, double tau, double& eps ) { + + (void)(lapl); + (void)(eps); + constexpr double t4 = constants::m_cbrt_3; + constexpr double t5 = constants::m_cbrt_pi; + constexpr double t21 = constants::m_cbrt_6; + constexpr double t22 = constants::m_pi_sq; + constexpr double t23 = constants::m_cbrt_pi_sq; + constexpr double t27 = constants::m_cbrt_2; + constexpr double t7 = t4 / t5; + constexpr double t24 = t23 * t23; + constexpr double t25 = 0.1e1 / t24; + constexpr double t26 = t21 * t25; + constexpr double t28 = t27 * t27; + constexpr double t51 = t21 * t21; + constexpr double t53 = 0.1e1 / t23 / t22; + constexpr double t54 = t51 * t53; + + + const double t3 = rho / 0.2e1 <= dens_tol; + const double t8 = 0.1e1 <= zeta_tol; + const double t9 = zeta_tol - 0.1e1; + const double t11 = piecewise_functor_5( t8, t9, t8, -t9, 0.0 ); + const double t12 = 0.1e1 + t11; + const double t14 = safe_math::cbrt( zeta_tol ); + const double t16 = safe_math::cbrt( t12 ); + const double t18 = piecewise_functor_3( t12 <= zeta_tol, t14 * zeta_tol, t16 * t12 ); + const double t19 = safe_math::cbrt( rho ); + const double t29 = sigma * t28; + const double t30 = rho * rho; + const double t31 = t19 * t19; + const double t33 = 0.1e1 / t31 / t30; + const double t34 = t29 * t33; + const double t35 = t26 * t34; + const double t37 = tau * t28; + const double t39 = 0.1e1 / t31 / rho; + const double t44 = t26 * t37 * t39 / 0.4e1 - 0.9e1 / 0.2e2 - t35 / 0.288e3; + const double t45 = t44 * t44; + const double t47 = t44 * t21; + const double t48 = t47 * t25; + const double t55 = sigma * sigma; + const double t56 = t55 * t27; + const double t57 = t30 * t30; + const double t58 = t57 * rho; + const double t60 = 0.1e1 / t19 / t58; + const double t64 = 0.804e0 + 0.5e1 / 0.972e3 * t35 + 0.146e3 / 0.2025e4 * t45 - 0.73e2 / 0.972e4 * t48 * t34 + 0.45818468001825619316e-3 * t54 * t56 * t60; + const double t67 = 0.1804e1 - 0.646416e0 / t64; + const double t71 = piecewise_functor_3( t3, 0.0, -0.3e1 / 0.8e1 * t7 * t18 * t19 * t67 ); + + + eps = 0.2e1 * t71; + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_vxc_unpolar_impl( double rho, double sigma, double lapl, double tau, double& eps, double& vrho, double& vsigma, double& vlapl, double& vtau ) { + + (void)(lapl); + (void)(eps); + constexpr double t4 = constants::m_cbrt_3; + constexpr double t5 = constants::m_cbrt_pi; + constexpr double t21 = constants::m_cbrt_6; + constexpr double t22 = constants::m_pi_sq; + constexpr double t23 = constants::m_cbrt_pi_sq; + constexpr double t27 = constants::m_cbrt_2; + constexpr double t7 = t4 / t5; + constexpr double t24 = t23 * t23; + constexpr double t25 = 0.1e1 / t24; + constexpr double t26 = t21 * t25; + constexpr double t28 = t27 * t27; + constexpr double t51 = t21 * t21; + constexpr double t53 = 0.1e1 / t23 / t22; + constexpr double t54 = t51 * t53; + constexpr double t117 = t25 * t28; + + + const double t3 = rho / 0.2e1 <= dens_tol; + const double t8 = 0.1e1 <= zeta_tol; + const double t9 = zeta_tol - 0.1e1; + const double t11 = piecewise_functor_5( t8, t9, t8, -t9, 0.0 ); + const double t12 = 0.1e1 + t11; + const double t14 = safe_math::cbrt( zeta_tol ); + const double t16 = safe_math::cbrt( t12 ); + const double t18 = piecewise_functor_3( t12 <= zeta_tol, t14 * zeta_tol, t16 * t12 ); + const double t19 = safe_math::cbrt( rho ); + const double t29 = sigma * t28; + const double t30 = rho * rho; + const double t31 = t19 * t19; + const double t33 = 0.1e1 / t31 / t30; + const double t34 = t29 * t33; + const double t35 = t26 * t34; + const double t37 = tau * t28; + const double t39 = 0.1e1 / t31 / rho; + const double t44 = t26 * t37 * t39 / 0.4e1 - 0.9e1 / 0.2e2 - t35 / 0.288e3; + const double t45 = t44 * t44; + const double t47 = t44 * t21; + const double t48 = t47 * t25; + const double t55 = sigma * sigma; + const double t56 = t55 * t27; + const double t57 = t30 * t30; + const double t58 = t57 * rho; + const double t60 = 0.1e1 / t19 / t58; + const double t64 = 0.804e0 + 0.5e1 / 0.972e3 * t35 + 0.146e3 / 0.2025e4 * t45 - 0.73e2 / 0.972e4 * t48 * t34 + 0.45818468001825619316e-3 * t54 * t56 * t60; + const double t67 = 0.1804e1 - 0.646416e0 / t64; + const double t71 = piecewise_functor_3( t3, 0.0, -0.3e1 / 0.8e1 * t7 * t18 * t19 * t67 ); + const double t72 = 0.1e1 / t31; + const double t77 = t4 * t18; + const double t78 = t64 * t64; + const double t79 = 0.1e1 / t78; + const double t80 = t19 * t79; + const double t81 = t30 * rho; + const double t83 = 0.1e1 / t31 / t81; + const double t84 = t29 * t83; + const double t85 = t26 * t84; + const double t91 = -0.5e1 / 0.12e2 * t26 * t37 * t33 + t85 / 0.108e3; + const double t94 = t91 * t21; + const double t95 = t94 * t25; + const double t100 = t57 * t30; + const double t102 = 0.1e1 / t19 / t100; + const double t106 = -0.1e2 / 0.729e3 * t85 + 0.292e3 / 0.2025e4 * t44 * t91 - 0.73e2 / 0.972e4 * t95 * t34 + 0.73e2 / 0.3645e4 * t48 * t84 - 0.24436516267640330302e-2 * t54 * t56 * t102; + const double t111 = piecewise_functor_3( t3, 0.0, -t7 * t18 * t72 * t67 / 0.8e1 - 0.16551095363746320496e0 * t77 * t80 * t106 ); + const double t118 = t117 * t33; + const double t119 = t47 * t118; + const double t123 = t54 * t27 * t60 * sigma; + const double t125 = 0.5e1 / 0.972e3 * t26 * t28 * t33 - 0.146e3 / 0.18225e5 * t119 + 0.96852413827153753492e-3 * t123; + const double t129 = piecewise_functor_3( t3, 0.0, -0.16551095363746320496e0 * t77 * t80 * t125 ); + const double t131 = t117 * t39; + const double t140 = 0.73e2 / 0.2025e4 * t47 * t131 - 0.73e2 / 0.1944e5 * t54 * t27 / t19 / t57 * sigma; + const double t144 = piecewise_functor_3( t3, 0.0, -0.16551095363746320496e0 * t77 * t80 * t140 ); + + + eps = 0.2e1 * t71; + vrho = 0.2e1 * rho * t111 + 0.2e1 * t71; + vsigma = 0.2e1 * rho * t129; + vlapl = 0.e0; + vtau = 0.2e1 * rho * t144; + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_polar_impl( double rho_a, double rho_b, double sigma_aa, double sigma_ab, double sigma_bb, double lapl_a, double lapl_b, double tau_a, double tau_b, double& eps ) { + + (void)(sigma_ab); + (void)(lapl_a); + (void)(lapl_b); + (void)(eps); + constexpr double t3 = constants::m_cbrt_3; + constexpr double t4 = constants::m_cbrt_pi; + constexpr double t29 = constants::m_cbrt_6; + constexpr double t30 = constants::m_pi_sq; + constexpr double t31 = constants::m_cbrt_pi_sq; + constexpr double t6 = t3 / t4; + constexpr double t32 = t31 * t31; + constexpr double t33 = 0.1e1 / t32; + constexpr double t34 = t29 * t33; + constexpr double t57 = t29 * t29; + constexpr double t59 = 0.1e1 / t31 / t30; + constexpr double t60 = t57 * t59; + + + const double t2 = rho_a <= dens_tol; + const double t7 = rho_a + rho_b; + const double t8 = 0.1e1 / t7; + const double t11 = 0.2e1 * rho_a * t8 <= zeta_tol; + const double t12 = zeta_tol - 0.1e1; + const double t15 = 0.2e1 * rho_b * t8 <= zeta_tol; + const double t16 = -t12; + const double t17 = rho_a - rho_b; + const double t19 = piecewise_functor_5( t11, t12, t15, t16, t17 * t8 ); + const double t20 = 0.1e1 + t19; + const double t21 = t20 <= zeta_tol; + const double t22 = safe_math::cbrt( zeta_tol ); + const double t23 = t22 * zeta_tol; + const double t24 = safe_math::cbrt( t20 ); + const double t26 = piecewise_functor_3( t21, t23, t24 * t20 ); + const double t27 = safe_math::cbrt( t7 ); + const double t35 = rho_a * rho_a; + const double t36 = safe_math::cbrt( rho_a ); + const double t37 = t36 * t36; + const double t39 = 0.1e1 / t37 / t35; + const double t41 = t34 * sigma_aa * t39; + const double t44 = 0.1e1 / t37 / rho_a; + const double t49 = t34 * tau_a * t44 / 0.4e1 - 0.9e1 / 0.2e2 - t41 / 0.288e3; + const double t50 = t49 * t49; + const double t52 = t49 * t29; + const double t53 = t33 * sigma_aa; + const double t54 = t53 * t39; + const double t61 = sigma_aa * sigma_aa; + const double t62 = t35 * t35; + const double t63 = t62 * rho_a; + const double t65 = 0.1e1 / t36 / t63; + const double t69 = 0.804e0 + 0.5e1 / 0.972e3 * t41 + 0.146e3 / 0.2025e4 * t50 - 0.73e2 / 0.972e4 * t52 * t54 + 0.22909234000912809658e-3 * t60 * t61 * t65; + const double t72 = 0.1804e1 - 0.646416e0 / t69; + const double t76 = piecewise_functor_3( t2, 0.0, -0.3e1 / 0.8e1 * t6 * t26 * t27 * t72 ); + const double t77 = rho_b <= dens_tol; + const double t78 = -t17; + const double t80 = piecewise_functor_5( t15, t12, t11, t16, t78 * t8 ); + const double t81 = 0.1e1 + t80; + const double t82 = t81 <= zeta_tol; + const double t83 = safe_math::cbrt( t81 ); + const double t85 = piecewise_functor_3( t82, t23, t83 * t81 ); + const double t87 = rho_b * rho_b; + const double t88 = safe_math::cbrt( rho_b ); + const double t89 = t88 * t88; + const double t91 = 0.1e1 / t89 / t87; + const double t93 = t34 * sigma_bb * t91; + const double t96 = 0.1e1 / t89 / rho_b; + const double t101 = t34 * tau_b * t96 / 0.4e1 - 0.9e1 / 0.2e2 - t93 / 0.288e3; + const double t102 = t101 * t101; + const double t104 = t101 * t29; + const double t105 = t33 * sigma_bb; + const double t106 = t105 * t91; + const double t109 = sigma_bb * sigma_bb; + const double t110 = t87 * t87; + const double t111 = t110 * rho_b; + const double t113 = 0.1e1 / t88 / t111; + const double t117 = 0.804e0 + 0.5e1 / 0.972e3 * t93 + 0.146e3 / 0.2025e4 * t102 - 0.73e2 / 0.972e4 * t104 * t106 + 0.22909234000912809658e-3 * t60 * t109 * t113; + const double t120 = 0.1804e1 - 0.646416e0 / t117; + const double t124 = piecewise_functor_3( t77, 0.0, -0.3e1 / 0.8e1 * t6 * t85 * t27 * t120 ); + + + eps = t76 + t124; + + } + + BUILTIN_KERNEL_EVAL_RETURN + eval_exc_vxc_polar_impl( double rho_a, double rho_b, double sigma_aa, double sigma_ab, double sigma_bb, double lapl_a, double lapl_b, double tau_a, double tau_b, double& eps, double& vrho_a, double& vrho_b, double& vsigma_aa, double& vsigma_ab, double& vsigma_bb, double& vlapl_a, double& vlapl_b, double& vtau_a, double& vtau_b ) { + + (void)(sigma_ab); + (void)(lapl_a); + (void)(lapl_b); + (void)(eps); + constexpr double t3 = constants::m_cbrt_3; + constexpr double t4 = constants::m_cbrt_pi; + constexpr double t29 = constants::m_cbrt_6; + constexpr double t30 = constants::m_pi_sq; + constexpr double t31 = constants::m_cbrt_pi_sq; + constexpr double t6 = t3 / t4; + constexpr double t32 = t31 * t31; + constexpr double t33 = 0.1e1 / t32; + constexpr double t34 = t29 * t33; + constexpr double t57 = t29 * t29; + constexpr double t59 = 0.1e1 / t31 / t30; + constexpr double t60 = t57 * t59; + + + const double t2 = rho_a <= dens_tol; + const double t7 = rho_a + rho_b; + const double t8 = 0.1e1 / t7; + const double t11 = 0.2e1 * rho_a * t8 <= zeta_tol; + const double t12 = zeta_tol - 0.1e1; + const double t15 = 0.2e1 * rho_b * t8 <= zeta_tol; + const double t16 = -t12; + const double t17 = rho_a - rho_b; + const double t19 = piecewise_functor_5( t11, t12, t15, t16, t17 * t8 ); + const double t20 = 0.1e1 + t19; + const double t21 = t20 <= zeta_tol; + const double t22 = safe_math::cbrt( zeta_tol ); + const double t23 = t22 * zeta_tol; + const double t24 = safe_math::cbrt( t20 ); + const double t26 = piecewise_functor_3( t21, t23, t24 * t20 ); + const double t27 = safe_math::cbrt( t7 ); + const double t35 = rho_a * rho_a; + const double t36 = safe_math::cbrt( rho_a ); + const double t37 = t36 * t36; + const double t39 = 0.1e1 / t37 / t35; + const double t41 = t34 * sigma_aa * t39; + const double t44 = 0.1e1 / t37 / rho_a; + const double t49 = t34 * tau_a * t44 / 0.4e1 - 0.9e1 / 0.2e2 - t41 / 0.288e3; + const double t50 = t49 * t49; + const double t52 = t49 * t29; + const double t53 = t33 * sigma_aa; + const double t54 = t53 * t39; + const double t61 = sigma_aa * sigma_aa; + const double t62 = t35 * t35; + const double t63 = t62 * rho_a; + const double t65 = 0.1e1 / t36 / t63; + const double t69 = 0.804e0 + 0.5e1 / 0.972e3 * t41 + 0.146e3 / 0.2025e4 * t50 - 0.73e2 / 0.972e4 * t52 * t54 + 0.22909234000912809658e-3 * t60 * t61 * t65; + const double t72 = 0.1804e1 - 0.646416e0 / t69; + const double t76 = piecewise_functor_3( t2, 0.0, -0.3e1 / 0.8e1 * t6 * t26 * t27 * t72 ); + const double t77 = rho_b <= dens_tol; + const double t78 = -t17; + const double t80 = piecewise_functor_5( t15, t12, t11, t16, t78 * t8 ); + const double t81 = 0.1e1 + t80; + const double t82 = t81 <= zeta_tol; + const double t83 = safe_math::cbrt( t81 ); + const double t85 = piecewise_functor_3( t82, t23, t83 * t81 ); + const double t87 = rho_b * rho_b; + const double t88 = safe_math::cbrt( rho_b ); + const double t89 = t88 * t88; + const double t91 = 0.1e1 / t89 / t87; + const double t93 = t34 * sigma_bb * t91; + const double t96 = 0.1e1 / t89 / rho_b; + const double t101 = t34 * tau_b * t96 / 0.4e1 - 0.9e1 / 0.2e2 - t93 / 0.288e3; + const double t102 = t101 * t101; + const double t104 = t101 * t29; + const double t105 = t33 * sigma_bb; + const double t106 = t105 * t91; + const double t109 = sigma_bb * sigma_bb; + const double t110 = t87 * t87; + const double t111 = t110 * rho_b; + const double t113 = 0.1e1 / t88 / t111; + const double t117 = 0.804e0 + 0.5e1 / 0.972e3 * t93 + 0.146e3 / 0.2025e4 * t102 - 0.73e2 / 0.972e4 * t104 * t106 + 0.22909234000912809658e-3 * t60 * t109 * t113; + const double t120 = 0.1804e1 - 0.646416e0 / t117; + const double t124 = piecewise_functor_3( t77, 0.0, -0.3e1 / 0.8e1 * t6 * t85 * t27 * t120 ); + const double t125 = t7 * t7; + const double t126 = 0.1e1 / t125; + const double t127 = t17 * t126; + const double t129 = piecewise_functor_5( t11, 0.0, t15, 0.0, t8 - t127 ); + const double t132 = piecewise_functor_3( t21, 0.0, 0.4e1 / 0.3e1 * t24 * t129 ); + const double t137 = t27 * t27; + const double t138 = 0.1e1 / t137; + const double t142 = t6 * t26 * t138 * t72 / 0.8e1; + const double t143 = t3 * t26; + const double t144 = t69 * t69; + const double t145 = 0.1e1 / t144; + const double t146 = t27 * t145; + const double t147 = t35 * rho_a; + const double t149 = 0.1e1 / t37 / t147; + const double t151 = t34 * sigma_aa * t149; + const double t157 = -0.5e1 / 0.12e2 * t34 * tau_a * t39 + t151 / 0.108e3; + const double t160 = t157 * t29; + const double t163 = t53 * t149; + const double t166 = t62 * t35; + const double t168 = 0.1e1 / t36 / t166; + const double t172 = -0.1e2 / 0.729e3 * t151 + 0.292e3 / 0.2025e4 * t49 * t157 - 0.73e2 / 0.972e4 * t160 * t54 + 0.73e2 / 0.3645e4 * t52 * t163 - 0.12218258133820165151e-2 * t60 * t61 * t168; + const double t173 = t146 * t172; + const double t177 = piecewise_functor_3( t2, 0.0, -0.3e1 / 0.8e1 * t6 * t132 * t27 * t72 - t142 - 0.16551095363746320496e0 * t143 * t173 ); + const double t178 = t78 * t126; + const double t180 = piecewise_functor_5( t15, 0.0, t11, 0.0, -t8 - t178 ); + const double t183 = piecewise_functor_3( t82, 0.0, 0.4e1 / 0.3e1 * t83 * t180 ); + const double t191 = t6 * t85 * t138 * t120 / 0.8e1; + const double t193 = piecewise_functor_3( t77, 0.0, -0.3e1 / 0.8e1 * t6 * t183 * t27 * t120 - t191 ); + const double t197 = piecewise_functor_5( t11, 0.0, t15, 0.0, -t8 - t127 ); + const double t200 = piecewise_functor_3( t21, 0.0, 0.4e1 / 0.3e1 * t24 * t197 ); + const double t206 = piecewise_functor_3( t2, 0.0, -0.3e1 / 0.8e1 * t6 * t200 * t27 * t72 - t142 ); + const double t208 = piecewise_functor_5( t15, 0.0, t11, 0.0, t8 - t178 ); + const double t211 = piecewise_functor_3( t82, 0.0, 0.4e1 / 0.3e1 * t83 * t208 ); + const double t216 = t3 * t85; + const double t217 = t117 * t117; + const double t218 = 0.1e1 / t217; + const double t219 = t27 * t218; + const double t220 = t87 * rho_b; + const double t222 = 0.1e1 / t89 / t220; + const double t224 = t34 * sigma_bb * t222; + const double t230 = -0.5e1 / 0.12e2 * t34 * tau_b * t91 + t224 / 0.108e3; + const double t233 = t230 * t29; + const double t236 = t105 * t222; + const double t239 = t110 * t87; + const double t241 = 0.1e1 / t88 / t239; + const double t245 = -0.1e2 / 0.729e3 * t224 + 0.292e3 / 0.2025e4 * t101 * t230 - 0.73e2 / 0.972e4 * t233 * t106 + 0.73e2 / 0.3645e4 * t104 * t236 - 0.12218258133820165151e-2 * t60 * t109 * t241; + const double t246 = t219 * t245; + const double t250 = piecewise_functor_3( t77, 0.0, -0.3e1 / 0.8e1 * t6 * t211 * t27 * t120 - t191 - 0.16551095363746320496e0 * t216 * t246 ); + const double t255 = t33 * t39; + const double t256 = t52 * t255; + const double t259 = t60 * t65 * sigma_aa; + const double t261 = 0.5e1 / 0.972e3 * t34 * t39 - 0.146e3 / 0.18225e5 * t256 + 0.48426206913576876746e-3 * t259; + const double t262 = t146 * t261; + const double t265 = piecewise_functor_3( t2, 0.0, -0.16551095363746320496e0 * t143 * t262 ); + const double t268 = t33 * t91; + const double t269 = t104 * t268; + const double t272 = t60 * t113 * sigma_bb; + const double t274 = 0.5e1 / 0.972e3 * t34 * t91 - 0.146e3 / 0.18225e5 * t269 + 0.48426206913576876746e-3 * t272; + const double t275 = t219 * t274; + const double t278 = piecewise_functor_3( t77, 0.0, -0.16551095363746320496e0 * t216 * t275 ); + const double t279 = t33 * t44; + const double t283 = 0.1e1 / t36 / t62; + const double t287 = 0.73e2 / 0.2025e4 * t52 * t279 - 0.73e2 / 0.3888e5 * t60 * t283 * sigma_aa; + const double t288 = t146 * t287; + const double t291 = piecewise_functor_3( t2, 0.0, -0.16551095363746320496e0 * t143 * t288 ); + const double t292 = t33 * t96; + const double t296 = 0.1e1 / t88 / t110; + const double t300 = 0.73e2 / 0.2025e4 * t104 * t292 - 0.73e2 / 0.3888e5 * t60 * t296 * sigma_bb; + const double t301 = t219 * t300; + const double t304 = piecewise_functor_3( t77, 0.0, -0.16551095363746320496e0 * t216 * t301 ); + + + eps = t76 + t124; + vrho_a = t76 + t124 + t7 * ( t177 + t193 ); + vrho_b = t76 + t124 + t7 * ( t206 + t250 ); + vsigma_aa = t7 * t265; + vsigma_ab = 0.e0; + vsigma_bb = t7 * t278; + vlapl_a = 0.e0; + vlapl_b = 0.e0; + vtau_a = t7 * t291; + vtau_b = t7 * t304; + + } + + +}; + +struct BuiltinPKZB_X : detail::BuiltinKernelImpl< BuiltinPKZB_X > { + + BuiltinPKZB_X( Spin p ) : + detail::BuiltinKernelImpl< BuiltinPKZB_X >(p) { } + + virtual ~BuiltinPKZB_X() = default; + +}; + + + +} // namespace ExchCXX \ No newline at end of file diff --git a/include/exchcxx/impl/builtin/kernels/pw91_lda.hpp b/include/exchcxx/impl/builtin/kernels/pw91_lda.hpp index d54caa4..3b38544 100644 --- a/include/exchcxx/impl/builtin/kernels/pw91_lda.hpp +++ b/include/exchcxx/impl/builtin/kernels/pw91_lda.hpp @@ -291,7 +291,7 @@ struct kernel_traits< BuiltinPW91_LDA > : const double t132 = 0.1e1 + t112 / t128 / 0.2e1; const double t133 = safe_math::log( t132 ); const double t135 = t133 * t134; - const double t138 = -0.2e1 * t103 * t75 * t80 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; + const double t138 = -0.2e1 * t75 * t80 * t103 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; const double t139 = t74 * t138; const double t140 = t54 * t139; const double t143 = t110 * t133 * t134; @@ -396,7 +396,7 @@ struct kernel_traits< BuiltinPW91_LDA > : const double t132 = 0.1e1 + t112 / t128 / 0.2e1; const double t133 = safe_math::log( t132 ); const double t135 = t133 * t134; - const double t138 = -0.2e1 * t103 * t75 * t80 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; + const double t138 = -0.2e1 * t75 * t80 * t103 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; const double t139 = t74 * t138; const double t140 = t54 * t139; const double t143 = t110 * t133 * t134; diff --git a/include/exchcxx/impl/builtin/kernels/pw91_lda_mod.hpp b/include/exchcxx/impl/builtin/kernels/pw91_lda_mod.hpp index 2c9e274..7119b70 100644 --- a/include/exchcxx/impl/builtin/kernels/pw91_lda_mod.hpp +++ b/include/exchcxx/impl/builtin/kernels/pw91_lda_mod.hpp @@ -291,7 +291,7 @@ struct kernel_traits< BuiltinPW91_LDA_MOD > : const double t132 = 0.1e1 + t112 / t128 / 0.2e1; const double t133 = safe_math::log( t132 ); const double t135 = t133 * t134; - const double t138 = -0.2e1 * t103 * t75 * t80 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; + const double t138 = -0.2e1 * t75 * t80 * t103 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; const double t139 = t74 * t138; const double t140 = t54 * t139; const double t143 = t110 * t133 * t134; @@ -396,7 +396,7 @@ struct kernel_traits< BuiltinPW91_LDA_MOD > : const double t132 = 0.1e1 + t112 / t128 / 0.2e1; const double t133 = safe_math::log( t132 ); const double t135 = t133 * t134; - const double t138 = -0.2e1 * t103 * t75 * t80 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; + const double t138 = -0.2e1 * t75 * t80 * t103 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; const double t139 = t74 * t138; const double t140 = t54 * t139; const double t143 = t110 * t133 * t134; diff --git a/include/exchcxx/impl/builtin/kernels/pw91_lda_rpa.hpp b/include/exchcxx/impl/builtin/kernels/pw91_lda_rpa.hpp index 19576d4..43dc17c 100644 --- a/include/exchcxx/impl/builtin/kernels/pw91_lda_rpa.hpp +++ b/include/exchcxx/impl/builtin/kernels/pw91_lda_rpa.hpp @@ -291,7 +291,7 @@ struct kernel_traits< BuiltinPW91_LDA_RPA > : const double t132 = 0.1e1 + t112 / t128 / 0.2e1; const double t133 = safe_math::log( t132 ); const double t135 = t133 * t134; - const double t138 = -0.2e1 * t103 * t75 * t80 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; + const double t138 = -0.2e1 * t75 * t80 * t103 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; const double t139 = t74 * t138; const double t140 = t54 * t139; const double t143 = t110 * t133 * t134; @@ -396,7 +396,7 @@ struct kernel_traits< BuiltinPW91_LDA_RPA > : const double t132 = 0.1e1 + t112 / t128 / 0.2e1; const double t133 = safe_math::log( t132 ); const double t135 = t133 * t134; - const double t138 = -0.2e1 * t103 * t75 * t80 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; + const double t138 = -0.2e1 * t75 * t80 * t103 - 0.2e1 * t105 * t110 * t135 + 0.2e1 * t46; const double t139 = t74 * t138; const double t140 = t54 * t139; const double t143 = t110 * t133 * t134; diff --git a/include/exchcxx/impl/builtin/kernels/scan_x.hpp b/include/exchcxx/impl/builtin/kernels/scan_x.hpp index d1cb98e..b9332f8 100644 --- a/include/exchcxx/impl/builtin/kernels/scan_x.hpp +++ b/include/exchcxx/impl/builtin/kernels/scan_x.hpp @@ -706,7 +706,7 @@ struct kernel_traits< BuiltinSCAN_X > : const double t315 = t102 * t102; const double t316 = 0.1e1 / t315; const double t317 = t316 * t312; - const double t319 = -t103 * t312 * c1 - t101 * t317; + const double t319 = -c1 * t312 * t103 - t101 * t317; const double t320 = t319 * t105; const double t321 = piecewise_functor_3( t98, 0.0, t320 ); const double t323 = t116 * t116; @@ -766,7 +766,7 @@ struct kernel_traits< BuiltinSCAN_X > : const double t442 = t208 * t208; const double t443 = 0.1e1 / t442; const double t444 = t443 * t439; - const double t446 = -t209 * t439 * c1 - t207 * t444; + const double t446 = -c1 * t439 * t209 - t207 * t444; const double t447 = t446 * t211; const double t448 = piecewise_functor_3( t204, 0.0, t447 ); const double t449 = t215 * t215; @@ -796,7 +796,7 @@ struct kernel_traits< BuiltinSCAN_X > : const double t508 = piecewise_functor_3( t99, -t507, 0.0 ); const double t509 = c1 * t508; const double t511 = t316 * t508; - const double t513 = -t101 * t511 - t103 * t509; + const double t513 = -t101 * t511 - t509 * t103; const double t514 = t513 * t105; const double t515 = piecewise_functor_3( t98, 0.0, t514 ); const double t516 = piecewise_functor_3( t114, 0.0, -t507 ); @@ -820,7 +820,7 @@ struct kernel_traits< BuiltinSCAN_X > : const double t565 = piecewise_functor_3( t205, -t564, 0.0 ); const double t566 = c1 * t565; const double t568 = t443 * t565; - const double t570 = -t207 * t568 - t209 * t566; + const double t570 = -t207 * t568 - t566 * t209; const double t571 = t570 * t211; const double t572 = piecewise_functor_3( t204, 0.0, t571 ); const double t573 = piecewise_functor_3( t213, 0.0, -t564 ); @@ -838,7 +838,7 @@ struct kernel_traits< BuiltinSCAN_X > : const double t606 = 0.5e1 / 0.9e1 * t71 * t29 * t33; const double t607 = piecewise_functor_3( t99, t606, 0.0 ); const double t608 = c1 * t607; - const double t612 = -t101 * t316 * t607 - t103 * t608; + const double t612 = -t101 * t316 * t607 - t608 * t103; const double t613 = t612 * t105; const double t614 = piecewise_functor_3( t98, 0.0, t613 ); const double t615 = piecewise_functor_3( t114, 0.0, t606 ); @@ -854,7 +854,7 @@ struct kernel_traits< BuiltinSCAN_X > : const double t641 = 0.5e1 / 0.9e1 * t181 * t29 * t33; const double t642 = piecewise_functor_3( t205, t641, 0.0 ); const double t643 = c1 * t642; - const double t647 = -t207 * t443 * t642 - t209 * t643; + const double t647 = -t207 * t443 * t642 - t643 * t209; const double t648 = t647 * t211; const double t649 = piecewise_functor_3( t204, 0.0, t648 ); const double t650 = piecewise_functor_3( t213, 0.0, t641 ); diff --git a/src/builtin_interface.cxx b/src/builtin_interface.cxx index 275cfea..398a590 100644 --- a/src/builtin_interface.cxx +++ b/src/builtin_interface.cxx @@ -116,6 +116,14 @@ std::unique_ptr return std::make_unique( polar ); else if( kern == Kernel::FT98_X ) return std::make_unique( polar ); + else if( kern == Kernel::M062X_X ) + return std::make_unique( polar ); + else if( kern == Kernel::M062X_C ) + return std::make_unique( polar ); + else if( kern == Kernel::PKZB_X ) + return std::make_unique( polar ); + else if( kern == Kernel::PKZB_C ) + return std::make_unique( polar ); else if( kern == Kernel::PC07_K ) return std::make_unique( polar ); diff --git a/src/builtin_kernel.cxx b/src/builtin_kernel.cxx index 9b1c48f..d4ebef3 100644 --- a/src/builtin_kernel.cxx +++ b/src/builtin_kernel.cxx @@ -645,6 +645,10 @@ MGGA_GENERATE_HOST_HELPERS( BuiltinSCAN_C ) MGGA_GENERATE_HOST_HELPERS( BuiltinR2SCAN_X ) MGGA_GENERATE_HOST_HELPERS( BuiltinR2SCAN_C ) MGGA_GENERATE_HOST_HELPERS( BuiltinFT98_X ) +MGGA_GENERATE_HOST_HELPERS( BuiltinM062X_X ) +MGGA_GENERATE_HOST_HELPERS( BuiltinM062X_C ) +MGGA_GENERATE_HOST_HELPERS( BuiltinPKZB_X ) +MGGA_GENERATE_HOST_HELPERS( BuiltinPKZB_C ) MGGA_GENERATE_HOST_HELPERS( BuiltinPC07_K ) MGGA_GENERATE_HOST_HELPERS( BuiltinPC07OPT_K ) diff --git a/src/cuda/builtin.cu b/src/cuda/builtin.cu index 9c7d9e5..a20b5d8 100644 --- a/src/cuda/builtin.cu +++ b/src/cuda/builtin.cu @@ -878,6 +878,10 @@ MGGA_GENERATE_DEVICE_HELPERS( BuiltinSCAN_C ); MGGA_GENERATE_DEVICE_HELPERS( BuiltinR2SCAN_X ); MGGA_GENERATE_DEVICE_HELPERS( BuiltinR2SCAN_C ); MGGA_GENERATE_DEVICE_HELPERS( BuiltinFT98_X ); +MGGA_GENERATE_DEVICE_HELPERS( BuiltinM062X_X ); +MGGA_GENERATE_DEVICE_HELPERS( BuiltinM062X_C ); +MGGA_GENERATE_DEVICE_HELPERS( BuiltinPKZB_X ); +MGGA_GENERATE_DEVICE_HELPERS( BuiltinPKZB_C ); MGGA_GENERATE_DEVICE_HELPERS( BuiltinPC07_K ); MGGA_GENERATE_DEVICE_HELPERS( BuiltinPC07OPT_K ); diff --git a/src/libxc.cxx b/src/libxc.cxx index af0c77b..a22b309 100644 --- a/src/libxc.cxx +++ b/src/libxc.cxx @@ -66,40 +66,44 @@ add_libxc_support( VWN5 ) std::unordered_map< Kernel, int > libxc_kernel_map { // LDA Functionals - { Kernel::SlaterExchange, XC_LDA_X }, - { Kernel::VWN3, XC_LDA_C_VWN_3 }, - { Kernel::VWN5, XC_LDA_C_VWN_RPA }, - { Kernel::PZ81, XC_LDA_C_PZ }, - { Kernel::PZ81_MOD, XC_LDA_C_PZ_MOD }, - { Kernel::PW91_LDA, XC_LDA_C_PW }, - { Kernel::PW91_LDA_MOD, XC_LDA_C_PW_MOD }, - { Kernel::PW91_LDA_RPA, XC_LDA_C_PW_RPA }, + { Kernel::SlaterExchange, XC_LDA_X }, + { Kernel::VWN3, XC_LDA_C_VWN_3 }, + { Kernel::VWN5, XC_LDA_C_VWN_RPA }, + { Kernel::PZ81, XC_LDA_C_PZ }, + { Kernel::PZ81_MOD, XC_LDA_C_PZ_MOD }, + { Kernel::PW91_LDA, XC_LDA_C_PW }, + { Kernel::PW91_LDA_MOD, XC_LDA_C_PW_MOD }, + { Kernel::PW91_LDA_RPA, XC_LDA_C_PW_RPA }, // GGA Functionals - { Kernel::PBE_X, XC_GGA_X_PBE }, - { Kernel::PBE_C, XC_GGA_C_PBE }, - { Kernel::revPBE_X, XC_GGA_X_PBE_R }, - { Kernel::B88, XC_GGA_X_B88 }, - { Kernel::LYP, XC_GGA_C_LYP }, + { Kernel::PBE_X, XC_GGA_X_PBE }, + { Kernel::PBE_C, XC_GGA_C_PBE }, + { Kernel::revPBE_X, XC_GGA_X_PBE_R }, + { Kernel::B88, XC_GGA_X_B88 }, + { Kernel::LYP, XC_GGA_C_LYP }, // MGGA Functionals - { Kernel::SCAN_C, XC_MGGA_C_SCAN }, - { Kernel::SCAN_X, XC_MGGA_X_SCAN }, - { Kernel::SCANL_C, XC_MGGA_C_SCANL }, - { Kernel::SCANL_X, XC_MGGA_X_SCANL }, - { Kernel::R2SCAN_C, XC_MGGA_C_R2SCAN }, - { Kernel::R2SCAN_X, XC_MGGA_X_R2SCAN }, - { Kernel::R2SCANL_C, XC_MGGA_C_R2SCANL }, - { Kernel::R2SCANL_X, XC_MGGA_X_R2SCANL }, - { Kernel::FT98_X, XC_MGGA_X_FT98 }, + { Kernel::SCAN_C, XC_MGGA_C_SCAN }, + { Kernel::SCAN_X, XC_MGGA_X_SCAN }, + { Kernel::SCANL_C, XC_MGGA_C_SCANL }, + { Kernel::SCANL_X, XC_MGGA_X_SCANL }, + { Kernel::R2SCAN_C, XC_MGGA_C_R2SCAN }, + { Kernel::R2SCAN_X, XC_MGGA_X_R2SCAN }, + { Kernel::R2SCANL_C, XC_MGGA_C_R2SCANL }, + { Kernel::R2SCANL_X, XC_MGGA_X_R2SCANL }, + { Kernel::FT98_X, XC_MGGA_X_FT98 }, + { Kernel::M062X_X, XC_HYB_MGGA_X_M06_2X }, + { Kernel::M062X_C, XC_MGGA_C_M06_2X }, + { Kernel::PKZB_X, XC_MGGA_X_PKZB }, + { Kernel::PKZB_C, XC_MGGA_C_PKZB }, // KEDFs - { Kernel::PC07_K, XC_MGGA_K_PC07 }, - { Kernel::PC07OPT_K, XC_MGGA_K_PC07_OPT }, + { Kernel::PC07_K, XC_MGGA_K_PC07 }, + { Kernel::PC07OPT_K, XC_MGGA_K_PC07_OPT }, // Hybrid GGA Functionals - { Kernel::B3LYP, XC_HYB_GGA_XC_B3LYP }, - { Kernel::PBE0, XC_HYB_GGA_XC_PBEH }, + { Kernel::B3LYP, XC_HYB_GGA_XC_B3LYP }, + { Kernel::PBE0, XC_HYB_GGA_XC_PBEH }, }; diff --git a/src/xc_functional.cxx b/src/xc_functional.cxx index 4a45bfc..f412fa8 100644 --- a/src/xc_functional.cxx +++ b/src/xc_functional.cxx @@ -57,6 +57,8 @@ BidirectionalMap functional_map{ {"SCAN", Functional::SCAN}, {"R2SCAN", Functional::R2SCAN}, {"R2SCANL", Functional::R2SCANL}, + {"M062X", Functional::M062X}, + {"PKZB", Functional::PKZB}, {"revPBE", Functional::revPBE}, {"PBE0", Functional::PBE0}, {"EPC17_1", Functional::EPC17_1}, @@ -111,6 +113,16 @@ std::vector< XCKernel > functional_factory( XCKernel( backend, Kernel::R2SCAN_X, polar ), XCKernel( backend, Kernel::R2SCAN_C, polar ) }; + else if( func == Functional::PKZB ) + kerns = { + XCKernel( backend, Kernel::PKZB_X, polar ), + XCKernel( backend, Kernel::PKZB_C, polar ) + }; + else if( func == Functional::M062X ) + kerns = { + XCKernel( backend, Kernel::M062X_X, polar ), + XCKernel( backend, Kernel::M062X_C, polar ) + }; else if( func == Functional::R2SCANL ) kerns = { XCKernel( backend, Kernel::R2SCANL_X, polar ), diff --git a/src/xc_kernel.cxx b/src/xc_kernel.cxx index 2fd052e..7d046bf 100644 --- a/src/xc_kernel.cxx +++ b/src/xc_kernel.cxx @@ -64,6 +64,10 @@ BidirectionalMap kernel_map{ {"R2SCAN_C", Kernel::R2SCAN_C}, {"R2SCANL_X", Kernel::R2SCANL_X}, {"R2SCANL_C", Kernel::R2SCANL_C}, + {"M062X_X", Kernel::M062X_X}, + {"M062X_C", Kernel::M062X_C}, + {"PKZB_X", Kernel::PKZB_X}, + {"PKZB_C", Kernel::PKZB_C}, {"revPBE_X", Kernel::revPBE_X}, {"LYP", Kernel::LYP}, {"B3LYP", Kernel::B3LYP}, diff --git a/test/reference_values.cxx b/test/reference_values.cxx index 34c8e23..7b8302d 100644 --- a/test/reference_values.cxx +++ b/test/reference_values.cxx @@ -572,9 +572,10 @@ double load_reference_exx( ExchCXX::Kernel kern ) { double exx; switch(kern) { - case Kernel::B3LYP: exx = 0.2; break; - case Kernel::PBE0: exx = 0.25; break; - default: exx = 0; + case Kernel::B3LYP: exx = 0.2; break; + case Kernel::PBE0: exx = 0.25; break; + case Kernel::M062X_X: exx = 0.54; break; + default: exx = 0; } return exx; diff --git a/test/ut_common.hpp b/test/ut_common.hpp index 3da27e2..e408232 100644 --- a/test/ut_common.hpp +++ b/test/ut_common.hpp @@ -103,6 +103,8 @@ static std::vector mgga_kernels = { ExchCXX::Kernel::R2SCAN_C, ExchCXX::Kernel::R2SCANL_X, ExchCXX::Kernel::R2SCANL_C, + ExchCXX::Kernel::M062X_X, + ExchCXX::Kernel::M062X_C, ExchCXX::Kernel::FT98_X, ExchCXX::Kernel::PC07_K, ExchCXX::Kernel::PC07OPT_K @@ -143,6 +145,10 @@ static std::vector builtin_supported_kernels = { ExchCXX::Kernel::R2SCANL_X, ExchCXX::Kernel::R2SCANL_C, ExchCXX::Kernel::FT98_X, + ExchCXX::Kernel::M062X_X, + ExchCXX::Kernel::M062X_C, + ExchCXX::Kernel::PKZB_X, + ExchCXX::Kernel::PKZB_C, ExchCXX::Kernel::PC07_K, ExchCXX::Kernel::PC07OPT_K, @@ -156,7 +162,8 @@ static std::vector builtin_supported_kernels = { static std::vector unstable_small_kernels = { ExchCXX::Kernel::SCAN_C, ExchCXX::Kernel::SCANL_C, - ExchCXX::Kernel::SCANL_X + ExchCXX::Kernel::SCANL_X, + ExchCXX::Kernel::PKZB_C }; inline bool is_unstable_small(ExchCXX::Kernel kern) { @@ -183,6 +190,10 @@ static constexpr std::array string_kernal_pairs = { std::pair("R2SCANL_C", ExchCXX::Kernel::R2SCANL_C), std::pair("R2SCAN_X",ExchCXX::Kernel::R2SCAN_X), std::pair("R2SCAN_C", ExchCXX::Kernel::R2SCAN_C), + std::pair("M062X_X",ExchCXX::Kernel::M062X_X), + std::pair("M062X_C", ExchCXX::Kernel::M062X_C), + std::pair("PKZB_X",ExchCXX::Kernel::PKZB_X), + std::pair("PKZB_C", ExchCXX::Kernel::PKZB_C), std::pair("LYP", ExchCXX::Kernel::LYP), std::pair("B3LYP", ExchCXX::Kernel::B3LYP), std::pair("PBE0", ExchCXX::Kernel::PBE0), @@ -208,6 +219,8 @@ static constexpr std::array string_functional_pairs = { std::pair("PBE", ExchCXX::Functional::PBE), std::pair("SCAN", ExchCXX::Functional::SCAN), std::pair("R2SCANL", ExchCXX::Functional::R2SCANL), + std::pair("M062X", ExchCXX::Functional::M062X), + std::pair("PKZB", ExchCXX::Functional::PKZB), std::pair("PBE0", ExchCXX::Functional::PBE0), std::pair("EPC17_1", ExchCXX::Functional::EPC17_1), std::pair("EPC17_2", ExchCXX::Functional::EPC17_2),