8 #include "../common/grid_common.h"
9 #include "../common/grid_constants.h"
14 #if defined(__CUDACC__) || defined(__HIPCC__)
15 #define GRID_DEVICE __device__
27 const orbital b,
const double value);
45 const double zeta,
const double zetb,
53 for (
int i = 0;
i < 3;
i++) {
79 cab_add(cab,
a,
up(idir,
b), -2.0 * zetb * pab_val);
115 const double pab_val,
126 cab_add(cab,
a,
up(idir,
b), -2.0 * zetb * pab_val);
169 cab_add(cab,
a,
up(idir,
b), +2.0 * zetb * pab_val);
197 const double zetb,
const double pab_val,
209 cab_add(cab,
down(ider,
a),
up(ider,
b), -2.0 *
a.l[ider] * zetb * pab_val);
226 }
else if (idir == 1) {
229 }
else if (idir == 2) {
239 cab_add(cab,
a,
up(i1,
up(i2,
b)), +4.0 * zetb * zetb * func_a);
248 const double zeta,
const double zetb,
255 const double func_a1 =
a.l[ider1] *
a.l[ider2] * pab_val;
258 const double func_a2 = -2.0 *
zeta *
a.l[ider2] * pab_val;
261 const double func_a3 = -2.0 *
zeta *
a.l[ider1] * pab_val;
264 const double func_a4 = 4.0 *
zeta *
zeta * pab_val;
277 b.l[idir] * (
b.l[idir] - 1) * func_a);
278 cab_add(cab,
a,
b, -2.0 * zetb * (2 *
b.l[idir] + 1) * func_a);
279 cab_add(cab,
a,
up(idir,
up(idir,
b)), +4.0 * zetb * zetb * func_a);
288 const double zetb,
const double pab_val,
295 const double func_a1 =
a.l[ider] * (
a.l[ider] - 1) * pab_val;
298 const double func_a2 = -2.0 *
zeta * (2 *
a.l[ider] + 1) * pab_val;
301 const double func_a3 = 4.0 *
zeta *
zeta * pab_val;
317 const double zetb,
const double pab_val,
512 fprintf(stderr,
"Error: Unknown ga_gb_function %i.\n", func);
static GRID_HOST_DEVICE orbital up(const int i, const orbital a)
Increase i'th component of given orbital angular momentum.
static GRID_HOST_DEVICE orbital down(const int i, const orbital a)
Decrease i'th component of given orbital angular momentum.
static void const int const int i
static GRID_DEVICE void prepare_pab(const enum grid_func func, const orbital a, const orbital b, const double zeta, const double zetb, const double pab_val, cab_store *cab)
Transforms a given element of the density matrix according to func.
static GRID_DEVICE void prepare_pab_ADBmDAB(const int idir, const orbital a, const orbital b, const double zeta, const double zetb, const double pab_val, cab_store *cab)
Implementation of function GRID_FUNC_ADBmDAB_{X,Y,Z}.
static GRID_DEVICE void prepare_pab_DABpADB(const int idir, const orbital a, const orbital b, const double zeta, const double zetb, const double pab_val, cab_store *cab)
Implementation of function GRID_FUNC_DABpADB_{X,Y,Z}.
static prepare_ldiffs prepare_get_ldiffs(const enum grid_func func)
Returns difference in angular momentum range for given func.
static GRID_DEVICE void prepare_pab_ADB(const int idir, const orbital a, const orbital b, const double zetb, const double pab_val, cab_store *cab)
Implementation of function GRID_FUNC_ADB_{X,Y,Z}. This function takes the derivates with respect to n...
static GRID_DEVICE void prepare_pab_AB(const orbital a, const orbital b, const double pab_val, cab_store *cab)
Implementation of function GRID_FUNC_AB, ie. identity transformation.
static GRID_DEVICE void prepare_pab_DAB(const int idir, const orbital a, const orbital b, const double zeta, const double pab_val, cab_store *cab)
Implementation of function GRID_FUNC_DAB_{X,Y,Z}. This function takes the derivates with respect to n...
static GRID_DEVICE void prepare_pab_ARDBmDARB(const int idir, const int ir, const orbital a, const orbital b, const double zeta, const double zetb, const double pab_val, cab_store *cab)
Implementation of function GRID_FUNC_ARDBmDARB_{X,Y,Z}{X,Y,Z}.
static GRID_DEVICE void prepare_pab_DiDj(const int ider1, const int ider2, const orbital a, const orbital b, const double zeta, const double zetb, const double pab_val, cab_store *cab)
Implementation of function GRID_FUNC_{DXDY,DYDZ,DZDX}.
static GRID_DEVICE void cab_add(cab_store *cab, const orbital a, const orbital b, const double value)
Adds given value to matrix element cab[idx(b)][idx(a)]. This function has to be implemented by the im...
static GRID_DEVICE void prepare_pab_Di2(const int ider, const orbital a, const orbital b, const double zeta, const double zetb, const double pab_val, cab_store *cab)
Implementation of function GRID_FUNC_{DXDX,DYDY,DZDZ}.
static GRID_DEVICE void prepare_pab_DADB(const orbital a, const orbital b, const double zeta, const double zetb, const double pab_val, cab_store *cab)
Implementation of function GRID_FUNC_DADB.
static GRID_DEVICE void prepare_pab_Di(const int ider, const orbital a, const orbital b, const double zeta, const double zetb, const double pab_val, cab_store *cab)
Implementation of function GRID_FUNC_{DX,DY,DZ}.
static GRID_DEVICE void oneterm_diidii(const int idir, const double func_a, const orbital a, const orbital b, const double zetb, cab_store *cab)
Helper for grid_prepare_pab_Di2.
static GRID_DEVICE void prepare_pab_core(const int idir, const orbital a, const orbital b, const double zeta, const double pab_val, cab_store *cab)
Implementation of function GRID_FUNC_CORE_{X,Y,Z}. This function takes the derivates with respect to ...
static GRID_DEVICE void oneterm_dijdij(const int idir, const double func_a, const orbital a, const orbital b, const double zetb, cab_store *cab)
Helper for grid_prepare_pab_DiDj.
Cab matrix container to be passed through get_force/virial to cab_get.
Orbital angular momentum.
Differences in angular momentum.