diff --git a/README.md b/README.md
new file mode 100644
index 0000000000000000000000000000000000000000..45cee2cdd1f59bd00e42d8b5df49b78f71b72d0b
--- /dev/null
+++ b/README.md
@@ -0,0 +1,6 @@
+# genxc
+
+New approach to generate fast code based on libxc, this repository is organized as follows:
+
+**src**: code generation approach with SymPy
+**ref**: case study with gga\_x\_pbe to evaluate performance benefits before having full approach developed.
diff --git a/ref/work_gga.c b/ref/work_gga.c
new file mode 100644
index 0000000000000000000000000000000000000000..f2de0396345734e2ac2e68701c4cb612bdf88a87
--- /dev/null
+++ b/ref/work_gga.c
@@ -0,0 +1,186 @@
+/*
+ Copyright (C) 2006-2018 M.A.L. Marques
+ Copyright (C) 2019 X. Andrade
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+*/
+
+/**
+ * @file work_gga.c
+ * @brief This file is to be included in GGA functionals.
+ */
+
+#ifdef XC_DEBUG
+#define __USE_GNU
+#include <fenv.h>
+#endif
+
+/* hack to avoid compiler warnings */
+#define NOARG
+
+#ifdef XC_NO_EXC
+#define OUT_PARAMS GGA_OUT_PARAMS_NO_EXC(XC_COMMA, )
+#else
+#define OUT_PARAMS XC_COMMA zk GGA_OUT_PARAMS_NO_EXC(XC_COMMA, )
+#endif
+
+#ifdef HAVE_CUDA
+__global__ static void
+work_gga_gpu(const XC(func_type) *p, int order, size_t np, const double *rho, const double *sigma,
+             double *zk GGA_OUT_PARAMS_NO_EXC(XC_COMMA double *, ));
+#endif
+
+/**
+ * @param[in,out] func_type: pointer to functional structure
+ */
+static void
+work_gga(const XC(func_type) *p, size_t np,
+         const double *rho, const double *sigma,
+         double *zk GGA_OUT_PARAMS_NO_EXC(XC_COMMA double *, ))
+{
+  int order = -1;
+
+  if(zk     != NULL) order = 0;
+  if(vrho   != NULL) order = 1;
+  if(v2rho2 != NULL) order = 2;
+  if(v3rho3 != NULL) order = 3;
+  if(v4rho4 != NULL) order = 4;
+
+  if(order < 0) return;
+
+#ifdef XC_DEBUG
+  /* This throws an exception when floating point errors are encountered */
+  /*feenableexcept(FE_DIVBYZERO | FE_INVALID);*/
+#endif
+
+#ifdef HAVE_CUDA
+
+  //make a copy of 'p' since it might be in host-only memory
+  XC(func_type) * pcuda = (XC(func_type) *) libxc_malloc(sizeof(XC(func_type)));
+
+  *pcuda = *p;
+
+  size_t nblocks = np/CUDA_BLOCK_SIZE;
+  if(np != nblocks*CUDA_BLOCK_SIZE) nblocks++;
+
+  work_gga_gpu<<<nblocks, CUDA_BLOCK_SIZE>>>(pcuda, order, np, rho, sigma,
+                                             zk GGA_OUT_PARAMS_NO_EXC(XC_COMMA, ));
+
+  libxc_free(pcuda);
+
+#else
+  size_t ip;
+  double dens;
+  double my_rho[2] = {0.0, 0.0};
+  double my_sigma[3] = {0.0, 0.0, 0.0};
+
+  for(ip = 0; ip < np; ip++){
+    /* Screen low density */
+    dens = (p->nspin == XC_POLARIZED) ? rho[0] + rho[1] : rho[0];
+    if(dens >= p->dens_threshold) {
+      /* sanity check of input parameters */
+      my_rho[0] = m_max(p->dens_threshold, rho[0]);
+      my_sigma[0] = m_max(p->sigma_threshold * p->sigma_threshold, sigma[0]);
+      if(p->nspin == XC_POLARIZED){
+        double s_ave;
+
+        my_rho[1] = m_max(p->dens_threshold, rho[1]);
+        my_sigma[2] = m_max(p->sigma_threshold * p->sigma_threshold, sigma[2]);
+
+        my_sigma[1] = sigma[1];
+        s_ave = 0.5*(my_sigma[0] + my_sigma[2]);
+        /* | grad n |^2 = |grad n_up + grad n_down|^2 > 0 */
+        my_sigma[1] = (my_sigma[1] >= -s_ave ? my_sigma[1] : -s_ave);
+        /* Since |grad n_up - grad n_down|^2 > 0 we also have */
+        my_sigma[1] = (my_sigma[1] <= +s_ave ? my_sigma[1] : +s_ave);
+      }
+
+      if(p->nspin == XC_UNPOLARIZED)
+        func_unpol(p, order, my_rho, my_sigma OUT_PARAMS);
+      else if(p->nspin == XC_POLARIZED)
+        func_pol  (p, order, my_rho, my_sigma OUT_PARAMS);
+    }
+
+    /* check for NaNs */
+#ifdef XC_DEBUG
+    {
+      size_t ii;
+      const xc_dimensions *dim = &(p->dim);
+      int is_OK = 1;
+
+      if(zk != NULL)
+        is_OK = is_OK & isfinite(*zk);
+
+      if(vrho != NULL){
+        for(ii=0; ii < dim->vrho; ii++)
+          is_OK = is_OK && isfinite(vrho[ii]);
+        for(ii=0; ii < dim->vsigma; ii++)
+          is_OK = is_OK && isfinite(vsigma[ii]);
+      }
+
+      if(!is_OK){
+        printf("Problem in the evaluation of the functional\n");
+        if(p->nspin == XC_UNPOLARIZED){
+          printf("./xc-get_data %d 1 %le 0.0 %le 0.0 0.0 0.0 0.0 0.0 0.0\n",
+                 p->info->number, *rho, *sigma);
+        }else{
+          printf("./xc-get_data %d 2 %le %le %le %le %le 0.0 0.0 0.0 0.0\n",
+                 p->info->number, rho[0], rho[1], sigma[0], sigma[1], sigma[2]);
+        }
+      }
+    }
+#endif
+
+    internal_counters_gga_next(&(p->dim), 0, &rho, &sigma,
+                               &zk GGA_OUT_PARAMS_NO_EXC(XC_COMMA &, ));
+  }   /* for(ip) */
+
+#endif
+}
+
+#ifdef HAVE_CUDA
+
+__global__ static void
+work_gga_gpu(const XC(func_type) *p, int order, size_t np, const double *rho, const double *sigma,
+             double *zk GGA_OUT_PARAMS_NO_EXC(XC_COMMA double *, ))
+{
+  size_t ip = blockIdx.x*blockDim.x + threadIdx.x;
+  double dens;
+  double my_rho[2] = {0.0, 0.0};
+  double my_sigma[3] = {0.0, 0.0, 0.0};
+
+  if(ip >= np) return;
+
+  internal_counters_gga_random(&(p->dim), ip, 0, &rho, &sigma,
+                               &zk GGA_OUT_PARAMS_NO_EXC(XC_COMMA &, ));
+
+  /* Density screening */
+  dens = (p->nspin == XC_POLARIZED) ? rho[0]+rho[1] : rho[0];
+  if(dens >= p->dens_threshold) {
+    /* sanity check on input parameters */
+    my_rho[0]   = m_max(p->dens_threshold, rho[0]);
+    my_sigma[0] = m_max(p->sigma_threshold * p->sigma_threshold, sigma[0]);
+    if(p->nspin == XC_POLARIZED){
+      double s_ave;
+      
+      my_rho[1]   = m_max(p->dens_threshold, rho[1]);
+      my_sigma[2] = m_max(p->sigma_threshold * p->sigma_threshold, sigma[2]);
+      
+      my_sigma[1] = sigma[1];
+      s_ave = 0.5*(my_sigma[0] + my_sigma[2]);
+      /* | grad n |^2 = |grad n_up + grad n_down|^2 > 0 */
+      my_sigma[1] = (my_sigma[1] >= -s_ave ? my_sigma[1] : -s_ave);
+      /* Since |grad n_up - grad n_down|^2 > 0 we also have */
+      my_sigma[1] = (my_sigma[1] <= +s_ave ? my_sigma[1] : +s_ave);
+    }
+    
+    if(p->nspin == XC_UNPOLARIZED)
+      func_unpol(p, order, my_rho, my_sigma OUT_PARAMS);
+    else if(p->nspin == XC_POLARIZED)
+      func_pol  (p, order, my_rho, my_sigma OUT_PARAMS);
+  }
+}
+
+#endif
diff --git a/ref/work_gga_x_pbe.c b/ref/work_gga_x_pbe.c
new file mode 100644
index 0000000000000000000000000000000000000000..8293444a8378956d97e16e0b865c29373d4c2d35
--- /dev/null
+++ b/ref/work_gga_x_pbe.c
@@ -0,0 +1,1456 @@
+/*
+ Copyright (C) 2006-2018 M.A.L. Marques
+ Copyright (C) 2019 X. Andrade
+
+ This Source Code Form is subject to the terms of the Mozilla Public
+ License, v. 2.0. If a copy of the MPL was not distributed with this
+ file, You can obtain one at http://mozilla.org/MPL/2.0/.
+*/
+
+/**
+ * @file work_gga.c
+ * @brief This file is to be included in GGA functionals.
+ */
+
+#ifdef XC_DEBUG
+#define __USE_GNU
+#include <fenv.h>
+#endif
+
+/* hack to avoid compiler warnings */
+#define NOARG
+
+#ifdef XC_NO_EXC
+#define OUT_PARAMS GGA_OUT_PARAMS_NO_EXC(XC_COMMA, )
+#else
+#define OUT_PARAMS XC_COMMA zk GGA_OUT_PARAMS_NO_EXC(XC_COMMA, )
+#endif
+
+/**
+ * @param[in,out] func_type: pointer to functional structure
+ */
+static void
+work_gga_x_pbe(const XC(func_type) *p, size_t np,
+         const double *rho, const double *sigma, double *zk
+         double *vrho, double *vsigma, double *v2rho2, double *v2rhosigma,
+         double *v3rho3, double *v3rhosigma2, double *v3sigma3,
+         double *v4rho4, double *v4rho2sigma2, double *v4sigma4) {
+  int order = -1;
+  if(zk     != NULL) order = 0;
+  if(vrho   != NULL) order = 1;
+  if(v2rho2 != NULL) order = 2;
+  if(v3rho3 != NULL) order = 3;
+  if(v4rho4 != NULL) order = 4;
+  if(order < 0) return;
+
+  size_t ip;
+  double dens;
+  double my_rho[2] = {0.0, 0.0};
+  double my_sigma[3] = {0.0, 0.0, 0.0};
+
+  if(p->nspin == XC_POLARIZED) {
+    for(ip = 0; ip < np; ip++){
+      const xc_dimensions *dim = &(p->dim);
+      const int pos = ip;
+      double *irho = &rho[pos * dim->rho];
+      double *isigma = &sigma[pos * dim->sigma];
+      double *izk = &zk[pos * dim->rho];
+#ifndef XC_DONT_COMPILE_VXC   
+      double *ivrho = &vrho[pos * dim->vrho];
+      double *ivsigma = &vsigma[pos * dim->vsigma];
+#ifndef XC_DONT_COMPILE_FXC
+      double *iv2rho2 = &v2rho2[pos * dim->v2rho2];
+      double *iv2rhosigma = &v2rhosigma[pos * dim->v2rhosigma];
+      double *iv2sigma2 = &v2sigma2[pos * dim->v2sigma2];
+#ifndef XC_DONT_COMPILE_KXC
+      double *iv3rho3 = &v3rho3[pos * dim->v3rho3];
+      double *iv3rho2sigma = &v3rho2sigma[pos * dim->v3rho2sigma];
+      double *iv3rhosigma2 = &v3rhosigma2[pos * dim->v3rhosigma2];
+      double *iv3sigma3 = &v3sigma3[pos * dim->v3sigma3];
+#ifndef XC_DONT_COMPILE_LXC
+      double *iv4rho4 = &v4rho4[pos * dim->v4rho4];
+      double *iv4rho3sigma = &v4rho3sigma[pos * dim->v4rho3sigma];
+      double *iv4rho2sigma2 = &v4rho2sigma2[pos * dim->v4rho2sigma2];
+      double *iv4rhosigma3 = &v4rhosigma3[pos * dim->v4rhosigma3];
+      double *iv4sigma4 = &v4sigma4[pos * dim->v4sigma4];
+#endif
+#endif
+#endif
+#endif
+
+      /* Screen low density */
+      dens = irho[0] + irho[1];
+      if(dens >= p->dens_threshold) {
+        /* sanity check of input parameters */
+        my_rho[0] = m_max(p->dens_threshold, irho[0]);
+        my_sigma[0] = m_max(p->sigma_threshold * p->sigma_threshold, isigma[0]);
+        double s_ave;
+        my_rho[1] = m_max(p->dens_threshold, irho[1]);
+        my_sigma[2] = m_max(p->sigma_threshold * p->sigma_threshold, isigma[2]);
+        my_sigma[1] = isigma[1];
+        s_ave = 0.5*(my_sigma[0] + my_sigma[2]);
+        /* | grad n |^2 = |grad n_up + grad n_down|^2 > 0 */
+        my_sigma[1] = (my_sigma[1] >= -s_ave ? my_sigma[1] : -s_ave);
+        /* Since |grad n_up - grad n_down|^2 > 0 we also have */
+        my_sigma[1] = (my_sigma[1] <= +s_ave ? my_sigma[1] : +s_ave);
+
+
+        #ifndef XC_DONT_COMPILE_EXC
+          double t1, t2, t3, t5, t6, t7, t10, t11;
+          double t14, t15, t16, t18, t19, t20, t21, t22;
+          double t23, t25, t26, t27, t28, t29, t30, t31;
+          double t32, t33, t34, t35, t36, t37, t39, t43;
+          double t48, t52, t53, t54, t56, t57, t58, t59;
+          double t61, t62, t63, t64, t65, t66, t68, t72;
+          double t77, t81;
+
+        #ifndef XC_DONT_COMPILE_VXC
+          double t82, t83, t84, t86, t89, t90, t94, t95;
+          double t96, t99, t100, t101, t102, t103, t105, t106;
+          double t107, t109, t111, t115, t116, t118, t121, t122;
+          double t126, t129, t131, t135, t138, t139, t144, t146;
+          double t149, t150, t154, t155, t156, t158, t159, t160;
+          double t162, t164, t168, t171, t173, t176, t178, t181;
+
+        #ifndef XC_DONT_COMPILE_FXC
+          double t184, t185, t186, t189, t190, t191, t194, t198;
+          double t199, t203, t205, t208, t212, t213, t216, t218;
+          double t219, t223, t224, t225, t226, t228, t229, t230;
+          double t231, t234, t236, t240, t242, t246, t247, t248;
+          double t249, t252, t255, t259, t260, t264, t266, t268;
+          double t271, t273, t276, t280, t284, t285, t289, t291;
+          double t294, t300, t301, t305, t309, t310, t314, t316;
+          double t320, t324, t325, t328, t333, t338, t342, t343;
+          double t349, t350, t355, t359, t360, t366, t372, t373;
+          double t374, t375, t376, t379, t381, t385, t387, t391;
+          double t397, t398, t400, t403, t407, t411, t416, t418;
+          double t423, t427, t429, t432, t436, t440, t442, t443;
+          double t447, t450, t451, t455, t458;
+
+        #ifndef XC_DONT_COMPILE_KXC
+          double t462, t464, t467, t469, t471, t473, t478, t481;
+          double t485, t486, t491, t492, t494, t496, t498, t500;
+          double t503, t504, t507, t509, t510, t513, t516, t517;
+          double t518, t521, t525, t526, t530, t533, t534, t535;
+          double t537, t538, t539, t540, t541, t542, t544, t547;
+          double t548, t550, t551, t554, t557, t560, t564, t565;
+          double t569, t571, t573, t575, t577, t580, t582, t585;
+          double t586, t587, t590, t595, t596, t598, t602, t603;
+          double t607, t610, t612, t615, t617, t620, t622, t633;
+          double t634, t635, t638, t643, t645, t649, t650, t654;
+          double t657, t658, t660, t665, t669, t671, t673, t674;
+          double t677, t680, t685, t689, t693, t694, t698, t700;
+          double t703, t710, t711, t716, t720, t724, t725, t729;
+          double t731, t735, t739, t740, t746, t750, t752, t753;
+          double t758, t765, t769, t770, t777, t778, t785, t789;
+          double t790, t794, t796, t798, t802, t804, t816, t821;
+          double t822, t824, t825, t826, t827, t828, t830, t833;
+          double t834, t840, t847, t848, t850, t852, t854, t856;
+          double t861, t865, t869, t874, t877, t879, t883, t893;
+          double t897, t902, t906, t909, t916, t928, t930, t932;
+          double t937, t941, t945, t950, t951, t953, t955, t959;
+          double t963, t968, t970, t975, t979, t981, t983, t987;
+          double t991, t995, t998, t1001, t1004;
+
+        #ifndef XC_DONT_COMPILE_LXC
+          double t1009, t1013, t1016, t1020, t1023, t1025, t1027, t1028;
+          double t1034, t1040, t1041, t1044, t1048, t1053, t1059, t1060;
+          double t1062, t1066, t1067, t1070, t1071, t1073, t1076, t1077;
+          double t1079, t1086, t1088, t1090, t1093, t1094, t1095, t1109;
+          double t1112, t1125, t1127, t1129, t1131, t1132, t1134, t1135;
+          double t1141, t1146, t1149, t1153, t1160, t1164, t1168, t1173;
+          double t1175, t1182, t1186, t1187, t1190, t1208, t1209, t1211;
+          double t1215, t1224, t1227, t1230, t1234, t1235, t1239, t1241;
+          double t1242, t1243, t1253, t1261, t1263, t1280, t1282, t1286;
+          double t1293, t1297, t1298, t1301, t1307, t1311, t1312, t1315;
+          double t1316, t1317, t1319, t1320, t1322, t1323, t1331, t1335;
+          double t1336, t1343, t1347, t1363, t1376, t1380, t1394, t1396;
+          double t1402, t1408, t1412, t1427, t1440, t1444, t1449, t1451;
+          double t1453, t1455, t1458, t1459, t1462, t1463, t1468, t1470;
+          double t1491, t1495, t1502, t1505, t1514, t1515, t1518, t1536;
+          double t1540, t1549, t1550, t1552, t1560, t1565, t1568, t1570;
+          double t1573, t1574, t1576, t1578, t1587, t1589, t1594, t1599;
+          double t1606, t1610, t1619, t1620, t1625, t1632, t1636, t1645;
+          double t1651, t1657, t1664, t1684, t1687, t1688, t1702, t1704;
+          double t1715, t1731, t1732, t1734, t1736, t1738, t1740, t1742;
+          double t1746, t1761, t1763, t1764, t1769, t1771, t1774, t1776;
+          double t1778, t1785, t1790, t1793, t1795, t1808, t1809, t1811;
+          double t1815, t1816, t1823, t1824, t1829, t1830, t1832, t1833;
+          double t1837, t1847, t1848, t1852, t1857, t1861, t1868, t1872;
+          double t1876, t1878, t1879, t1887, t1934, t1935, t1940, t1947;
+          double t1948, t1950, t1969, t1974, t1977, t1979, t1983, t1993;
+          double t1997, t2002, t2006, t2009, t2016, t2045, t2050, t2062;
+          double t2067, t2069, t2074, t2089, t2098, t2106;
+        #endif
+
+        #endif
+
+        #endif
+
+        #endif
+
+        #endif
+
+
+          const gga_x_pbe_params *params = (gga_x_pbe_params * )(p->params);
+          t1 = my_rho[0] <= p->dens_threshold;
+          t2 = M_CBRT3;
+          t3 = M_CBRTPI;
+          t5 = t2 / t3;
+          t6 = my_rho[0] + my_rho[1];
+          t7 = 0.1e1 / t6;
+          t10 = 0.2e1 * my_rho[0] * t7 <= p->zeta_threshold;
+          t11 = p->zeta_threshold - 0.1e1;
+          t14 = 0.2e1 * my_rho[1] * t7 <= p->zeta_threshold;
+          t15 = -t11;
+          t16 = my_rho[0] - my_rho[1];
+          t18 = my_piecewise5(t10, t11, t14, t15, t16 * t7);
+          t19 = 0.1e1 + t18;
+          t20 = t19 <= p->zeta_threshold;
+          t21 = POW_1_3(p->zeta_threshold);
+          t22 = t21 * p->zeta_threshold;
+          t23 = POW_1_3(t19);
+          t25 = my_piecewise3(t20, t22, t23 * t19);
+          t26 = POW_1_3(t6);
+          t27 = t25 * t26;
+          t28 = M_CBRT6;
+          t29 = params->mu * t28;
+          t30 = M_PI * M_PI;
+          t31 = POW_1_3(t30);
+          t32 = t31 * t31;
+          t33 = 0.1e1 / t32;
+          t34 = t33 * my_sigma[0];
+          t35 = my_rho[0] * my_rho[0];
+          t36 = POW_1_3(my_rho[0]);
+          t37 = t36 * t36;
+          t39 = 0.1e1 / t37 / t35;
+          t43 = params->kappa + t29 * t34 * t39 / 0.24e2;
+          t48 = 0.1e1 + params->kappa * (0.1e1 - params->kappa / t43);
+          t52 = my_piecewise3(t1, 0, -0.3e1 / 0.8e1 * t5 * t27 * t48);
+          t53 = my_rho[1] <= p->dens_threshold;
+          t54 = -t16;
+          t56 = my_piecewise5(t14, t11, t10, t15, t54 * t7);
+          t57 = 0.1e1 + t56;
+          t58 = t57 <= p->zeta_threshold;
+          t59 = POW_1_3(t57);
+          t61 = my_piecewise3(t58, t22, t59 * t57);
+          t62 = t61 * t26;
+          t63 = t33 * my_sigma[2];
+          t64 = my_rho[1] * my_rho[1];
+          t65 = POW_1_3(my_rho[1]);
+          t66 = t65 * t65;
+          t68 = 0.1e1 / t66 / t64;
+          t72 = params->kappa + t29 * t63 * t68 / 0.24e2;
+          t77 = 0.1e1 + params->kappa * (0.1e1 - params->kappa / t72);
+          t81 = my_piecewise3(t53, 0, -0.3e1 / 0.8e1 * t5 * t62 * t77);
+          if(izk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC))
+            izk[0] = t52 + t81;
+
+        #ifndef XC_DONT_COMPILE_VXC
+
+          if(order < 1) return;
+
+
+          t82 = t6 * t6;
+          t83 = 0.1e1 / t82;
+          t84 = t16 * t83;
+          t86 = my_piecewise5(t10, 0, t14, 0, t7 - t84);
+          t89 = my_piecewise3(t20, 0, 0.4e1 / 0.3e1 * t23 * t86);
+          t90 = t89 * t26;
+          t94 = t26 * t26;
+          t95 = 0.1e1 / t94;
+          t96 = t25 * t95;
+          t99 = t5 * t96 * t48 / 0.8e1;
+          t100 = params->kappa * params->kappa;
+          t101 = t27 * t100;
+          t102 = t5 * t101;
+          t103 = t43 * t43;
+          t105 = 0.1e1 / t103 * params->mu;
+          t106 = t105 * t28;
+          t107 = t35 * my_rho[0];
+          t109 = 0.1e1 / t37 / t107;
+          t111 = t106 * t34 * t109;
+          t115 = my_piecewise3(t1, 0, -0.3e1 / 0.8e1 * t5 * t90 * t48 - t99 + t102 * t111 / 0.24e2);
+          t116 = t54 * t83;
+          t118 = my_piecewise5(t14, 0, t10, 0, -t7 - t116);
+          t121 = my_piecewise3(t58, 0, 0.4e1 / 0.3e1 * t59 * t118);
+          t122 = t121 * t26;
+          t126 = t61 * t95;
+          t129 = t5 * t126 * t77 / 0.8e1;
+          t131 = my_piecewise3(t53, 0, -0.3e1 / 0.8e1 * t5 * t122 * t77 - t129);
+          if(ivrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC))
+            ivrho[0] = t52 + t81 + t6 * (t115 + t131);
+
+          t135 = my_piecewise5(t10, 0, t14, 0, -t7 - t84);
+          t138 = my_piecewise3(t20, 0, 0.4e1 / 0.3e1 * t23 * t135);
+          t139 = t138 * t26;
+          t144 = my_piecewise3(t1, 0, -0.3e1 / 0.8e1 * t5 * t139 * t48 - t99);
+          t146 = my_piecewise5(t14, 0, t10, 0, t7 - t116);
+          t149 = my_piecewise3(t58, 0, 0.4e1 / 0.3e1 * t59 * t146);
+          t150 = t149 * t26;
+          t154 = t62 * t100;
+          t155 = t5 * t154;
+          t156 = t72 * t72;
+          t158 = 0.1e1 / t156 * params->mu;
+          t159 = t158 * t28;
+          t160 = t64 * my_rho[1];
+          t162 = 0.1e1 / t66 / t160;
+          t164 = t159 * t63 * t162;
+          t168 = my_piecewise3(t53, 0, -0.3e1 / 0.8e1 * t5 * t150 * t77 - t129 + t155 * t164 / 0.24e2);
+          if(ivrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC))
+            ivrho[1] = t52 + t81 + t6 * (t144 + t168);
+
+          t171 = t28 * t33;
+          t173 = t105 * t171 * t39;
+          t176 = my_piecewise3(t1, 0, -t102 * t173 / 0.64e2);
+          // FIXME: ivsigma != NULL ??????
+          if(ivrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC))
+            ivsigma[0] = t6 * t176;
+
+          if(ivrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC))
+            ivsigma[1] = 0.0e0;
+
+          t178 = t158 * t171 * t68;
+          t181 = my_piecewise3(t53, 0, -t155 * t178 / 0.64e2);
+          if(ivrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC))
+            ivsigma[2] = t6 * t181;
+
+        #ifndef XC_DONT_COMPILE_FXC
+
+          if(order < 2) return;
+
+
+          t184 = t23 * t23;
+          t185 = 0.1e1 / t184;
+          t186 = t86 * t86;
+          t189 = t82 * t6;
+          t190 = 0.1e1 / t189;
+          t191 = t16 * t190;
+          t194 = my_piecewise5(t10, 0, t14, 0, -0.2e1 * t83 + 0.2e1 * t191);
+          t198 = my_piecewise3(t20, 0, 0.4e1 / 0.9e1 * t185 * t186 + 0.4e1 / 0.3e1 * t23 * t194);
+          t199 = t198 * t26;
+          t203 = t89 * t95;
+          t205 = t5 * t203 * t48;
+          t208 = t5 * t90 * t100;
+          t212 = 0.1e1 / t94 / t6;
+          t213 = t25 * t212;
+          t216 = t5 * t213 * t48 / 0.12e2;
+          t218 = t5 * t96 * t100;
+          t219 = t218 * t111;
+          t223 = params->mu * params->mu;
+          t224 = 0.1e1 / t103 / t43 * t223;
+          t225 = t28 * t28;
+          t226 = t224 * t225;
+          t228 = 0.1e1 / t31 / t30;
+          t229 = my_sigma[0] * my_sigma[0];
+          t230 = t228 * t229;
+          t231 = t35 * t35;
+          t234 = 0.1e1 / t36 / t231 / t107;
+          t236 = t226 * t230 * t234;
+          t240 = 0.1e1 / t37 / t231;
+          t242 = t106 * t34 * t240;
+          t246 = my_piecewise3(t1, 0, -0.3e1 / 0.8e1 * t5 * t199 * t48 - t205 / 0.4e1 + t208 * t111 / 0.12e2 + t216 + t219 / 0.36e2 + t102 * t236 / 0.108e3 - 0.11e2 / 0.72e2 * t102 * t242);
+          t247 = t59 * t59;
+          t248 = 0.1e1 / t247;
+          t249 = t118 * t118;
+          t252 = t54 * t190;
+          t255 = my_piecewise5(t14, 0, t10, 0, 0.2e1 * t83 + 0.2e1 * t252);
+          t259 = my_piecewise3(t58, 0, 0.4e1 / 0.9e1 * t248 * t249 + 0.4e1 / 0.3e1 * t59 * t255);
+          t260 = t259 * t26;
+          t264 = t121 * t95;
+          t266 = t5 * t264 * t77;
+          t268 = t61 * t212;
+          t271 = t5 * t268 * t77 / 0.12e2;
+          t273 = my_piecewise3(t53, 0, -0.3e1 / 0.8e1 * t5 * t260 * t77 - t266 / 0.4e1 + t271);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2rho2[0] = 0.2e1 * t115 + 0.2e1 * t131 + t6 * (t246 + t273);
+
+          t276 = t185 * t135;
+          t280 = my_piecewise5(t10, 0, t14, 0, 0.2e1 * t191);
+          t284 = my_piecewise3(t20, 0, 0.4e1 / 0.9e1 * t276 * t86 + 0.4e1 / 0.3e1 * t23 * t280);
+          t285 = t284 * t26;
+          t289 = t138 * t95;
+          t291 = t5 * t289 * t48;
+          t294 = t5 * t139 * t100;
+          t300 = my_piecewise3(t1, 0, -0.3e1 / 0.8e1 * t5 * t285 * t48 - t291 / 0.8e1 + t294 * t111 / 0.24e2 - t205 / 0.8e1 + t216 + t219 / 0.72e2);
+          t301 = t248 * t146;
+          t305 = my_piecewise5(t14, 0, t10, 0, 0.2e1 * t252);
+          t309 = my_piecewise3(t58, 0, 0.4e1 / 0.9e1 * t301 * t118 + 0.4e1 / 0.3e1 * t59 * t305);
+          t310 = t309 * t26;
+          t314 = t149 * t95;
+          t316 = t5 * t314 * t77;
+          t320 = t5 * t122 * t100;
+          t324 = t5 * t126 * t100;
+          t325 = t324 * t164;
+          t328 = my_piecewise3(t53, 0, -0.3e1 / 0.8e1 * t5 * t310 * t77 - t316 / 0.8e1 - t266 / 0.8e1 + t271 + t320 * t164 / 0.24e2 + t325 / 0.72e2);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2rho2[1] = t115 + t131 + t144 + t168 + t6 * (t300 + t328);
+
+          t333 = t135 * t135;
+          t338 = my_piecewise5(t10, 0, t14, 0, 0.2e1 * t83 + 0.2e1 * t191);
+          t342 = my_piecewise3(t20, 0, 0.4e1 / 0.9e1 * t185 * t333 + 0.4e1 / 0.3e1 * t23 * t338);
+          t343 = t342 * t26;
+          t349 = my_piecewise3(t1, 0, -0.3e1 / 0.8e1 * t5 * t343 * t48 - t291 / 0.4e1 + t216);
+          t350 = t146 * t146;
+          t355 = my_piecewise5(t14, 0, t10, 0, -0.2e1 * t83 + 0.2e1 * t252);
+          t359 = my_piecewise3(t58, 0, 0.4e1 / 0.9e1 * t248 * t350 + 0.4e1 / 0.3e1 * t59 * t355);
+          t360 = t359 * t26;
+          t366 = t5 * t150 * t100;
+          t372 = 0.1e1 / t156 / t72 * t223;
+          t373 = t372 * t225;
+          t374 = my_sigma[2] * my_sigma[2];
+          t375 = t228 * t374;
+          t376 = t64 * t64;
+          t379 = 0.1e1 / t65 / t376 / t160;
+          t381 = t373 * t375 * t379;
+          t385 = 0.1e1 / t66 / t376;
+          t387 = t159 * t63 * t385;
+          t391 = my_piecewise3(t53, 0, -0.3e1 / 0.8e1 * t5 * t360 * t77 - t316 / 0.4e1 + t366 * t164 / 0.12e2 + t271 + t325 / 0.36e2 + t155 * t381 / 0.108e3 - 0.11e2 / 0.72e2 * t155 * t387);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2rho2[2] = 0.2e1 * t144 + 0.2e1 * t168 + t6 * (t349 + t391);
+
+          t397 = t218 * t173 / 0.192e3;
+          t398 = t231 * t35;
+          t400 = 0.1e1 / t36 / t398;
+          t403 = t226 * t228 * t400 * my_sigma[0];
+          t407 = t105 * t171 * t109;
+          t411 = my_piecewise3(t1, 0, -t208 * t173 / 0.64e2 - t397 - t102 * t403 / 0.288e3 + t102 * t407 / 0.24e2);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2rhosigma[0] = t6 * t411 + t176;
+
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2rhosigma[1] = 0.0e0;
+
+          t416 = t324 * t178 / 0.192e3;
+          t418 = my_piecewise3(t53, 0, -t320 * t178 / 0.64e2 - t416);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2rhosigma[2] = t6 * t418 + t181;
+
+          t423 = my_piecewise3(t1, 0, -t294 * t173 / 0.64e2 - t397);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2rhosigma[3] = t6 * t423 + t176;
+
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2rhosigma[4] = 0.0e0;
+
+          t427 = t376 * t64;
+          t429 = 0.1e1 / t65 / t427;
+          t432 = t373 * t228 * t429 * my_sigma[2];
+          t436 = t158 * t171 * t162;
+          t440 = my_piecewise3(t53, 0, -t366 * t178 / 0.64e2 - t416 - t155 * t432 / 0.288e3 + t155 * t436 / 0.24e2);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2rhosigma[5] = t6 * t440 + t181;
+
+          t442 = t225 * t228;
+          t443 = t231 * my_rho[0];
+          t447 = t224 * t442 / t36 / t443;
+          t450 = my_piecewise3(t1, 0, t102 * t447 / 0.768e3);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2sigma2[0] = t6 * t450;
+
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2sigma2[1] = 0.0e0;
+
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2sigma2[2] = 0.0e0;
+
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2sigma2[3] = 0.0e0;
+
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2sigma2[4] = 0.0e0;
+
+          t451 = t376 * my_rho[1];
+          t455 = t372 * t442 / t65 / t451;
+          t458 = my_piecewise3(t53, 0, t155 * t455 / 0.768e3);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2sigma2[5] = t6 * t458;
+
+        #ifndef XC_DONT_COMPILE_KXC
+
+          if(order < 3) return;
+
+
+          t462 = 0.1e1 / t37 / t443;
+          t464 = t106 * t34 * t462;
+          t467 = t218 * t242;
+          t469 = t231 * t231;
+          t471 = 0.1e1 / t36 / t469;
+          t473 = t226 * t230 * t471;
+          t478 = t218 * t236;
+          t481 = t5 * t199 * t100;
+          t485 = t5 * t203 * t100;
+          t486 = t485 * t111;
+          t491 = t5 * t213 * t100;
+          t492 = t491 * t111;
+          t494 = t198 * t95;
+          t496 = t5 * t494 * t48;
+          t498 = t89 * t212;
+          t500 = t5 * t498 * t48;
+          t503 = 0.1e1 / t94 / t82;
+          t504 = t25 * t503;
+          t507 = 0.5e1 / 0.36e2 * t5 * t504 * t48;
+          t509 = 0.1e1 / t184 / t19;
+          t510 = t186 * t86;
+          t513 = t185 * t86;
+          t516 = t82 * t82;
+          t517 = 0.1e1 / t516;
+          t518 = t16 * t517;
+          t521 = my_piecewise5(t10, 0, t14, 0, 0.6e1 * t190 - 0.6e1 * t518);
+          t525 = my_piecewise3(t20, 0, -0.8e1 / 0.27e2 * t509 * t510 + 0.4e1 / 0.3e1 * t513 * t194 + 0.4e1 / 0.3e1 * t23 * t521);
+          t526 = t525 * t26;
+          t530 = t30 * t30;
+          t533 = t2 / t3 / t530;
+          t534 = t533 * t27;
+          t535 = t103 * t103;
+          t537 = t100 / t535;
+          t538 = t223 * params->mu;
+          t539 = t229 * my_sigma[0];
+          t540 = t538 * t539;
+          t541 = t469 * t107;
+          t542 = 0.1e1 / t541;
+          t544 = t537 * t540 * t542;
+          t547 = 0.77e2 / 0.108e3 * t102 * t464 - 0.11e2 / 0.72e2 * t467 - 0.11e2 / 0.108e3 * t102 * t473 - 0.11e2 / 0.24e2 * t208 * t242 + t478 / 0.108e3 + t481 * t111 / 0.8e1 + t486 / 0.12e2 + t208 * t236 / 0.36e2 - t492 / 0.36e2 - 0.3e1 / 0.8e1 * t496 + t500 / 0.4e1 - t507 - 0.3e1 / 0.8e1 * t5 * t526 * t48 + t534 * t544 / 0.54e2;
+          t548 = my_piecewise3(t1, 0, t547);
+          t550 = 0.1e1 / t247 / t57;
+          t551 = t249 * t118;
+          t554 = t248 * t118;
+          t557 = t54 * t517;
+          t560 = my_piecewise5(t14, 0, t10, 0, -0.6e1 * t190 - 0.6e1 * t557);
+          t564 = my_piecewise3(t58, 0, -0.8e1 / 0.27e2 * t550 * t551 + 0.4e1 / 0.3e1 * t554 * t255 + 0.4e1 / 0.3e1 * t59 * t560);
+          t565 = t564 * t26;
+          t569 = t259 * t95;
+          t571 = t5 * t569 * t77;
+          t573 = t121 * t212;
+          t575 = t5 * t573 * t77;
+          t577 = t61 * t503;
+          t580 = 0.5e1 / 0.36e2 * t5 * t577 * t77;
+          t582 = my_piecewise3(t53, 0, -0.3e1 / 0.8e1 * t5 * t565 * t77 - 0.3e1 / 0.8e1 * t571 + t575 / 0.4e1 - t580);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho3[0] = 0.3e1 * t246 + 0.3e1 * t273 + t6 * (t548 + t582);
+
+          t585 = 0.2e1 * t300;
+          t586 = 0.2e1 * t328;
+          t587 = t509 * t135;
+          t590 = t185 * t280;
+          t595 = 0.2e1 * t190;
+          t596 = 0.6e1 * t518;
+          t598 = my_piecewise5(t10, 0, t14, 0, t595 - t596);
+          t602 = my_piecewise3(t20, 0, -0.8e1 / 0.27e2 * t587 * t186 + 0.8e1 / 0.9e1 * t590 * t86 + 0.4e1 / 0.9e1 * t276 * t194 + 0.4e1 / 0.3e1 * t23 * t598);
+          t603 = t602 * t26;
+          t607 = t284 * t95;
+          t610 = t5 * t607 * t48 / 0.4e1;
+          t612 = t5 * t285 * t100;
+          t615 = t138 * t212;
+          t617 = t5 * t615 * t48;
+          t620 = t5 * t289 * t100;
+          t622 = t620 * t111 / 0.36e2;
+          t633 = -0.3e1 / 0.8e1 * t5 * t603 * t48 - t610 + t612 * t111 / 0.12e2 + t617 / 0.12e2 + t622 + t294 * t236 / 0.108e3 - 0.11e2 / 0.72e2 * t294 * t242 - t496 / 0.8e1 + t500 / 0.6e1 + t486 / 0.36e2 - t507 - t492 / 0.54e2 + t478 / 0.324e3 - 0.11e2 / 0.216e3 * t467;
+          t634 = my_piecewise3(t1, 0, t633);
+          t635 = t550 * t146;
+          t638 = t248 * t305;
+          t643 = 0.6e1 * t557;
+          t645 = my_piecewise5(t14, 0, t10, 0, -t595 - t643);
+          t649 = my_piecewise3(t58, 0, -0.8e1 / 0.27e2 * t635 * t249 + 0.8e1 / 0.9e1 * t638 * t118 + 0.4e1 / 0.9e1 * t301 * t255 + 0.4e1 / 0.3e1 * t59 * t645);
+          t650 = t649 * t26;
+          t654 = t309 * t95;
+          t657 = t5 * t654 * t77 / 0.4e1;
+          t658 = t149 * t212;
+          t660 = t5 * t658 * t77;
+          t665 = t5 * t260 * t100;
+          t669 = t5 * t264 * t100;
+          t671 = t669 * t164 / 0.36e2;
+          t673 = t5 * t268 * t100;
+          t674 = t673 * t164;
+          t677 = my_piecewise3(t53, 0, -0.3e1 / 0.8e1 * t5 * t650 * t77 - t657 + t660 / 0.12e2 - t571 / 0.8e1 + t575 / 0.6e1 - t580 + t665 * t164 / 0.24e2 + t671 - t674 / 0.108e3);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho3[1] = t246 + t273 + t585 + t586 + t6 * (t634 + t677);
+
+          t680 = t509 * t333;
+          t685 = t185 * t338;
+          t689 = my_piecewise5(t10, 0, t14, 0, -t595 - t596);
+          t693 = my_piecewise3(t20, 0, -0.8e1 / 0.27e2 * t680 * t86 + 0.8e1 / 0.9e1 * t276 * t280 + 0.4e1 / 0.9e1 * t685 * t86 + 0.4e1 / 0.3e1 * t23 * t689);
+          t694 = t693 * t26;
+          t698 = t342 * t95;
+          t700 = t5 * t698 * t48;
+          t703 = t5 * t343 * t100;
+          t710 = my_piecewise3(t1, 0, -0.3e1 / 0.8e1 * t5 * t694 * t48 - t700 / 0.8e1 + t703 * t111 / 0.24e2 - t610 + t617 / 0.6e1 + t622 + t500 / 0.12e2 - t507 - t492 / 0.108e3);
+          t711 = t550 * t350;
+          t716 = t248 * t355;
+          t720 = my_piecewise5(t14, 0, t10, 0, t595 - t643);
+          t724 = my_piecewise3(t58, 0, -0.8e1 / 0.27e2 * t711 * t118 + 0.8e1 / 0.9e1 * t301 * t305 + 0.4e1 / 0.9e1 * t716 * t118 + 0.4e1 / 0.3e1 * t59 * t720);
+          t725 = t724 * t26;
+          t729 = t359 * t95;
+          t731 = t5 * t729 * t77;
+          t735 = t5 * t310 * t100;
+          t739 = t5 * t314 * t100;
+          t740 = t739 * t164;
+          t746 = t324 * t381;
+          t750 = t324 * t387;
+          t752 = -0.3e1 / 0.8e1 * t5 * t725 * t77 - t731 / 0.8e1 - t657 + t660 / 0.6e1 + t735 * t164 / 0.12e2 + t740 / 0.36e2 + t575 / 0.12e2 - t580 + t671 - t674 / 0.54e2 + t320 * t381 / 0.108e3 + t746 / 0.324e3 - 0.11e2 / 0.72e2 * t320 * t387 - 0.11e2 / 0.216e3 * t750;
+          t753 = my_piecewise3(t53, 0, t752);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho3[2] = t585 + t586 + t349 + t391 + t6 * (t710 + t753);
+
+          t758 = t333 * t135;
+          t765 = my_piecewise5(t10, 0, t14, 0, -0.6e1 * t190 - 0.6e1 * t518);
+          t769 = my_piecewise3(t20, 0, -0.8e1 / 0.27e2 * t509 * t758 + 0.4e1 / 0.3e1 * t276 * t338 + 0.4e1 / 0.3e1 * t23 * t765);
+          t770 = t769 * t26;
+          t777 = my_piecewise3(t1, 0, -0.3e1 / 0.8e1 * t5 * t770 * t48 - 0.3e1 / 0.8e1 * t700 + t617 / 0.4e1 - t507);
+          t778 = t350 * t146;
+          t785 = my_piecewise5(t14, 0, t10, 0, 0.6e1 * t190 - 0.6e1 * t557);
+          t789 = my_piecewise3(t58, 0, -0.8e1 / 0.27e2 * t550 * t778 + 0.4e1 / 0.3e1 * t301 * t355 + 0.4e1 / 0.3e1 * t59 * t785);
+          t790 = t789 * t26;
+          t794 = t376 * t376;
+          t796 = 0.1e1 / t65 / t794;
+          t798 = t373 * t375 * t796;
+          t802 = 0.1e1 / t66 / t451;
+          t804 = t159 * t63 * t802;
+          t816 = t5 * t360 * t100;
+          t821 = t533 * t62;
+          t822 = t156 * t156;
+          t824 = t100 / t822;
+          t825 = t374 * my_sigma[2];
+          t826 = t538 * t825;
+          t827 = t794 * t160;
+          t828 = 0.1e1 / t827;
+          t830 = t824 * t826 * t828;
+          t833 = -0.3e1 / 0.8e1 * t5 * t790 * t77 - 0.11e2 / 0.108e3 * t155 * t798 + 0.77e2 / 0.108e3 * t155 * t804 - 0.11e2 / 0.24e2 * t366 * t387 + t746 / 0.108e3 - 0.11e2 / 0.72e2 * t750 - t674 / 0.36e2 + t740 / 0.12e2 + t366 * t381 / 0.36e2 + t816 * t164 / 0.8e1 + t660 / 0.4e1 - 0.3e1 / 0.8e1 * t731 - t580 + t821 * t830 / 0.54e2;
+          t834 = my_piecewise3(t53, 0, t833);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho3[3] = 0.3e1 * t349 + 0.3e1 * t391 + t6 * (t777 + t834);
+
+          t840 = t485 * t173;
+          t847 = t491 * t173 / 0.288e3;
+          t848 = t218 * t403;
+          t850 = t218 * t407;
+          t852 = t469 * t35;
+          t854 = t538 / t852;
+          t856 = t537 * t854 * t229;
+          t861 = t226 * t228 * t234 * my_sigma[0];
+          t865 = t105 * t171 * t240;
+          t869 = my_piecewise3(t1, 0, -t481 * t173 / 0.64e2 - t840 / 0.96e2 - t208 * t403 / 0.144e3 + t208 * t407 / 0.12e2 + t847 - t848 / 0.432e3 + t850 / 0.36e2 - t534 * t856 / 0.144e3 + t102 * t861 / 0.32e2 - 0.11e2 / 0.72e2 * t102 * t865);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho2sigma[0] = t6 * t869 + 0.2e1 * t411;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho2sigma[1] = 0.0e0;
+
+          t874 = t669 * t178;
+          t877 = t673 * t178 / 0.288e3;
+          t879 = my_piecewise3(t53, 0, -t665 * t178 / 0.64e2 - t874 / 0.96e2 + t877);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho2sigma[2] = t6 * t879 + 0.2e1 * t418;
+
+          t883 = t620 * t173;
+          t893 = my_piecewise3(t1, 0, -t612 * t173 / 0.64e2 - t883 / 0.192e3 - t294 * t403 / 0.288e3 + t294 * t407 / 0.24e2 - t840 / 0.192e3 + t847 - t848 / 0.864e3 + t850 / 0.72e2);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho2sigma[3] = t6 * t893 + t411 + t423;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho2sigma[4] = 0.0e0;
+
+          t897 = t739 * t178;
+          t902 = t324 * t432;
+          t906 = t324 * t436;
+          t909 = my_piecewise3(t53, 0, -t735 * t178 / 0.64e2 - t897 / 0.192e3 - t874 / 0.192e3 + t877 - t320 * t432 / 0.288e3 - t902 / 0.864e3 + t320 * t436 / 0.24e2 + t906 / 0.72e2);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho2sigma[5] = t6 * t909 + t418 + t440;
+
+          t916 = my_piecewise3(t1, 0, -t703 * t173 / 0.64e2 - t883 / 0.96e2 + t847);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho2sigma[6] = t6 * t916 + 0.2e1 * t423;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho2sigma[7] = 0.0e0;
+
+          t928 = t794 * t64;
+          t930 = t538 / t928;
+          t932 = t824 * t930 * t374;
+          t937 = t373 * t228 * t379 * my_sigma[2];
+          t941 = t158 * t171 * t385;
+          t945 = my_piecewise3(t53, 0, -t816 * t178 / 0.64e2 - t897 / 0.96e2 - t366 * t432 / 0.144e3 + t366 * t436 / 0.12e2 + t877 - t902 / 0.432e3 + t906 / 0.36e2 - t821 * t932 / 0.144e3 + t155 * t937 / 0.32e2 - 0.11e2 / 0.72e2 * t155 * t941);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho2sigma[8] = t6 * t945 + 0.2e1 * t440;
+
+          t950 = t218 * t447 / 0.2304e4;
+          t951 = t469 * my_rho[0];
+          t953 = t538 / t951;
+          t955 = t537 * t953 * my_sigma[0];
+          t959 = t224 * t442 * t400;
+          t963 = my_piecewise3(t1, 0, t208 * t447 / 0.768e3 + t950 + t534 * t955 / 0.384e3 - t102 * t959 / 0.144e3);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[0] = t6 * t963 + t450;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[1] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[2] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[3] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[4] = 0.0e0;
+
+          t968 = t324 * t455 / 0.2304e4;
+          t970 = my_piecewise3(t53, 0, t320 * t455 / 0.768e3 + t968);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[5] = t6 * t970 + t458;
+
+          t975 = my_piecewise3(t1, 0, t294 * t447 / 0.768e3 + t950);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[6] = t6 * t975 + t450;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[7] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[8] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[9] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[10] = 0.0e0;
+
+          t979 = t794 * my_rho[1];
+          t981 = t538 / t979;
+          t983 = t824 * t981 * my_sigma[2];
+          t987 = t372 * t442 * t429;
+          t991 = my_piecewise3(t53, 0, t366 * t455 / 0.768e3 + t968 + t821 * t983 / 0.384e3 - t155 * t987 / 0.144e3);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[11] = t6 * t991 + t458;
+
+          t995 = t537 * t538 / t469;
+          t998 = my_piecewise3(t1, 0, -t534 * t995 / 0.1024e4);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3sigma3[0] = t6 * t998;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3sigma3[1] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3sigma3[2] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3sigma3[3] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3sigma3[4] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3sigma3[5] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3sigma3[6] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3sigma3[7] = 0.0e0;
+
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3sigma3[8] = 0.0e0;
+
+          t1001 = t824 * t538 / t794;
+          t1004 = my_piecewise3(t53, 0, -t821 * t1001 / 0.1024e4);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3sigma3[9] = t6 * t1004;
+
+        #ifndef XC_DONT_COMPILE_LXC
+
+          if(order < 4) return;
+
+
+          t1009 = t5 * t198 * t212 * t48;
+          t1013 = t5 * t89 * t503 * t48;
+          t1016 = 0.1e1 / t94 / t189;
+          t1020 = 0.10e2 / 0.27e2 * t5 * t25 * t1016 * t48;
+          t1023 = t5 * t525 * t95 * t48;
+          t1025 = t19 * t19;
+          t1027 = 0.1e1 / t184 / t1025;
+          t1028 = t186 * t186;
+          t1034 = t194 * t194;
+          t1040 = 0.1e1 / t516 / t6;
+          t1041 = t16 * t1040;
+          t1044 = my_piecewise5(t10, 0, t14, 0, -0.24e2 * t517 + 0.24e2 * t1041);
+          t1048 = my_piecewise3(t20, 0, 0.40e2 / 0.81e2 * t1027 * t1028 - 0.16e2 / 0.9e1 * t509 * t186 * t194 + 0.4e1 / 0.3e1 * t185 * t1034 + 0.16e2 / 0.9e1 * t513 * t521 + 0.4e1 / 0.3e1 * t23 * t1044);
+          t1053 = t469 * t231;
+          t1059 = t533 * t96;
+          t1060 = t1059 * t544;
+          t1062 = t533 * t90;
+          t1066 = t5 * t504 * t100;
+          t1067 = t1066 * t111;
+          t1070 = t5 * t498 * t100;
+          t1071 = t1070 * t111;
+          t1073 = t491 * t236;
+          t1076 = t5 * t494 * t100;
+          t1077 = t1076 * t111;
+          t1079 = t1009 / 0.2e1 - 0.5e1 / 0.9e1 * t1013 + t1020 - t1023 / 0.2e1 - 0.3e1 / 0.8e1 * t5 * t1048 * t26 * t48 - 0.11e2 / 0.27e2 * t534 * t537 * t540 / t1053 + 0.2e1 / 0.81e2 * t1060 + 0.2e1 / 0.27e2 * t1062 * t544 + 0.5e1 / 0.81e2 * t1067 - t1071 / 0.9e1 - t1073 / 0.81e2 + t1077 / 0.6e1;
+          t1086 = t491 * t242;
+          t1088 = t218 * t464;
+          t1090 = t533 * t101;
+          t1093 = t223 * t223;
+          t1094 = 0.1e1 / t535 / t43 * t1093;
+          t1095 = t229 * t229;
+          t1109 = t485 * t236;
+          t1112 = t5 * t526 * t100;
+          t1125 = t485 * t242;
+          t1127 = t218 * t473;
+          t1129 = -0.1309e4 / 0.324e3 * t102 * t106 * t34 / t37 / t398 + 0.11e2 / 0.54e2 * t1086 + 0.77e2 / 0.81e2 * t1088 + 0.2e1 / 0.243e3 * t1090 * t1094 * t1095 / t37 / t469 / t398 * t28 * t33 - 0.11e2 / 0.27e2 * t208 * t473 - 0.11e2 / 0.12e2 * t481 * t242 + t1109 / 0.27e2 + t1112 * t111 / 0.6e1 + t481 * t236 / 0.18e2 + 0.77e2 / 0.27e2 * t208 * t464 + 0.979e3 / 0.972e3 * t102 * t226 * t230 / t36 / t951 - 0.11e2 / 0.18e2 * t1125 - 0.11e2 / 0.81e2 * t1127;
+          t1131 = my_piecewise3(t1, 0, t1079 + t1129);
+          t1132 = t57 * t57;
+          t1134 = 0.1e1 / t247 / t1132;
+          t1135 = t249 * t249;
+          t1141 = t255 * t255;
+          t1146 = t54 * t1040;
+          t1149 = my_piecewise5(t14, 0, t10, 0, 0.24e2 * t517 + 0.24e2 * t1146);
+          t1153 = my_piecewise3(t58, 0, 0.40e2 / 0.81e2 * t1134 * t1135 - 0.16e2 / 0.9e1 * t550 * t249 * t255 + 0.4e1 / 0.3e1 * t248 * t1141 + 0.16e2 / 0.9e1 * t554 * t560 + 0.4e1 / 0.3e1 * t59 * t1149);
+          t1160 = t5 * t564 * t95 * t77;
+          t1164 = t5 * t259 * t212 * t77;
+          t1168 = t5 * t121 * t503 * t77;
+          t1173 = 0.10e2 / 0.27e2 * t5 * t61 * t1016 * t77;
+          t1175 = my_piecewise3(t53, 0, -0.3e1 / 0.8e1 * t5 * t1153 * t26 * t77 - t1160 / 0.2e1 + t1164 / 0.2e1 - 0.5e1 / 0.9e1 * t1168 + t1173);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho4[0] = 0.4e1 * t548 + 0.4e1 * t582 + t6 * (t1131 + t1175);
+
+          t1182 = t5 * t602 * t95 * t48;
+          t1186 = t5 * t284 * t212 * t48;
+          t1187 = t1186 / 0.4e1;
+          t1190 = t5 * t138 * t503 * t48;
+          t1208 = 0.12e2 * t517;
+          t1209 = 0.24e2 * t1041;
+          t1211 = my_piecewise5(t10, 0, t14, 0, -t1208 + t1209);
+          t1215 = my_piecewise3(t20, 0, 0.40e2 / 0.81e2 * t1027 * t135 * t510 - 0.8e1 / 0.9e1 * t509 * t280 * t186 - 0.8e1 / 0.9e1 * t587 * t86 * t194 + 0.4e1 / 0.3e1 * t185 * t598 * t86 + 0.4e1 / 0.3e1 * t590 * t194 + 0.4e1 / 0.9e1 * t276 * t521 + 0.4e1 / 0.3e1 * t23 * t1211);
+          t1224 = t533 * t139;
+          t1227 = t620 * t242;
+          t1230 = t5 * t603 * t100;
+          t1234 = t5 * t607 * t100;
+          t1235 = t1234 * t111;
+          t1239 = -0.3e1 / 0.8e1 * t1182 + t1187 - 0.5e1 / 0.36e2 * t1190 - 0.3e1 / 0.8e1 * t5 * t1215 * t26 * t48 + t1009 / 0.4e1 - 0.5e1 / 0.12e2 * t1013 + t1020 - t1023 / 0.8e1 + t1060 / 0.162e3 + t1224 * t544 / 0.54e2 - 0.11e2 / 0.72e2 * t1227 + t1230 * t111 / 0.8e1 + t1235 / 0.12e2 + t612 * t236 / 0.36e2;
+          t1241 = t5 * t615 * t100;
+          t1242 = t1241 * t111;
+          t1243 = t1242 / 0.36e2;
+          t1253 = t620 * t236;
+          t1261 = -t1243 + 0.5e1 / 0.108e3 * t1067 - t1071 / 0.18e2 - t1073 / 0.162e3 + t1077 / 0.24e2 + 0.11e2 / 0.108e3 * t1086 + 0.77e2 / 0.324e3 * t1088 + t1109 / 0.108e3 - 0.11e2 / 0.72e2 * t1125 - 0.11e2 / 0.324e3 * t1127 + t1253 / 0.108e3 - 0.11e2 / 0.108e3 * t294 * t473 + 0.77e2 / 0.108e3 * t294 * t464 - 0.11e2 / 0.24e2 * t612 * t242;
+          t1263 = my_piecewise3(t1, 0, t1239 + t1261);
+          t1280 = 0.24e2 * t1146;
+          t1282 = my_piecewise5(t14, 0, t10, 0, t1208 + t1280);
+          t1286 = my_piecewise3(t58, 0, 0.40e2 / 0.81e2 * t1134 * t146 * t551 - 0.8e1 / 0.9e1 * t550 * t305 * t249 - 0.8e1 / 0.9e1 * t635 * t118 * t255 + 0.4e1 / 0.3e1 * t248 * t645 * t118 + 0.4e1 / 0.3e1 * t638 * t255 + 0.4e1 / 0.9e1 * t301 * t560 + 0.4e1 / 0.3e1 * t59 * t1282);
+          t1293 = t5 * t649 * t95 * t77;
+          t1297 = t5 * t309 * t212 * t77;
+          t1298 = t1297 / 0.4e1;
+          t1301 = t5 * t149 * t503 * t77;
+          t1307 = t5 * t565 * t100;
+          t1311 = t5 * t569 * t100;
+          t1312 = t1311 * t164;
+          t1315 = t5 * t573 * t100;
+          t1316 = t1315 * t164;
+          t1317 = t1316 / 0.36e2;
+          t1319 = t5 * t577 * t100;
+          t1320 = t1319 * t164;
+          t1322 = -0.3e1 / 0.8e1 * t5 * t1286 * t26 * t77 - 0.3e1 / 0.8e1 * t1293 + t1298 - 0.5e1 / 0.36e2 * t1301 - t1160 / 0.8e1 + t1164 / 0.4e1 - 0.5e1 / 0.12e2 * t1168 + t1173 + t1307 * t164 / 0.24e2 + t1312 / 0.24e2 - t1317 + 0.5e1 / 0.324e3 * t1320;
+          t1323 = my_piecewise3(t53, 0, t1322);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho4[1] = t548 + t582 + 0.3e1 * t634 + 0.3e1 * t677 + t6 * (t1263 + t1323);
+
+          t1331 = t5 * t694 * t100;
+          t1335 = t5 * t698 * t100;
+          t1336 = t1335 * t111;
+          t1343 = t5 * t693 * t95 * t48;
+          t1347 = t5 * t342 * t212 * t48;
+          t1363 = t280 * t280;
+          t1376 = my_piecewise5(t10, 0, t14, 0, t1209);
+          t1380 = my_piecewise3(t20, 0, 0.40e2 / 0.81e2 * t1027 * t333 * t186 - 0.32e2 / 0.27e2 * t587 * t86 * t280 - 0.8e1 / 0.27e2 * t680 * t194 + 0.8e1 / 0.9e1 * t185 * t1363 + 0.8e1 / 0.9e1 * t276 * t598 - 0.8e1 / 0.27e2 * t509 * t338 * t186 + 0.8e1 / 0.9e1 * t185 * t689 * t86 + 0.4e1 / 0.9e1 * t685 * t194 + 0.4e1 / 0.3e1 * t23 * t1376);
+          t1394 = -0.5e1 / 0.18e2 * t1013 + t1020 - 0.3e1 / 0.8e1 * t5 * t1380 * t26 * t48 - 0.11e2 / 0.72e2 * t703 * t242 - 0.11e2 / 0.108e3 * t1227 + 0.5e1 / 0.162e3 * t1067 - t1071 / 0.54e2 - t1073 / 0.486e3 + 0.11e2 / 0.324e3 * t1086 + t1235 / 0.18e2 - t1242 / 0.27e2;
+          t1396 = my_piecewise3(t1, 0, t1331 * t111 / 0.12e2 + t1336 / 0.36e2 + t703 * t236 / 0.108e3 + t1253 / 0.162e3 - t1343 / 0.4e1 + t1347 / 0.12e2 - t1182 / 0.4e1 + t1186 / 0.3e1 - 0.5e1 / 0.18e2 * t1190 + t1009 / 0.12e2 + t1394);
+          t1402 = t5 * t650 * t100;
+          t1408 = t5 * t724 * t95 * t77;
+          t1412 = t5 * t359 * t212 * t77;
+          t1427 = t305 * t305;
+          t1440 = my_piecewise5(t14, 0, t10, 0, t1280);
+          t1444 = my_piecewise3(t58, 0, 0.40e2 / 0.81e2 * t1134 * t350 * t249 - 0.32e2 / 0.27e2 * t635 * t118 * t305 - 0.8e1 / 0.27e2 * t711 * t255 + 0.8e1 / 0.9e1 * t248 * t1427 + 0.8e1 / 0.9e1 * t301 * t645 - 0.8e1 / 0.27e2 * t550 * t355 * t249 + 0.8e1 / 0.9e1 * t248 * t720 * t118 + 0.4e1 / 0.9e1 * t716 * t255 + 0.4e1 / 0.3e1 * t59 * t1440);
+          t1449 = t669 * t387;
+          t1451 = t673 * t387;
+          t1453 = t669 * t381;
+          t1455 = t673 * t381;
+          t1458 = t5 * t654 * t100;
+          t1459 = t1458 * t164;
+          t1462 = t5 * t658 * t100;
+          t1463 = t1462 * t164;
+          t1468 = t1164 / 0.12e2 - 0.3e1 / 0.8e1 * t5 * t1444 * t26 * t77 - 0.11e2 / 0.108e3 * t1449 + 0.11e2 / 0.324e3 * t1451 + t1453 / 0.162e3 - t1455 / 0.486e3 + t1459 / 0.18e2 - t1463 / 0.54e2 - t1316 / 0.27e2 + 0.5e1 / 0.162e3 * t1320 + t1312 / 0.36e2;
+          t1470 = my_piecewise3(t53, 0, t665 * t381 / 0.108e3 - 0.11e2 / 0.72e2 * t665 * t387 + t1402 * t164 / 0.12e2 - 0.5e1 / 0.18e2 * t1301 - t1408 / 0.4e1 + t1412 / 0.12e2 - 0.5e1 / 0.18e2 * t1168 + t1173 - t1293 / 0.4e1 + t1297 / 0.3e1 + t1468);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho4[2] = 0.2e1 * t634 + 0.2e1 * t677 + 0.2e1 * t710 + 0.2e1 * t753 + t6 * (t1396 + t1470);
+
+          t1491 = my_piecewise5(t10, 0, t14, 0, t1208 + t1209);
+          t1495 = my_piecewise3(t20, 0, 0.40e2 / 0.81e2 * t1027 * t758 * t86 - 0.8e1 / 0.9e1 * t680 * t280 - 0.8e1 / 0.9e1 * t587 * t338 * t86 + 0.4e1 / 0.3e1 * t590 * t338 + 0.4e1 / 0.3e1 * t276 * t689 + 0.4e1 / 0.9e1 * t185 * t765 * t86 + 0.4e1 / 0.3e1 * t23 * t1491);
+          t1502 = t5 * t769 * t95 * t48;
+          t1505 = t5 * t770 * t100;
+          t1514 = -0.3e1 / 0.8e1 * t5 * t1495 * t26 * t48 - t1502 / 0.8e1 + t1505 * t111 / 0.24e2 - 0.3e1 / 0.8e1 * t1343 + t1347 / 0.4e1 + t1336 / 0.24e2 + t1187 - 0.5e1 / 0.12e2 * t1190 - t1243 - 0.5e1 / 0.36e2 * t1013 + t1020 + 0.5e1 / 0.324e3 * t1067;
+          t1515 = my_piecewise3(t1, 0, t1514);
+          t1518 = t5 * t789 * t95 * t77;
+          t1536 = my_piecewise5(t14, 0, t10, 0, -t1208 + t1280);
+          t1540 = my_piecewise3(t58, 0, 0.40e2 / 0.81e2 * t1134 * t778 * t118 - 0.8e1 / 0.9e1 * t711 * t305 - 0.8e1 / 0.9e1 * t635 * t355 * t118 + 0.4e1 / 0.3e1 * t638 * t355 + 0.4e1 / 0.3e1 * t301 * t720 + 0.4e1 / 0.9e1 * t248 * t785 * t118 + 0.4e1 / 0.3e1 * t59 * t1536);
+          t1549 = t533 * t126;
+          t1550 = t1549 * t830;
+          t1552 = t533 * t122;
+          t1560 = t5 * t725 * t100;
+          t1565 = -t1518 / 0.8e1 - 0.3e1 / 0.8e1 * t5 * t1540 * t26 * t77 - 0.3e1 / 0.8e1 * t1408 + t1412 / 0.4e1 + t1298 - 0.5e1 / 0.12e2 * t1301 - 0.5e1 / 0.36e2 * t1168 + t1173 + t1550 / 0.162e3 + t1552 * t830 / 0.54e2 - 0.11e2 / 0.24e2 * t735 * t387 + t735 * t381 / 0.36e2 + t1560 * t164 / 0.8e1 - 0.11e2 / 0.108e3 * t320 * t798;
+          t1568 = t739 * t387;
+          t1570 = t739 * t381;
+          t1573 = t5 * t729 * t100;
+          t1574 = t1573 * t164;
+          t1576 = t324 * t798;
+          t1578 = t324 * t804;
+          t1587 = 0.77e2 / 0.108e3 * t320 * t804 - 0.11e2 / 0.72e2 * t1568 + t1570 / 0.108e3 + t1574 / 0.24e2 - 0.11e2 / 0.324e3 * t1576 + 0.77e2 / 0.324e3 * t1578 - 0.11e2 / 0.72e2 * t1449 + 0.11e2 / 0.108e3 * t1451 + t1453 / 0.108e3 - t1455 / 0.162e3 + t1459 / 0.12e2 - t1463 / 0.18e2 - t1317 + 0.5e1 / 0.108e3 * t1320;
+          t1589 = my_piecewise3(t53, 0, t1565 + t1587);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho4[3] = 0.3e1 * t710 + 0.3e1 * t753 + t777 + t834 + t6 * (t1515 + t1589);
+
+          t1594 = t333 * t333;
+          t1599 = t338 * t338;
+          t1606 = my_piecewise5(t10, 0, t14, 0, 0.24e2 * t517 + 0.24e2 * t1041);
+          t1610 = my_piecewise3(t20, 0, 0.40e2 / 0.81e2 * t1027 * t1594 - 0.16e2 / 0.9e1 * t680 * t338 + 0.4e1 / 0.3e1 * t185 * t1599 + 0.16e2 / 0.9e1 * t276 * t765 + 0.4e1 / 0.3e1 * t23 * t1606);
+          t1619 = my_piecewise3(t1, 0, -0.3e1 / 0.8e1 * t5 * t1610 * t26 * t48 - t1502 / 0.2e1 + t1347 / 0.2e1 - 0.5e1 / 0.9e1 * t1190 + t1020);
+          t1620 = t350 * t350;
+          t1625 = t355 * t355;
+          t1632 = my_piecewise5(t14, 0, t10, 0, -0.24e2 * t517 + 0.24e2 * t1146);
+          t1636 = my_piecewise3(t58, 0, 0.40e2 / 0.81e2 * t1134 * t1620 - 0.16e2 / 0.9e1 * t711 * t355 + 0.4e1 / 0.3e1 * t248 * t1625 + 0.16e2 / 0.9e1 * t301 * t785 + 0.4e1 / 0.3e1 * t59 * t1632);
+          t1645 = t794 * t376;
+          t1651 = t533 * t150;
+          t1657 = t5 * t790 * t100;
+          t1664 = -0.3e1 / 0.8e1 * t5 * t1636 * t26 * t77 - t1518 / 0.2e1 + t1412 / 0.2e1 - 0.5e1 / 0.9e1 * t1301 + t1173 + 0.2e1 / 0.81e2 * t1550 - 0.11e2 / 0.27e2 * t821 * t824 * t826 / t1645 + 0.2e1 / 0.27e2 * t1651 * t830 + t816 * t381 / 0.18e2 + t1657 * t164 / 0.6e1 - 0.11e2 / 0.27e2 * t366 * t798 + 0.77e2 / 0.27e2 * t366 * t804;
+          t1684 = t533 * t154;
+          t1687 = 0.1e1 / t822 / t72 * t1093;
+          t1688 = t374 * t374;
+          t1702 = -0.11e2 / 0.12e2 * t816 * t387 + 0.979e3 / 0.972e3 * t155 * t373 * t375 / t65 / t979 - 0.11e2 / 0.18e2 * t1568 + t1570 / 0.27e2 + t1574 / 0.6e1 - 0.11e2 / 0.81e2 * t1576 + 0.77e2 / 0.81e2 * t1578 - 0.1309e4 / 0.324e3 * t155 * t159 * t63 / t66 / t427 + 0.2e1 / 0.243e3 * t1684 * t1687 * t1688 / t66 / t794 / t427 * t28 * t33 + 0.11e2 / 0.54e2 * t1451 - t1455 / 0.81e2 - t1463 / 0.9e1 + 0.5e1 / 0.81e2 * t1320;
+          t1704 = my_piecewise3(t53, 0, t1664 + t1702);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho4[4] = 0.4e1 * t777 + 0.4e1 * t834 + t6 * (t1619 + t1704);
+
+          t1715 = t218 * t861;
+          t1731 = 0.5e1 / 0.864e3 * t1066 * t173;
+          t1732 = t491 * t407;
+          t1734 = t491 * t403;
+          t1736 = t218 * t865;
+          t1738 = t1070 * t173;
+          t1740 = t485 * t407;
+          t1742 = t485 * t403;
+          t1746 = t1076 * t173;
+          t1761 = t1059 * t856;
+          t1763 = -0.341e3 / 0.1296e4 * t102 * t226 * t228 * t471 * my_sigma[0] + 0.3e1 / 0.32e2 * t208 * t861 + t1715 / 0.32e2 - t1090 * t1094 / t37 / t469 / t443 * t539 * t28 * t33 / 0.324e3 + 0.77e2 / 0.108e3 * t102 * t105 * t171 * t462 - t1731 - t1732 / 0.36e2 + t1734 / 0.432e3 - 0.11e2 / 0.72e2 * t1736 + t1738 / 0.96e2 + t1740 / 0.12e2 - t1742 / 0.144e3 - 0.11e2 / 0.24e2 * t208 * t865 - t1746 / 0.64e2 + t481 * t407 / 0.8e1 - t481 * t403 / 0.96e2 + 0.19e2 / 0.144e3 * t534 * t537 * t538 * t542 * t229 - t1112 * t173 / 0.64e2 - t1062 * t856 / 0.48e2 - t1761 / 0.144e3;
+          t1764 = my_piecewise3(t1, 0, t1763);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[0] = t6 * t1764 + 0.3e1 * t869;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[1] = 0.0e0;
+
+          t1769 = t1311 * t178;
+          t1771 = t1315 * t178;
+          t1774 = 0.5e1 / 0.864e3 * t1319 * t178;
+          t1776 = my_piecewise3(t53, 0, -t1307 * t178 / 0.64e2 - t1769 / 0.64e2 + t1771 / 0.96e2 - t1774);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[2] = t6 * t1776 + 0.3e1 * t879;
+
+          t1778 = 0.2e1 * t893;
+          t1785 = t1234 * t173 / 0.96e2;
+          t1790 = t1241 * t173;
+          t1793 = t620 * t407 / 0.36e2;
+          t1795 = t620 * t403 / 0.432e3;
+          t1808 = t294 * t861 / 0.32e2 + t1715 / 0.96e2 - 0.11e2 / 0.72e2 * t294 * t865 - t1785 + t612 * t407 / 0.12e2 - t612 * t403 / 0.144e3 + t1790 / 0.288e3 + t1793 - t1795 - t1731 - t1732 / 0.54e2 + t1734 / 0.648e3 - 0.11e2 / 0.216e3 * t1736 + t1738 / 0.144e3 + t1740 / 0.36e2 - t1742 / 0.432e3 - t1746 / 0.192e3 - t1230 * t173 / 0.64e2 - t1761 / 0.432e3 - t1224 * t856 / 0.144e3;
+          t1809 = my_piecewise3(t1, 0, t1808);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[3] = t6 * t1809 + t1778 + t869;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[4] = 0.0e0;
+
+          t1811 = 0.2e1 * t909;
+          t1815 = t1458 * t178 / 0.96e2;
+          t1816 = t1462 * t178;
+          t1823 = t669 * t432 / 0.432e3;
+          t1824 = t673 * t432;
+          t1829 = t669 * t436 / 0.36e2;
+          t1830 = t673 * t436;
+          t1832 = -t1402 * t178 / 0.64e2 - t1815 + t1816 / 0.288e3 - t1769 / 0.192e3 + t1771 / 0.144e3 - t1774 - t665 * t432 / 0.288e3 - t1823 + t1824 / 0.1296e4 + t665 * t436 / 0.24e2 + t1829 - t1830 / 0.108e3;
+          t1833 = my_piecewise3(t53, 0, t1832);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[5] = t6 * t1833 + t1811 + t879;
+
+          t1837 = t1335 * t173;
+          t1847 = -t1331 * t173 / 0.64e2 - t1837 / 0.192e3 - t703 * t403 / 0.288e3 + t703 * t407 / 0.24e2 - t1785 + t1790 / 0.144e3 - t1795 + t1793 + t1738 / 0.288e3 - t1731 + t1734 / 0.1296e4 - t1732 / 0.108e3;
+          t1848 = my_piecewise3(t1, 0, t1847);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[6] = t6 * t1848 + t1778 + t916;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[7] = 0.0e0;
+
+          t1852 = t1573 * t178;
+          t1857 = t739 * t432;
+          t1861 = t739 * t436;
+          t1868 = t1549 * t932;
+          t1872 = t324 * t937;
+          t1876 = t324 * t941;
+          t1878 = -t1560 * t178 / 0.64e2 - t1852 / 0.192e3 - t1815 + t1816 / 0.144e3 - t735 * t432 / 0.144e3 - t1857 / 0.432e3 + t735 * t436 / 0.12e2 + t1861 / 0.36e2 + t1771 / 0.288e3 - t1774 - t1823 + t1824 / 0.648e3 + t1829 - t1830 / 0.54e2 - t1552 * t932 / 0.144e3 - t1868 / 0.432e3 + t320 * t937 / 0.32e2 + t1872 / 0.96e2 - 0.11e2 / 0.72e2 * t320 * t941 - 0.11e2 / 0.216e3 * t1876;
+          t1879 = my_piecewise3(t53, 0, t1878);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[8] = t6 * t1879 + t1811 + t945;
+
+          t1887 = my_piecewise3(t1, 0, -t1505 * t173 / 0.64e2 - t1837 / 0.64e2 + t1790 / 0.96e2 - t1731);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[9] = t6 * t1887 + 0.3e1 * t916;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[10] = 0.0e0;
+
+          t1934 = -0.341e3 / 0.1296e4 * t155 * t373 * t228 * t796 * my_sigma[2] + 0.3e1 / 0.32e2 * t366 * t937 + t1872 / 0.32e2 - t1857 / 0.144e3 + t1824 / 0.432e3 - t1684 * t1687 / t66 / t794 / t451 * t825 * t28 * t33 / 0.324e3 + 0.77e2 / 0.108e3 * t155 * t158 * t171 * t802 + t816 * t436 / 0.8e1 - t816 * t432 / 0.96e2 - 0.11e2 / 0.24e2 * t366 * t941 - 0.11e2 / 0.72e2 * t1876 - t1852 / 0.64e2 + t1861 / 0.12e2 - t1830 / 0.36e2 + t1816 / 0.96e2 - t1774 + 0.19e2 / 0.144e3 * t821 * t824 * t538 * t828 * t374 - t1657 * t178 / 0.64e2 - t1868 / 0.144e3 - t1651 * t932 / 0.48e2;
+          t1935 = my_piecewise3(t53, 0, t1934);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[11] = t6 * t1935 + 0.3e1 * t945;
+
+          t1940 = t485 * t447;
+          t1947 = t491 * t447 / 0.3456e4;
+          t1948 = t1059 * t955;
+          t1950 = t218 * t959;
+          t1969 = my_piecewise3(t1, 0, t481 * t447 / 0.768e3 + t1940 / 0.1152e4 + t1062 * t955 / 0.192e3 - t208 * t959 / 0.72e2 - t1947 + t1948 / 0.576e3 - t1950 / 0.216e3 + t1090 * t1094 / t37 / t1053 * t229 * t28 * t33 / 0.864e3 - 0.43e2 / 0.1152e4 * t534 * t537 * t854 * my_sigma[0] + 0.19e2 / 0.432e3 * t102 * t224 * t442 * t234);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[0] = t6 * t1969 + 0.2e1 * t963;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[1] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[2] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[3] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[4] = 0.0e0;
+
+          t1974 = t669 * t455;
+          t1977 = t673 * t455 / 0.3456e4;
+          t1979 = my_piecewise3(t53, 0, t665 * t455 / 0.768e3 + t1974 / 0.1152e4 - t1977);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[5] = t6 * t1979 + 0.2e1 * t970;
+
+          t1983 = t620 * t447;
+          t1993 = my_piecewise3(t1, 0, t612 * t447 / 0.768e3 + t1983 / 0.2304e4 + t1224 * t955 / 0.384e3 - t294 * t959 / 0.144e3 + t1940 / 0.2304e4 - t1947 + t1948 / 0.1152e4 - t1950 / 0.432e3);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[6] = t6 * t1993 + t963 + t975;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[7] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[8] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[9] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[10] = 0.0e0;
+
+          t1997 = t739 * t455;
+          t2002 = t1549 * t983;
+          t2006 = t324 * t987;
+          t2009 = my_piecewise3(t53, 0, t735 * t455 / 0.768e3 + t1997 / 0.2304e4 + t1974 / 0.2304e4 - t1977 + t1552 * t983 / 0.384e3 + t2002 / 0.1152e4 - t320 * t987 / 0.144e3 - t2006 / 0.432e3);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[11] = t6 * t2009 + t970 + t991;
+
+          t2016 = my_piecewise3(t1, 0, t703 * t447 / 0.768e3 + t1983 / 0.1152e4 - t1947);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[12] = t6 * t2016 + 0.2e1 * t975;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[13] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[14] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[15] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[16] = 0.0e0;
+
+          t2045 = my_piecewise3(t53, 0, t816 * t455 / 0.768e3 + t1997 / 0.1152e4 + t1651 * t983 / 0.192e3 - t366 * t987 / 0.72e2 - t1977 + t2002 / 0.576e3 - t2006 / 0.216e3 + t1684 * t1687 / t66 / t1645 * t374 * t28 * t33 / 0.864e3 - 0.43e2 / 0.1152e4 * t821 * t824 * t930 * my_sigma[2] + 0.19e2 / 0.432e3 * t155 * t372 * t442 * t379);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[17] = t6 * t2045 + 0.2e1 * t991;
+
+          t2050 = t1059 * t995 / 0.3072e4;
+          t2062 = my_piecewise3(t1, 0, -t1062 * t995 / 0.1024e4 - t2050 - t1090 * t1094 / t37 / t541 * t171 * my_sigma[0] / 0.2304e4 + t534 * t537 * t953 / 0.128e3);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[0] = t6 * t2062 + t998;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[1] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[2] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[3] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[4] = 0.0e0;
+
+          if(v4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            v4rhosigma3[5] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[6] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[7] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[8] = 0.0e0;
+
+          t2067 = t1549 * t1001 / 0.3072e4;
+          t2069 = my_piecewise3(t53, 0, -t1552 * t1001 / 0.1024e4 - t2067);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[9] = t6 * t2069 + t1004;
+
+          t2074 = my_piecewise3(t1, 0, -t1224 * t995 / 0.1024e4 - t2050);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[10] = t6 * t2074 + t998;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[11] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[12] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[13] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[14] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[15] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[16] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[17] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[18] = 0.0e0;
+
+          t2089 = my_piecewise3(t53, 0, -t1651 * t1001 / 0.1024e4 - t2067 - t1684 * t1687 / t66 / t827 * t171 * my_sigma[2] / 0.2304e4 + t821 * t824 * t981 / 0.128e3);
+          if(v4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[19] = t6 * t2089 + t1004;
+
+          t2098 = my_piecewise3(t1, 0, t1090 * t1094 / t37 / t852 * t28 * t33 / 0.6144e4);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[0] = t6 * t2098;
+
+          if(v4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[1] = 0.0e0;
+
+          if(v4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[2] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[3] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[4] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[5] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[6] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[7] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[8] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[9] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[10] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[11] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[12] = 0.0e0;
+
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[13] = 0.0e0;
+
+          t2106 = my_piecewise3(t53, 0, t1684 * t1687 / t66 / t928 * t28 * t33 / 0.6144e4);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[14] = t6 * t2106;
+
+        #ifndef XC_DONT_COMPILE_MXC
+
+          if(order < 5) return;
+
+
+        #endif
+
+        #endif
+
+        #endif
+
+        #endif
+
+        #endif
+      }
+    }
+  } else {
+    for(ip = 0; ip < np; ip++){
+      const xc_dimensions *dim = &(p->dim);
+      const int pos = ip;
+      double *irho = &rho[pos * dim->rho];
+      double *isigma = &sigma[pos * dim->sigma];
+      double *izk = &zk[pos * dim->rho];
+#ifndef XC_DONT_COMPILE_VXC   
+      double *ivrho = &vrho[pos * dim->vrho];
+      double *ivsigma = &vsigma[pos * dim->vsigma];
+#ifndef XC_DONT_COMPILE_FXC
+      double *iv2rho2 = &v2rho2[pos * dim->v2rho2];
+      double *iv2rhosigma = &v2rhosigma[pos * dim->v2rhosigma];
+      double *iv2sigma2 = &v2sigma2[pos * dim->v2sigma2];
+#ifndef XC_DONT_COMPILE_KXC
+      double *iv3rho3 = &v3rho3[pos * dim->v3rho3];
+      double *iv3rho2sigma = &v3rho2sigma[pos * dim->v3rho2sigma];
+      double *iv3rhosigma2 = &v3rhosigma2[pos * dim->v3rhosigma2];
+      double *iv3sigma3 = &v3sigma3[pos * dim->v3sigma3];
+#ifndef XC_DONT_COMPILE_LXC
+      double *iv4rho4 = &v4rho4[pos * dim->v4rho4];
+      double *iv4rho3sigma = &v4rho3sigma[pos * dim->v4rho3sigma];
+      double *iv4rho2sigma2 = &v4rho2sigma2[pos * dim->v4rho2sigma2];
+      double *iv4rhosigma3 = &v4rhosigma3[pos * dim->v4rhosigma3];
+      double *iv4sigma4 = &v4sigma4[pos * dim->v4sigma4];
+#endif
+#endif
+#endif
+#endif
+
+      /* Screen low density */
+      dens = irho[0];
+      if(dens >= p->dens_threshold) {
+        /* sanity check of input parameters */
+        my_rho[0] = m_max(p->dens_threshold, irho[0]);
+        my_sigma[0] = m_max(p->sigma_threshold * p->sigma_threshold, isigma[0]);
+
+        #ifndef XC_DONT_COMPILE_EXC
+          double t2, t3, t4, t6, t7, t8, t10, t11;
+          double t13, t15, t17, t18, t20, t22, t23, t24;
+          double t25, t27, t28, t30, t31, t33, t37, t42;
+          double t46;
+
+        #ifndef XC_DONT_COMPILE_VXC
+          double t52, t56, t58, t59, t61, t64, t65, t69;
+          double t78, t79, t82;
+
+        #ifndef XC_DONT_COMPILE_FXC
+          double t91, t96, t99, t103, t106, t107, t108, t109;
+          double t111, t112, t115, t119, t124, t128, t131, t135;
+          double t138, t145, t148;
+
+        #ifndef XC_DONT_COMPILE_KXC
+          double t159, t162, t166, t169, t172, t173, t177, t178;
+          double t179, t180, t181, t182, t184, t188, t196, t200;
+          double t202, t206, t212, t216, t220, t223, t227, t231;
+
+        #ifndef XC_DONT_COMPILE_LXC
+          double t253, t268, t269, t270, t276, t297, t316, t333;
+          double t344;
+        #endif
+
+        #endif
+
+        #endif
+
+        #endif
+
+        #endif
+
+
+          const gga_x_pbe_params *params = p->params;
+
+          t2 = my_rho[0] / 0.2e1 <= p->dens_threshold;
+          t3 = M_CBRT3;
+          t4 = M_CBRTPI;
+          t6 = t3 / t4;
+          t7 = 0.1e1 <= p->zeta_threshold;
+          t8 = p->zeta_threshold - 0.1e1;
+          t10 = my_piecewise5(t7, t8, t7, -t8, 0);
+          t11 = 0.1e1 + t10;
+          t13 = POW_1_3(p->zeta_threshold);
+          t15 = POW_1_3(t11);
+          t17 = my_piecewise3(t11 <= p->zeta_threshold, t13 * p->zeta_threshold, t15 * t11);
+          t18 = POW_1_3(my_rho[0]);
+          t20 = M_CBRT6;
+          t22 = M_PI * M_PI;
+          t23 = POW_1_3(t22);
+          t24 = t23 * t23;
+          t25 = 0.1e1 / t24;
+          t27 = M_CBRT2;
+          t28 = t27 * t27;
+          t30 = my_rho[0] * my_rho[0];
+          t31 = t18 * t18;
+          t33 = 0.1e1 / t31 / t30;
+          t37 = params->kappa + params->mu * t20 * t25 * my_sigma[0] * t28 * t33 / 0.24e2;
+          t42 = 0.1e1 + params->kappa * (0.1e1 - params->kappa / t37);
+          t46 = my_piecewise3(t2, 0, -0.3e1 / 0.8e1 * t6 * t17 * t18 * t42);
+          if(izk != NULL && (p->info->flags & XC_FLAGS_HAVE_EXC))
+            izk[0] = 0.2e1 * t46;
+
+        #ifndef XC_DONT_COMPILE_VXC
+
+          if(order < 1) continue;
+
+
+          t52 = t30 * my_rho[0];
+          t56 = params->kappa * params->kappa;
+          t58 = t6 * t17 / t18 / t52 * t56;
+          t59 = t37 * t37;
+          t61 = 0.1e1 / t59 * params->mu;
+          t64 = t25 * my_sigma[0] * t28;
+          t65 = t61 * t20 * t64;
+          t69 = my_piecewise3(t2, 0, -t6 * t17 / t31 * t42 / 0.8e1 + t58 * t65 / 0.24e2);
+          if(ivrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC))
+            ivrho[0] = 0.2e1 * my_rho[0] * t69 + 0.2e1 * t46;
+
+          t78 = t20 * t25 * t28;
+          t79 = t61 * t78;
+          t82 = my_piecewise3(t2, 0, -t6 * t17 / t18 / t30 * t56 * t79 / 0.64e2);
+          if(ivrho != NULL && (p->info->flags & XC_FLAGS_HAVE_VXC))
+            ivsigma[0] = 0.2e1 * my_rho[0] * t82;
+
+        #ifndef XC_DONT_COMPILE_FXC
+
+          if(order < 2) continue;
+
+
+          t91 = t30 * t30;
+          t96 = t6 * t17 / t18 / t91 * t56;
+          t99 = t91 * t52;
+          t103 = t6 * t17 / t99 * t56;
+          t106 = params->mu * params->mu;
+          t107 = 0.1e1 / t59 / t37 * t106;
+          t108 = t20 * t20;
+          t109 = t107 * t108;
+          t111 = 0.1e1 / t23 / t22;
+          t112 = my_sigma[0] * my_sigma[0];
+          t115 = t109 * t111 * t112 * t27;
+          t119 = my_piecewise3(t2, 0, t6 * t17 / t31 / my_rho[0] * t42 / 0.12e2 - t96 * t65 / 0.8e1 + t103 * t115 / 0.54e2);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2rho2[0] = 0.2e1 * my_rho[0] * t119 + 0.4e1 * t69;
+
+          t124 = t91 * t30;
+          t128 = t6 * t17 / t124 * t56;
+          t131 = t109 * t111 * t27 * my_sigma[0];
+          t135 = my_piecewise3(t2, 0, 0.7e1 / 0.192e3 * t58 * t79 - t128 * t131 / 0.144e3);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2rhosigma[0] = 0.2e1 * my_rho[0] * t135 + 0.2e1 * t82;
+
+          t138 = t91 * my_rho[0];
+          t145 = t107 * t108 * t111 * t27;
+          t148 = my_piecewise3(t2, 0, t6 * t17 / t138 * t56 * t145 / 0.384e3);
+          if(iv2rho2 != NULL && (p->info->flags & XC_FLAGS_HAVE_FXC))
+            iv2sigma2[0] = 0.2e1 * my_rho[0] * t148;
+
+        #ifndef XC_DONT_COMPILE_KXC
+
+          if(order < 3) continue;
+
+
+          t159 = t6 * t17 / t18 / t138 * t56;
+          t162 = t91 * t91;
+          t166 = t6 * t17 / t162 * t56;
+          t169 = t22 * t22;
+          t172 = t3 / t4 / t169;
+          t173 = t162 * t30;
+          t177 = t172 * t17 / t31 / t173;
+          t178 = t59 * t59;
+          t179 = 0.1e1 / t178;
+          t180 = t56 * t179;
+          t181 = t106 * params->mu;
+          t182 = t112 * my_sigma[0];
+          t184 = t180 * t181 * t182;
+          t188 = my_piecewise3(t2, 0, -0.5e1 / 0.36e2 * t6 * t17 * t33 * t42 + 0.115e3 / 0.216e3 * t159 * t65 - 0.5e1 / 0.27e2 * t166 * t115 + 0.2e1 / 0.27e2 * t177 * t184);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho3[0] = 0.2e1 * my_rho[0] * t188 + 0.6e1 * t119;
+
+          t196 = t162 * my_rho[0];
+          t200 = t172 * t17 / t31 / t196;
+          t202 = t180 * t181 * t112;
+          t206 = my_piecewise3(t2, 0, -0.35e2 / 0.288e3 * t96 * t79 + 0.25e2 / 0.432e3 * t103 * t131 - t200 * t202 / 0.36e2);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rho2sigma[0] = 0.2e1 * my_rho[0] * t206 + 0.4e1 * t135;
+
+          t212 = 0.1e1 / t31 / t162;
+          t216 = t180 * t181 * my_sigma[0];
+          t220 = my_piecewise3(t2, 0, -0.5e1 / 0.384e3 * t128 * t145 + t172 * t17 * t212 * t216 / 0.96e2);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3rhosigma2[0] = 0.2e1 * my_rho[0] * t220 + 0.2e1 * t148;
+
+          t223 = t172 * t17;
+          t227 = t179 * t181;
+          t231 = my_piecewise3(t2, 0, -t223 / t31 / t99 * t56 * t227 / 0.256e3);
+          if(iv3rho3 != NULL && (p->info->flags & XC_FLAGS_HAVE_KXC))
+            iv3sigma3[0] = 0.2e1 * my_rho[0] * t231;
+
+        #ifndef XC_DONT_COMPILE_LXC
+
+          if(order < 4) continue;
+
+
+          t253 = t162 * t52;
+          t268 = t106 * t106;
+          t269 = 0.1e1 / t178 / t37 * t268;
+          t270 = t112 * t112;
+          t276 = my_piecewise3(t2, 0, 0.10e2 / 0.27e2 * t6 * t17 / t31 / t52 * t42 - 0.305e3 / 0.108e3 * t6 * t17 / t18 / t124 * t56 * t65 + 0.835e3 / 0.486e3 * t6 * t17 / t196 * t56 * t115 - 0.124e3 / 0.81e2 * t172 * t17 / t31 / t253 * t184 + 0.8e1 / 0.243e3 * t172 * t17 / t18 / t162 / t124 * t56 * t269 * t270 * t78);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho4[0] = 0.2e1 * my_rho[0] * t276 + 0.8e1 * t188;
+
+          t297 = my_piecewise3(t2, 0, 0.455e3 / 0.864e3 * t159 * t79 - 0.595e3 / 0.1296e4 * t166 * t131 + t177 * t202 / 0.2e1 - t172 * t17 / t18 / t162 / t138 * t56 * t269 * t182 * t78 / 0.81e2);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho3sigma[0] = 0.2e1 * my_rho[0] * t297 + 0.6e1 * t206;
+
+          t316 = my_piecewise3(t2, 0, 0.5e1 / 0.64e2 * t103 * t145 - 0.41e2 / 0.288e3 * t200 * t216 + t172 * t17 / t18 / t162 / t91 * t56 * t269 * t112 * t78 / 0.216e3);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rho2sigma2[0] = 0.2e1 * my_rho[0] * t316 + 0.4e1 * t220;
+
+          t333 = my_piecewise3(t2, 0, 0.23e2 / 0.768e3 * t223 * t212 * t56 * t227 - t172 * t17 / t18 / t253 * t56 * t269 * t20 * t64 / 0.576e3);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4rhosigma3[0] = 0.2e1 * my_rho[0] * t333 + 0.2e1 * t231;
+
+          t344 = my_piecewise3(t2, 0, t172 * t17 / t18 / t173 * t56 * t269 * t78 / 0.1536e4);
+          if(iv4rho4 != NULL && (p->info->flags & XC_FLAGS_HAVE_LXC))
+            iv4sigma4[0] = 0.2e1 * my_rho[0] * t344;
+
+        #ifndef XC_DONT_COMPILE_MXC
+
+          if(order < 5) continue;
+
+
+        #endif
+
+        #endif
+
+        #endif
+
+        #endif
+
+        #endif
+      }
+    }
+  }
+}