Loading [MathJax]/extensions/tex2jax.js
 (git:aabdcc8)
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros
grpp_parameters.c
Go to the documentation of this file.
1/*----------------------------------------------------------------------------*/
2/* CP2K: A general program to perform molecular dynamics simulations */
3/* Copyright 2000-2025 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 { libgrpp_params.radial_tolerance = tolerance; }
46}
47
49 // #pragma omp critical
51}
52
54 // #pragma omp critical
56}
57
59 // #pragma omp critical
60 {
61 assert(order == LIBGRPP_CART_ORDER_DIRAC ||
63
64 if (order == LIBGRPP_CART_ORDER_DIRAC) {
66 } else if (order == LIBGRPP_CART_ORDER_TURBOMOLE) {
68 }
69 }
70}
71
73 int (*cartesian_generator)(int L, int *cart_list)) {
74 // #pragma omp critical
75 { libgrpp_params.cartesian_generator = cartesian_generator; }
76}
77
78static int cartesian_generator_dirac(int L, int *cart_list) {
79 int count = 0;
80 int n_cart = (L + 1) * (L + 2) / 2;
81
82 for (int r = L; r >= 0; r--) {
83 for (int s = L; s >= 0; s--) {
84 for (int t = L; t >= 0; t--) {
85 if (r + s + t == L) {
86 cart_list[3 * count + 0] = r;
87 cart_list[3 * count + 1] = s;
88 cart_list[3 * count + 2] = t;
89 count++;
90 }
91 }
92 }
93 }
94
95 return n_cart;
96}
97
98static int cartesian_generator_turbomole(int L, int *cart_list) {
99 int count = 0;
100 int n_cart = (L + 1) * (L + 2) / 2;
101
102 for (int r = L; r >= 0; r--) {
103 for (int s = L - r; s >= 0; s--) {
104 int t = L - r - s;
105
106 cart_list[3 * count + 0] = r;
107 cart_list[3 * count + 1] = s;
108 cart_list[3 * count + 2] = t;
109
110 count++;
111 }
112 }
113
114 return n_cart;
115}
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
int(* cartesian_generator)(int L, int *cart_list)