10 #if defined(__CUDACC__) || defined(__HIPCC__)
11 #define GRID_DEVICE __device__
34 return 2.0 *
zeta * aip1 -
a.l[
i] * aim1;
43 const double zetb,
const cab_store *cab,
const bool compute_tau) {
48 for (
int k = 0; k < 3; k++) {
49 force += 0.5 *
a.l[k] *
b.l[k] *
51 force -=
zeta *
b.l[k] *
53 force -=
a.l[k] * zetb *
55 force += 2.0 *
zeta * zetb *
68 const double zetb,
const double rab[3],
73 return 2.0 * zetb * (aip1 - rab[
i] * axpm0) -
b.l[
i] * bim1;
82 const double zetb,
const double rab[3],
const cab_store *cab,
83 const bool compute_tau) {
88 for (
int k = 0; k < 3; k++) {
89 force += 0.5 *
a.l[k] *
b.l[k] *
91 force -=
zeta *
b.l[k] *
93 force -=
a.l[k] * zetb *
95 force += 2.0 *
zeta * zetb *
120 const bool compute_tau) {
126 for (
int k = 0; k < 3; k++) {
127 virial += 0.5 *
a.l[k] *
b.l[k] *
129 virial -=
zeta *
b.l[k] *
131 virial -=
a.l[k] * zetb *
133 virial += 2.0 *
zeta * zetb *
146 const double zetb,
const double rab[3],
163 const double zeta,
const double zetb,
const double rab[3],
164 const cab_store *cab,
const bool compute_tau) {
170 for (
int k = 0; k < 3; k++) {
172 0.5 *
a.l[k] *
b.l[k] *
174 virial -=
zeta *
b.l[k] *
176 virial -=
a.l[k] * zetb *
178 virial += 2.0 *
zeta * zetb *
190 const double zeta,
const double zetb,
192 const bool compute_tau) {
197 for (
int k = 0; k < 3; k++) {
223 bool calculate_virial,
232 if (calculate_forces || calculate_virial) {
238 if (calculate_virial) {
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 double get_virial_a_normal(const orbital a, const orbital b, const int i, const int j, const double zeta, const cab_store *cab)
Returns element i,j of virial on atom a for compute_tau=false.
static GRID_DEVICE double get_hab(const orbital a, const orbital b, const double zeta, const double zetb, const cab_store *cab, const bool compute_tau)
Returns element i,j of hab matrix.
static process_ldiffs process_get_ldiffs(bool calculate_forces, bool calculate_virial, bool compute_tau)
Returns difference in angular momentum range for given flags.
static GRID_DEVICE double get_force_a_normal(const orbital a, const orbital b, const int i, const double zeta, const cab_store *cab)
Returns i'th component of force on atom a for compute_tau=false.
static GRID_DEVICE double get_force_b_normal(const orbital a, const orbital b, const int i, const double zetb, const double rab[3], const cab_store *cab)
Returns i'th component of force on atom b for compute_tau=false.
static GRID_DEVICE double get_force_b(const orbital a, const orbital b, const int i, const double zeta, const double zetb, const double rab[3], const cab_store *cab, const bool compute_tau)
Returns i'th component of force on atom b.
static GRID_DEVICE double get_virial_b(const orbital a, const orbital b, const int i, const int j, const double zeta, const double zetb, const double rab[3], const cab_store *cab, const bool compute_tau)
Returns element i,j of virial on atom b.
static GRID_DEVICE double get_virial_a(const orbital a, const orbital b, const int i, const int j, const double zeta, const double zetb, const cab_store *cab, const bool compute_tau)
Returns element i,j of virial on atom a.
static GRID_DEVICE double get_force_a(const orbital a, const orbital b, const int i, const double zeta, const double zetb, const cab_store *cab, const bool compute_tau)
Returns i'th component of force on atom a.
static GRID_DEVICE double cab_get(const cab_store *cab, const orbital a, const orbital b)
Returns matrix element cab[idx(b)][idx(a)]. This function has to be implemented by the importing comp...
static GRID_DEVICE double get_virial_b_normal(const orbital a, const orbital b, const int i, const int j, const double zetb, const double rab[3], const cab_store *cab)
Returns element i,j of virial on atom b for compute_tau=false.
Cab matrix container to be passed through get_force/virial to cab_get.
Orbital angular momentum.
Differences in angular momentum.