LCOV - code coverage report
Current view: top level - src/grpp - libgrpp.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:07c9450) Lines: 0.0 % 15 0
Test Date: 2025-12-13 06:52:47 Functions: 0.0 % 1 0

            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              : 
      15              : MODULE libgrpp
      16              :    USE ISO_C_BINDING,                   ONLY: C_DOUBLE,&
      17              :                                               C_INT32_T
      18              : 
      19              :    INTEGER(4), PARAMETER :: LIBGRPP_CART_ORDER_DIRAC = 0
      20              :    INTEGER(4), PARAMETER :: LIBGRPP_CART_ORDER_TURBOMOLE = 1
      21              : 
      22              :    INTEGER(4), PARAMETER :: LIBGRPP_NUCLEAR_MODEL_POINT_CHARGE = 0
      23              :    INTEGER(4), PARAMETER :: LIBGRPP_NUCLEAR_MODEL_CHARGED_BALL = 1
      24              :    INTEGER(4), PARAMETER :: LIBGRPP_NUCLEAR_MODEL_GAUSSIAN = 2
      25              :    INTEGER(4), PARAMETER :: LIBGRPP_NUCLEAR_MODEL_FERMI = 3
      26              :    INTEGER(4), PARAMETER :: LIBGRPP_NUCLEAR_MODEL_FERMI_BUBBLE = 4
      27              :    INTEGER(4), PARAMETER :: LIBGRPP_NUCLEAR_MODEL_POINT_CHARGE_NUMERICAL = 5
      28              : 
      29              :    INTERFACE
      30              : 
      31              :       SUBROUTINE libgrpp_init()
      32              :          ! no arguments
      33              :       END SUBROUTINE libgrpp_init
      34              : 
      35              :       SUBROUTINE libgrpp_finalize()
      36              :          ! no arguments
      37              :       END SUBROUTINE libgrpp_finalize
      38              : 
      39              :       SUBROUTINE libgrpp_set_default_parameters()
      40              :          ! no arguments
      41              :       END SUBROUTINE libgrpp_set_default_parameters
      42              : 
      43              :       SUBROUTINE libgrpp_set_radial_tolerance(tolerance)
      44              :       REAL(8), INTENT(in)                                :: tolerance
      45              : 
      46              :       END SUBROUTINE libgrpp_set_radial_tolerance
      47              : 
      48              :       SUBROUTINE libgrpp_set_angular_screening_tolerance(tolerance)
      49              :       REAL(8), INTENT(in)                                :: tolerance
      50              : 
      51              :       END SUBROUTINE libgrpp_set_angular_screening_tolerance
      52              : 
      53              :       SUBROUTINE libgrpp_set_modified_bessel_tolerance(tolerance)
      54              :       REAL(8), INTENT(in)                                :: tolerance
      55              : 
      56              :       END SUBROUTINE libgrpp_set_modified_bessel_tolerance
      57              : 
      58              :       SUBROUTINE libgrpp_set_cartesian_order(order)
      59              :       INTEGER(4), INTENT(in)                             :: order
      60              : 
      61              :       END SUBROUTINE libgrpp_set_cartesian_order
      62              : 
      63              :       SUBROUTINE libgrpp_type1_integrals( &
      64              :          origin_A, L_A, num_primitives_A, coeffs_A, alpha_A, &
      65              :          origin_B, L_B, num_primitives_B, coeffs_B, alpha_B, &
      66              :          rpp_origin, rpp_num_primitives, rpp_powers, rpp_coeffs, rpp_alpha, &
      67              :          matrix &
      68              :          )
      69              :          ! shell centered on atom A
      70              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_A
      71              :       INTEGER(4), INTENT(in)                             :: L_A, num_primitives_A
      72              :       REAL(8), INTENT(in)                                :: coeffs_A(*), alpha_A(*)
      73              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_B
      74              :       INTEGER(4), INTENT(in)                             :: L_B, num_primitives_B
      75              :       REAL(8), INTENT(in)                                :: coeffs_B(*), alpha_B(*)
      76              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_origin
      77              :       INTEGER(4), DIMENSION(*), INTENT(in)               :: rpp_num_primitives, rpp_powers
      78              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_coeffs, rpp_alpha
      79              :       REAL(8), DIMENSION(*), INTENT(out)                 :: matrix
      80              : 
      81              : ! shell centered on atom B
      82              : ! pseudopotential expansion
      83              : ! output: matrix with PP integrals
      84              : 
      85              :       END SUBROUTINE libgrpp_type1_integrals
      86              : 
      87              :       SUBROUTINE libgrpp_type2_integrals( &
      88              :          origin_A, L_A, num_primitives_A, coeffs_A, alpha_A, &
      89              :          origin_B, L_B, num_primitives_B, coeffs_B, alpha_B, &
      90              :          rpp_origin, rpp_ang_momentum, rpp_num_primitives, rpp_powers, rpp_coeffs, rpp_alpha, &
      91              :          matrix &
      92              :          )
      93              :          ! shell centered on atom A
      94              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_A
      95              :       INTEGER(4), INTENT(in)                             :: L_A, num_primitives_A
      96              :       REAL(8), INTENT(in)                                :: coeffs_A(*), alpha_A(*)
      97              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_B
      98              :       INTEGER(4), INTENT(in)                             :: L_B, num_primitives_B
      99              :       REAL(8), INTENT(in)                                :: coeffs_B(*), alpha_B(*)
     100              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_origin
     101              :       INTEGER(4), INTENT(in)                             :: rpp_ang_momentum
     102              :       INTEGER(4), DIMENSION(*), INTENT(in)               :: rpp_num_primitives, rpp_powers
     103              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_coeffs, rpp_alpha
     104              :       REAL(8), DIMENSION(*), INTENT(out)                 :: matrix
     105              : 
     106              : ! shell centered on atom B
     107              : ! pseudopotential expansion
     108              : ! output: matrix with PP integrals
     109              : 
     110              :       END SUBROUTINE libgrpp_type2_integrals
     111              : 
     112              :       SUBROUTINE libgrpp_spin_orbit_integrals( &
     113              :          origin_A, L_A, num_primitives_A, coeffs_A, alpha_A, &
     114              :          origin_B, L_B, num_primitives_B, coeffs_B, alpha_B, &
     115              :          rpp_origin, rpp_ang_momentum, rpp_num_primitives, rpp_powers, rpp_coeffs, rpp_alpha, &
     116              :          so_x_matrix, so_y_matrix, so_z_matrix &
     117              :          )
     118              :          ! shell centered on atom A
     119              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_A
     120              :       INTEGER(4), INTENT(in)                             :: L_A, num_primitives_A
     121              :       REAL(8), INTENT(in)                                :: coeffs_A(*), alpha_A(*)
     122              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_B
     123              :       INTEGER(4), INTENT(in)                             :: L_B, num_primitives_B
     124              :       REAL(8), INTENT(in)                                :: coeffs_B(*), alpha_B(*)
     125              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_origin
     126              :       INTEGER(4), INTENT(in)                             :: rpp_ang_momentum
     127              :       INTEGER(4), DIMENSION(*), INTENT(in)               :: rpp_num_primitives, rpp_powers
     128              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_coeffs, rpp_alpha
     129              :       REAL(8), DIMENSION(*), INTENT(out)                 :: so_x_matrix, so_y_matrix, so_z_matrix
     130              : 
     131              : ! shell centered on atom B
     132              : ! pseudopotential expansion
     133              : ! output: matrices with PP integrals
     134              : 
     135              :       END SUBROUTINE libgrpp_spin_orbit_integrals
     136              : 
     137              :       SUBROUTINE libgrpp_type1_integrals_gradient( &
     138              :          origin_A, L_A, num_primitives_A, coeffs_A, alpha_A, &
     139              :          origin_B, L_B, num_primitives_B, coeffs_B, alpha_B, &
     140              :          rpp_origin, rpp_num_primitives, rpp_powers, rpp_coeffs, rpp_alpha, &
     141              :          point_3d, grad_arep_x, grad_arep_y, grad_arep_z &
     142              :          )
     143              :          ! shell centered on atom A
     144              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_A
     145              :       INTEGER(4), INTENT(in)                             :: L_A, num_primitives_A
     146              :       REAL(8), INTENT(in)                                :: coeffs_A(*), alpha_A(*)
     147              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_B
     148              :       INTEGER(4), INTENT(in)                             :: L_B, num_primitives_B
     149              :       REAL(8), INTENT(in)                                :: coeffs_B(*), alpha_B(*)
     150              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_origin
     151              :       INTEGER(4), DIMENSION(*), INTENT(in)               :: rpp_num_primitives, rpp_powers
     152              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_coeffs, rpp_alpha, point_3d
     153              :       REAL(8), DIMENSION(*), INTENT(out)                 :: grad_arep_x, grad_arep_y, grad_arep_z
     154              : 
     155              : ! shell centered on atom B
     156              : ! pseudopotential expansion
     157              : ! differentiation wrt the 3d point (x,y,z)
     158              : ! output: matrices d<Int>/dx, d<Int>/dy, d<Int>/dZ
     159              : 
     160              :       END SUBROUTINE libgrpp_type1_integrals_gradient
     161              : 
     162              :       SUBROUTINE libgrpp_type2_integrals_gradient( &
     163              :          origin_A, L_A, num_primitives_A, coeffs_A, alpha_A, &
     164              :          origin_B, L_B, num_primitives_B, coeffs_B, alpha_B, &
     165              :          rpp_origin, rpp_ang_momentum, rpp_num_primitives, rpp_powers, rpp_coeffs, rpp_alpha, &
     166              :          point_3d, grad_arep_x, grad_arep_y, grad_arep_z &
     167              :          )
     168              :          ! shell centered on atom A
     169              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_A
     170              :       INTEGER(4), INTENT(in)                             :: L_A, num_primitives_A
     171              :       REAL(8), INTENT(in)                                :: coeffs_A(*), alpha_A(*)
     172              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_B
     173              :       INTEGER(4), INTENT(in)                             :: L_B, num_primitives_B
     174              :       REAL(8), INTENT(in)                                :: coeffs_B(*), alpha_B(*)
     175              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_origin
     176              :       INTEGER(4), INTENT(in)                             :: rpp_ang_momentum
     177              :       INTEGER(4), DIMENSION(*), INTENT(in)               :: rpp_num_primitives, rpp_powers
     178              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_coeffs, rpp_alpha, point_3d
     179              :       REAL(8), DIMENSION(*), INTENT(out)                 :: grad_arep_x, grad_arep_y, grad_arep_z
     180              : 
     181              : ! shell centered on atom B
     182              : ! pseudopotential expansion
     183              : ! differentiation wrt the 3d point (x,y,z)
     184              : ! output: matrices d<Int>/dx, d<Int>/dy, d<Int>/dZ
     185              : 
     186              :       END SUBROUTINE libgrpp_type2_integrals_gradient
     187              : 
     188              :       SUBROUTINE libgrpp_spin_orbit_integrals_gradient( &
     189              :          origin_A, L_A, num_primitives_A, coeffs_A, alpha_A, &
     190              :          origin_B, L_B, num_primitives_B, coeffs_B, alpha_B, &
     191              :          rpp_origin, rpp_ang_momentum, rpp_num_primitives, rpp_powers, rpp_coeffs, rpp_alpha, &
     192              :          point_3d, grad_sox_x, grad_sox_y, grad_sox_z, &
     193              :          grad_soy_x, grad_soy_y, grad_soy_z, &
     194              :          grad_soz_x, grad_soz_y, grad_soz_z &
     195              :          )
     196              :          ! shell centered on atom A
     197              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_A
     198              :       INTEGER(4), INTENT(in)                             :: L_A, num_primitives_A
     199              :       REAL(8), INTENT(in)                                :: coeffs_A(*), alpha_A(*)
     200              :       REAL(8), DIMENSION(*), INTENT(in)                  :: origin_B
     201              :       INTEGER(4), INTENT(in)                             :: L_B, num_primitives_B
     202              :       REAL(8), INTENT(in)                                :: coeffs_B(*), alpha_B(*)
     203              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_origin
     204              :       INTEGER(4), INTENT(in)                             :: rpp_ang_momentum
     205              :       INTEGER(4), DIMENSION(*), INTENT(in)               :: rpp_num_primitives, rpp_powers
     206              :       REAL(8), DIMENSION(*), INTENT(in)                  :: rpp_coeffs, rpp_alpha, point_3d
     207              :       REAL(8), DIMENSION(*), INTENT(out)                 :: grad_sox_x, grad_sox_y, grad_sox_z, &
     208              :                                                             grad_soy_x, grad_soy_y, grad_soy_z, &
     209              :                                                             grad_soz_x, grad_soz_y, grad_soz_z
     210              : 
     211              : ! shell centered on atom B
     212              : ! pseudopotential expansion
     213              : ! differentiation wrt the 3d point (x,y,z)
     214              : ! output: matrices d<SO_x>/dx, d<SO_x>/dy, d<SO_x>/dZ
     215              : ! output: matrices d<SO_y>/dx, d<SO_y>/dy, d<SO_y>/dZ
     216              : ! output: matrices d<SO_z>/dx, d<SO_z>/dy, d<SO_z>/dZ
     217              : 
     218              :       END SUBROUTINE libgrpp_spin_orbit_integrals_gradient
     219              : 
     220              :    END INTERFACE
     221              : 
     222              : CONTAINS
     223              : 
     224              : ! **************************************************************************************************
     225              : !> \brief ...
     226              : !> \param origin_A ...
     227              : !> \param L_A ...
     228              : !> \param num_primitives_A ...
     229              : !> \param coeffs_A ...
     230              : !> \param alpha_A ...
     231              : !> \param origin_B ...
     232              : !> \param L_B ...
     233              : !> \param num_primitives_B ...
     234              : !> \param coeffs_B ...
     235              : !> \param alpha_B ...
     236              : !> \param rpp_origin ...
     237              : !> \param num_oc_shells ...
     238              : !> \param oc_shells_L ...
     239              : !> \param oc_shells_J ...
     240              : !> \param rpp_num_primitives ...
     241              : !> \param rpp_powers ...
     242              : !> \param rpp_coeffs ...
     243              : !> \param rpp_alpha ...
     244              : !> \param oc_shells_num_primitives ...
     245              : !> \param oc_shells_coeffs ...
     246              : !> \param oc_shells_alpha ...
     247              : !> \param arep_matrix ...
     248              : !> \param so_x_matrix ...
     249              : !> \param so_y_matrix ...
     250              : !> \param so_z_matrix ...
     251              : ! **************************************************************************************************
     252            0 :    SUBROUTINE libgrpp_outercore_potential_integrals( &
     253              :       origin_A, L_A, num_primitives_A, coeffs_A, alpha_A, &
     254              :       origin_B, L_B, num_primitives_B, coeffs_B, alpha_B, &
     255              :       rpp_origin, num_oc_shells, &
     256            0 :       oc_shells_L, oc_shells_J, rpp_num_primitives, rpp_powers, rpp_coeffs, rpp_alpha, &
     257            0 :       oc_shells_num_primitives, oc_shells_coeffs, oc_shells_alpha, &
     258              :       arep_matrix, so_x_matrix, so_y_matrix, so_z_matrix &
     259              :       )
     260              : 
     261              :       ! shell centered on atom A
     262              :       REAL(8), INTENT(in)                                :: origin_A(*)
     263              :       INTEGER(4), INTENT(in)                             :: L_A, num_primitives_A
     264              :       REAL(8), INTENT(in)                                :: coeffs_A(*), alpha_A(*), origin_B(*)
     265              :       INTEGER(4), INTENT(in)                             :: L_B, num_primitives_B
     266              :       REAL(8), INTENT(in)                                :: coeffs_B(*), alpha_B(*), rpp_origin(*)
     267              :       INTEGER(4)                                         :: num_oc_shells
     268              :       INTEGER(4), INTENT(in)                             :: oc_shells_L(:), oc_shells_J(:), &
     269              :                                                             rpp_num_primitives(:), rpp_powers(:, :)
     270              :       REAL(8), INTENT(in)                                :: rpp_coeffs(:, :), rpp_alpha(:, :)
     271              :       INTEGER(4)                                         :: oc_shells_num_primitives(:)
     272              :       REAL(8)                                            :: oc_shells_coeffs(:, :), &
     273              :                                                             oc_shells_alpha(:, :)
     274              :       REAL(8), INTENT(out)                               :: arep_matrix(*), so_x_matrix(*), &
     275              :                                                             so_y_matrix(*), so_z_matrix(*)
     276              : 
     277              :       INTEGER                                            :: i, j, ncart1, ncart2
     278              :       INTERFACE
     279              :          SUBROUTINE libgrpp_outercore_potential_integrals_part_1( &
     280              :             origin_A, L_A, num_primitives_A, coeffs_A, alpha_A, &
     281              :             origin_B, L_B, num_primitives_B, coeffs_B, alpha_B, &
     282              :             pot_origin, pot_L, pot_J, pot_num_primitives, pot_powers, pot_coeffs, pot_alpha, &
     283              :             oc_shell_num_primitives, oc_shell_coeffs, oc_shell_alpha, &
     284              :             arep_matrix, so_x_matrix, so_y_matrix, so_z_matrix) &
     285              :             BIND(C, name="libgrpp_outercore_potential_integrals_part_1_")
     286              :             IMPORT :: C_INT32_T, C_DOUBLE
     287              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: origin_A
     288              :             INTEGER(kind=C_INT32_T)                  :: L_A
     289              :             INTEGER(kind=C_INT32_T)                  :: num_primitives_A
     290              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: coeffs_A
     291              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: alpha_A
     292              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: origin_B
     293              :             INTEGER(kind=C_INT32_T)                  :: L_B
     294              :             INTEGER(kind=C_INT32_T)                  :: num_primitives_B
     295              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: coeffs_B
     296              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: alpha_B
     297              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: pot_origin
     298              :             INTEGER(kind=C_INT32_T)                  :: pot_L
     299              :             INTEGER(kind=C_INT32_T)                  :: pot_J
     300              :             INTEGER(kind=C_INT32_T)                  :: pot_num_primitives
     301              :             INTEGER(kind=C_INT32_T), DIMENSION(*)    :: pot_powers
     302              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: pot_coeffs
     303              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: pot_alpha
     304              :             INTEGER(kind=C_INT32_T)                  :: oc_shell_num_primitives
     305              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: oc_shell_coeffs
     306              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: oc_shell_alpha
     307              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: arep_matrix
     308              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: so_x_matrix
     309              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: so_y_matrix
     310              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: so_z_matrix
     311              :          END SUBROUTINE libgrpp_outercore_potential_integrals_part_1
     312              :       END INTERFACE
     313              :       INTERFACE
     314              :          SUBROUTINE libgrpp_outercore_potential_integrals_part_2( &
     315              :             origin_A, L_A, num_primitives_A, coeffs_A, alpha_A, &
     316              :             origin_B, L_B, num_primitives_B, coeffs_B, alpha_B, &
     317              :             pot_origin, oc_shell_1_L, oc_shell_1_J, &
     318              :             pot1_num_primitives, pot1_powers, pot1_coeffs, pot1_alpha, &
     319              :             oc_shell_1_num_primitives, oc_shell_1_coeffs, oc_shell_1_alpha, &
     320              :             oc_shell_2_L, oc_shell_2_J, pot2_num_primitives, pot2_powers, pot2_coeffs, &
     321              :             pot2_alpha, oc_shell_2_num_primitives, oc_shell_2_coeffs, oc_shell_2_alpha, &
     322              :             arep_matrix, so_x_matrix, so_y_matrix, so_z_matrix) &
     323              :             BIND(C, name="libgrpp_outercore_potential_integrals_part_2_")
     324              :             IMPORT :: C_INT32_T, C_DOUBLE
     325              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: origin_A
     326              :             INTEGER(kind=C_INT32_T)                  :: L_A
     327              :             INTEGER(kind=C_INT32_T)                  :: num_primitives_A
     328              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: coeffs_A
     329              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: alpha_A
     330              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: origin_B
     331              :             INTEGER(kind=C_INT32_T)                  :: L_B
     332              :             INTEGER(kind=C_INT32_T)                  :: num_primitives_B
     333              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: coeffs_B
     334              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: alpha_B
     335              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: pot_origin
     336              :             INTEGER(kind=C_INT32_T)                  :: oc_shell_1_L
     337              :             INTEGER(kind=C_INT32_T)                  :: oc_shell_1_J
     338              :             INTEGER(kind=C_INT32_T)                  :: pot1_num_primitives
     339              :             INTEGER(kind=C_INT32_T), DIMENSION(*)    :: pot1_powers
     340              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: pot1_coeffs
     341              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: pot1_alpha
     342              :             INTEGER(kind=C_INT32_T)                  :: oc_shell_1_num_primitives
     343              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: oc_shell_1_coeffs
     344              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: oc_shell_1_alpha
     345              :             INTEGER(kind=C_INT32_T)                  :: oc_shell_2_L
     346              :             INTEGER(kind=C_INT32_T)                  :: oc_shell_2_J
     347              :             INTEGER(kind=C_INT32_T)                  :: pot2_num_primitives
     348              :             INTEGER(kind=C_INT32_T), DIMENSION(*)    :: pot2_powers
     349              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: pot2_coeffs
     350              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: pot2_alpha
     351              :             INTEGER(kind=C_INT32_T)                  :: oc_shell_2_num_primitives
     352              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: oc_shell_2_coeffs
     353              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: oc_shell_2_alpha
     354              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: arep_matrix
     355              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: so_x_matrix
     356              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: so_y_matrix
     357              :             REAL(kind=C_DOUBLE), DIMENSION(*)        :: so_z_matrix
     358              :          END SUBROUTINE libgrpp_outercore_potential_integrals_part_2
     359              :       END INTERFACE
     360              : 
     361              : ! shell centered on atom B
     362              : ! pseudopotential expansion
     363              : ! outercore shells
     364              : ! output: matrices with PP integrals
     365              : ! local variables
     366              : 
     367            0 :       ncart1 = (L_A + 1)*(L_A + 2)/2
     368            0 :       ncart2 = (L_B + 1)*(L_B + 2)/2
     369              : 
     370            0 :       arep_matrix(1:ncart1*ncart2) = 0.0d0
     371            0 :       so_x_matrix(1:ncart1*ncart2) = 0.0d0
     372            0 :       so_y_matrix(1:ncart1*ncart2) = 0.0d0
     373            0 :       so_z_matrix(1:ncart1*ncart2) = 0.0d0
     374              : 
     375              :       ! the first non-local term:
     376              :       ! \sum_{nlj} U*|nlj><nlj| + |nlj><nlj|*U
     377            0 :       DO i = 1, num_oc_shells
     378              :          CALL libgrpp_outercore_potential_integrals_part_1( &
     379              :             origin_A, L_A, num_primitives_A, coeffs_A, alpha_A, &
     380              :             origin_B, L_B, num_primitives_B, coeffs_B, alpha_B, &
     381              :             rpp_origin, oc_shells_L(i), oc_shells_J(i), &
     382              :             rpp_num_primitives(i), rpp_powers(i, :), rpp_coeffs(i, :), rpp_alpha(i, :), &
     383              :             oc_shells_num_primitives(i), oc_shells_coeffs(i, :), oc_shells_alpha(i, :), &
     384              :             arep_matrix, so_x_matrix, so_y_matrix, so_z_matrix &
     385            0 :             )
     386              :       END DO
     387              : 
     388              :       ! the second non-local term:
     389              :       ! \sum_{nlj,n'lj} |nlj><nlj| U |n'lj><n'lj|
     390            0 :       DO i = 1, num_oc_shells
     391            0 :          DO j = 1, num_oc_shells
     392              : 
     393              :             CALL libgrpp_outercore_potential_integrals_part_2( &
     394              :                origin_A, L_A, num_primitives_A, coeffs_A, alpha_A, &
     395              :                origin_B, L_B, num_primitives_B, coeffs_B, alpha_B, &
     396              :                rpp_origin, &
     397              :                oc_shells_L(i), oc_shells_J(i), &
     398              :                rpp_num_primitives(i), rpp_powers(i, :), rpp_coeffs(i, :), rpp_alpha(i, :), &
     399              :                oc_shells_num_primitives(i), oc_shells_coeffs(i, :), oc_shells_alpha(i, :), &
     400              :                oc_shells_L(j), oc_shells_J(j), &
     401              :                rpp_num_primitives(j), rpp_powers(j, :), rpp_coeffs(j, :), rpp_alpha(j, :), &
     402              :                oc_shells_num_primitives(j), oc_shells_coeffs(j, :), oc_shells_alpha(j, :), &
     403              :                arep_matrix, so_x_matrix, so_y_matrix, so_z_matrix &
     404            0 :                )
     405              : 
     406              :          END DO
     407              :       END DO
     408              : 
     409            0 :    END SUBROUTINE libgrpp_outercore_potential_integrals
     410              : END MODULE libgrpp
     411              : 
        

Generated by: LCOV version 2.0-1