12#include "../common/grid_common.h"
33#include "../common/grid_prepare_pab.h"
40 int *la_max_diff,
int *lb_min_diff,
55 const int la_max,
const int la_min,
const int lb_max,
56 const int lb_min,
const double zeta,
57 const double zetb,
const int n1,
const int n2,
58 const double pab[n2][n1],
const int n1_prep,
60 double pab_prep[n2_prep][n1_prep]) {
64 for (
int lxa = 0; lxa <= la_max; lxa++) {
65 for (
int lxb = 0; lxb <= lb_max; lxb++) {
66 for (
int lya = 0; lya <= la_max - lxa; lya++) {
67 for (
int lyb = 0; lyb <= lb_max - lxb; lyb++) {
68 const int lza_start =
imax(la_min - lxa - lya, 0);
69 for (
int lza = lza_start; lza <= la_max - lxa - lya; lza++) {
70 const int lzb_start =
imax(lb_min - lxb - lyb, 0);
71 for (
int lzb = lzb_start; lzb <= lb_max - lxb - lyb; lzb++) {
72 const orbital a = {{lxa, lya, lza}};
73 const orbital b = {{lxb, lyb, lzb}};
74 const double pab_val = pab[o2 +
idx(b)][o1 +
idx(a)];
static int imax(int x, int y)
Returns the larger of two given integers (missing from the C standard)
static GRID_HOST_DEVICE int idx(const orbital a)
Return coset index of given orbital angular momentum.
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 prepare_ldiffs prepare_get_ldiffs(const enum grid_func func)
Returns difference in angular momentum range for given func.
static 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)].
void grid_ref_prepare_pab(const enum grid_func func, const int o1, const int o2, const int la_max, const int la_min, const int lb_max, const int lb_min, const double zeta, const double zetb, const int n1, const int n2, const double pab[n2][n1], const int n1_prep, const int n2_prep, double pab_prep[n2_prep][n1_prep])
Selects and transforms a sub-block of the given density matrix block. See grid_ref_prepare_pab....
void grid_ref_prepare_get_ldiffs(const enum grid_func func, int *la_min_diff, int *la_max_diff, int *lb_min_diff, int *lb_max_diff)
Returns block size changes due to transformation grid_prepare_pab.
Cab matrix container to be passed through get_force/virial to cab_get.
Orbital angular momentum.
Differences in angular momentum.