LCOV - code coverage report
Current view: top level - src/grpp - grpp_utils.c (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:936074a) Lines: 37.1 % 35 13
Test Date: 2025-12-04 06:27:48 Functions: 50.0 % 10 5

            Line data    Source code
       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 <math.h>
      15              : #include <stdlib.h>
      16              : 
      17              : #include "grpp_utils.h"
      18              : 
      19      9088126 : inline int int_max2(int x, int y) { return (x > y) ? x : y; }
      20              : 
      21       194176 : inline int int_max3(int x, int y, int z) { return int_max2(int_max2(x, y), z); }
      22              : 
      23      1202574 : double *alloc_zeros_1d(int n) { return (double *)calloc(n, sizeof(double)); }
      24              : 
      25       469812 : double **alloc_zeros_2d(int n, int m) {
      26       469812 :   double **array = (double **)calloc(n, sizeof(double *));
      27              : 
      28      2088882 :   for (int i = 0; i < n; i++) {
      29      1619070 :     array[i] = (double *)calloc(m, sizeof(double));
      30              :   }
      31              : 
      32       469812 :   return array;
      33              : }
      34              : 
      35       469812 : void free_2d(double **array, int n) {
      36      2088882 :   for (int i = 0; i < n; i++) {
      37      1619070 :     free(array[i]);
      38              :   }
      39       469812 :   free(array);
      40       469812 : }
      41              : 
      42              : /*
      43              :  * constant times a vector plus a vector:
      44              :  * y = a * x + y
      45              :  */
      46            0 : void libgrpp_daxpy(int n, double a, double *x, double *y) {
      47            0 :   for (int i = 0; i < n; i++) {
      48            0 :     y[i] += a * x[i];
      49              :   }
      50            0 : }
      51              : 
      52              : /*
      53              :  * naive matrix multiplication
      54              :  */
      55            0 : void libgrpp_multiply_matrices(int M, int N, int K, double *A, double *B,
      56              :                                double *C) {
      57            0 :   for (int i = 0; i < M; i++) {
      58            0 :     for (int j = 0; j < N; j++) {
      59              :       double sum = 0.0;
      60            0 :       for (int k = 0; k < K; k++) {
      61            0 :         sum += A[i * K + k] * B[k * N + j];
      62              :       }
      63            0 :       C[i * N + j] += sum;
      64              :     }
      65              :   }
      66            0 : }
      67              : 
      68            0 : double distance_squared(double *A, double *B) {
      69            0 :   double dx = A[0] - B[0];
      70            0 :   double dy = A[1] - B[1];
      71            0 :   double dz = A[2] - B[2];
      72            0 :   return dx * dx + dy * dy + dz * dz;
      73              : }
      74              : 
      75            0 : double distance(double *A, double *B) { return sqrt(distance_squared(A, B)); }
      76              : 
      77              : /**
      78              :  * Checks if two 3d points coincide with each other.
      79              :  */
      80            0 : int points_are_equal(double *a, double *b) {
      81            0 :   double const thresh = 1e-12;
      82              : 
      83            0 :   if (fabs(a[0] - b[0]) < thresh && fabs(a[1] - b[1]) < thresh &&
      84            0 :       fabs(a[2] - b[2]) < thresh) {
      85            0 :     return 1;
      86              :   }
      87              : 
      88              :   return 0;
      89              : }
        

Generated by: LCOV version 2.0-1