(git:f2a7cfd)
Loading...
Searching...
No Matches
grpp_parameters.c
Go to the documentation of this file.
1/*----------------------------------------------------------------------------*/
2/* CP2K: A general program to perform molecular dynamics simulations */
3/* Copyright 2000-2026 CP2K developers group <https://cp2k.org> */
4/* */
5/* SPDX-License-Identifier: MIT */
6/*----------------------------------------------------------------------------*/
7
8/*
9 * libgrpp - a library for the evaluation of integrals over
10 * generalized relativistic pseudopotentials.
11 *
12 * Copyright (C) 2021-2023 Alexander Oleynichenko
13 */
14#include <assert.h>
15
16#include "grpp_parameters.h"
17
18static int cartesian_generator_dirac(int L, int *cart_list);
19
20static int cartesian_generator_turbomole(int L, int *cart_list);
21
23 // tolerance of radial integration
24 1e-16,
25 // tolerance of angular integral screening
26 1e-16,
27 // tolerance of modified Bessel functions evaluation
28 // is it really needed?
29 1e-16,
30 // subroutine to generate cartesian components with given ang momentum L
32
42
43void libgrpp_set_radial_tolerance(double tolerance) {
44 // #pragma omp critical
45 {
46 libgrpp_params.radial_tolerance = tolerance;
47 }
48}
49
51 // #pragma omp critical
52 {
53 libgrpp_params.angular_screening_tolerance = tolerance;
54 }
55}
56
58 // #pragma omp critical
59 {
60 libgrpp_params.modified_bessel_tolerance = tolerance;
61 }
62}
63
65 // #pragma omp critical
66 {
67 assert(order == LIBGRPP_CART_ORDER_DIRAC ||
69
70 if (order == LIBGRPP_CART_ORDER_DIRAC) {
72 } else if (order == LIBGRPP_CART_ORDER_TURBOMOLE) {
74 }
75 }
76}
77
79 int (*cartesian_generator)(int L, int *cart_list)) {
80 // #pragma omp critical
81 {
82 libgrpp_params.cartesian_generator = cartesian_generator;
83 }
84}
85
86static int cartesian_generator_dirac(int L, int *cart_list) {
87 int count = 0;
88 int n_cart = (L + 1) * (L + 2) / 2;
89
90 for (int r = L; r >= 0; r--) {
91 for (int s = L; s >= 0; s--) {
92 for (int t = L; t >= 0; t--) {
93 if (r + s + t == L) {
94 cart_list[3 * count + 0] = r;
95 cart_list[3 * count + 1] = s;
96 cart_list[3 * count + 2] = t;
97 count++;
98 }
99 }
100 }
101 }
102
103 return n_cart;
104}
105
106static int cartesian_generator_turbomole(int L, int *cart_list) {
107 int count = 0;
108 int n_cart = (L + 1) * (L + 2) / 2;
109
110 for (int r = L; r >= 0; r--) {
111 for (int s = L - r; s >= 0; s--) {
112 int t = L - r - s;
113
114 cart_list[3 * count + 0] = r;
115 cart_list[3 * count + 1] = s;
116 cart_list[3 * count + 2] = t;
117
118 count++;
119 }
120 }
121
122 return n_cart;
123}
void libgrpp_set_angular_screening_tolerance(double tolerance)
libgrpp_parameters_t libgrpp_params
static int cartesian_generator_turbomole(int L, int *cart_list)
static int cartesian_generator_dirac(int L, int *cart_list)
void libgrpp_set_radial_tolerance(double tolerance)
void libgrpp_set_cartesian_generator(int(*cartesian_generator)(int L, int *cart_list))
void libgrpp_set_cartesian_order(int order)
void libgrpp_set_default_parameters()
void libgrpp_set_modified_bessel_tolerance(double tolerance)
@ LIBGRPP_CART_ORDER_TURBOMOLE
@ LIBGRPP_CART_ORDER_DIRAC