LCOV - code coverage report
Current view: top level - src - fist_nonbond_env_types.F (source / functions) Coverage Total Hit
Test: CP2K Regtests (git:71c3ab0) Lines: 96.4 % 220 212
Test Date: 2026-07-25 06:35:44 Functions: 41.7 % 12 5

            Line data    Source code
       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: GPL-2.0-or-later                                                      !
       6              : !--------------------------------------------------------------------------------------------------!
       7              : 
       8              : ! **************************************************************************************************
       9              : !> \par History
      10              : !>      none
      11              : !> \author HAF
      12              : ! **************************************************************************************************
      13              : MODULE fist_nonbond_env_types
      14              :    USE ace_wrapper,                     ONLY: ace_model_release,&
      15              :                                               ace_model_type
      16              :    USE atomic_kind_types,               ONLY: atomic_kind_type
      17              :    USE cell_types,                      ONLY: cell_release,&
      18              :                                               cell_type
      19              :    USE deepmd_wrapper,                  ONLY: deepmd_model_release,&
      20              :                                               deepmd_model_type
      21              :    USE fist_neighbor_list_types,        ONLY: fist_neighbor_deallocate,&
      22              :                                               fist_neighbor_type
      23              :    USE kinds,                           ONLY: default_string_length,&
      24              :                                               dp
      25              :    USE pair_potential_types,            ONLY: &
      26              :         ace_type, allegro_type, gal21_type, gal_type, mace_type, nequip_type, &
      27              :         pair_potential_pp_release, pair_potential_pp_type, siepmann_type, tersoff_type
      28              :    USE torch_api,                       ONLY: torch_model_release,&
      29              :                                               torch_model_type
      30              : #include "./base/base_uses.f90"
      31              : 
      32              :    IMPLICIT NONE
      33              :    PRIVATE
      34              : 
      35              :    CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'fist_nonbond_env_types'
      36              :    PUBLIC :: fist_nonbond_env_type, fist_nonbond_env_set, &
      37              :              fist_nonbond_env_get, fist_nonbond_env_create, &
      38              :              fist_nonbond_env_release, pos_type, eam_type, &
      39              :              nequip_data_type, &
      40              :              deepmd_data_type, ace_data_type
      41              : 
      42              : ! **************************************************************************************************
      43              :    TYPE pos_type
      44              :       REAL(KIND=dp) :: r(3) = 0.0_dp
      45              :    END TYPE pos_type
      46              : 
      47              :    TYPE eam_type
      48              :       REAL(KIND=dp) :: f_embed = 0.0_dp
      49              :       REAL(KIND=dp) :: rho = 0.0_dp
      50              :    END TYPE eam_type
      51              : 
      52              :    TYPE nequip_data_type
      53              :       INTEGER, POINTER        :: use_indices(:) => NULL()
      54              :       REAL(KIND=dp), POINTER  :: force(:, :) => NULL()
      55              :       REAL(KIND=dp)           :: virial(3, 3) = 0.0_dp
      56              :       TYPE(torch_model_type)  :: model
      57              :    END TYPE nequip_data_type
      58              : 
      59              :    TYPE deepmd_data_type
      60              :       INTEGER, POINTER        :: use_indices(:) => NULL()
      61              :       REAL(KIND=dp), POINTER  :: force(:, :) => NULL()
      62              :       REAL(KIND=dp)           :: virial(3, 3) = 0.0_dp
      63              :       TYPE(deepmd_model_type) :: model
      64              :    END TYPE deepmd_data_type
      65              : 
      66              :    TYPE ace_data_type
      67              :       INTEGER, ALLOCATABLE    :: use_indices(:)
      68              :       INTEGER, ALLOCATABLE    :: inverse_index_map(:)
      69              :       INTEGER                 :: natom = 0
      70              :       INTEGER                 :: nghost = 0
      71              :       INTEGER                 :: refupdate = 0
      72              :       INTEGER                 :: nei = 0
      73              :       INTEGER, ALLOCATABLE    :: uctype(:)
      74              :       INTEGER, ALLOCATABLE    :: attype(:)
      75              :       INTEGER, ALLOCATABLE    :: origin(:)
      76              :       INTEGER, ALLOCATABLE    :: shift(:, :)
      77              :       INTEGER, ALLOCATABLE    :: neiat(:)
      78              :       INTEGER, ALLOCATABLE    :: nlist(:)
      79              :       REAL(KIND=dp), ALLOCATABLE  :: force(:, :)
      80              :       REAL(KIND=dp), ALLOCATABLE  :: atpos(:, :)
      81              :       REAL(KIND=dp)           :: virial(3, 3) = 0.0_dp
      82              :       TYPE(ace_model_type)    :: model
      83              :    END TYPE ace_data_type
      84              : 
      85              : ! **************************************************************************************************
      86              :    TYPE fist_nonbond_env_type
      87              :       INTEGER                                    :: natom_types = -1
      88              :       INTEGER                                    :: counter = -1
      89              :       INTEGER                                    :: last_update = -1
      90              :       INTEGER                                    :: num_update = -1
      91              :       LOGICAL                                    :: do_nonbonded = .FALSE.
      92              :       LOGICAL                                    :: do_electrostatics = .FALSE.
      93              :       LOGICAL                                    :: shift_cutoff = .FALSE.
      94              :       CHARACTER(len=default_string_length)       :: unit_type = ""
      95              :       REAL(KIND=dp)                              :: lup = 0.0_dp
      96              :       REAL(KIND=dp)                              :: aup = 0.0_dp
      97              :       REAL(KIND=dp)                              :: ei_scale14 = 0.0_dp
      98              :       REAL(KIND=dp)                              :: vdw_scale14 = 0.0_dp
      99              :       REAL(KIND=dp)                              :: long_range_correction = 0.0_dp
     100              :       REAL(KIND=dp), DIMENSION(:, :), POINTER    :: rlist_cut => NULL()
     101              :       REAL(KIND=dp), DIMENSION(:, :), POINTER    :: rlist_lowsq => NULL()
     102              :       REAL(KIND=dp), DIMENSION(:, :), POINTER    :: ij_kind_full_fac => NULL()
     103              :       REAL(KIND=dp), DIMENSION(:), POINTER       :: charges => NULL()
     104              :       TYPE(fist_neighbor_type), POINTER          :: nonbonded => NULL()
     105              :       TYPE(pair_potential_pp_type), POINTER      :: potparm14 => NULL()
     106              :       TYPE(pair_potential_pp_type), POINTER      :: potparm => NULL()
     107              :       TYPE(cell_type), POINTER                   :: cell_last_update => NULL()
     108              :       TYPE(pos_type), DIMENSION(:), POINTER      :: r_last_update => NULL()
     109              :       TYPE(pos_type), DIMENSION(:), POINTER      :: r_last_update_pbc => NULL()
     110              :       TYPE(pos_type), DIMENSION(:), POINTER      :: rshell_last_update_pbc => NULL()
     111              :       TYPE(pos_type), DIMENSION(:), POINTER      :: rcore_last_update_pbc => NULL()
     112              :       TYPE(eam_type), DIMENSION(:), POINTER      :: eam_data => NULL()
     113              :       TYPE(deepmd_data_type), POINTER            :: deepmd_data => NULL()
     114              :       TYPE(ace_data_type), POINTER               :: ace_data => NULL()
     115              :       TYPE(nequip_data_type), POINTER    :: nequip_data => NULL()
     116              :    END TYPE fist_nonbond_env_type
     117              : 
     118              : CONTAINS
     119              : 
     120              : ! **************************************************************************************************
     121              : !> \brief sets a fist_nonbond_env
     122              : !> \param fist_nonbond_env the object to create
     123              : !> \param potparm14 ...
     124              : !> \param potparm ...
     125              : !> \param nonbonded ...
     126              : !> \param rlist_cut ...
     127              : !> \param rlist_lowsq ...
     128              : !> \param aup ...
     129              : !> \param lup ...
     130              : !> \param ei_scale14 ...
     131              : !> \param vdw_scale14 ...
     132              : !> \param shift_cutoff ...
     133              : !> \param do_electrostatics ...
     134              : !> \param r_last_update ...
     135              : !> \param r_last_update_pbc ...
     136              : !> \param rshell_last_update_pbc ...
     137              : !> \param rcore_last_update_pbc ...
     138              : !> \param cell_last_update ...
     139              : !> \param num_update ...
     140              : !> \param last_update ...
     141              : !> \param counter ...
     142              : !> \param natom_types ...
     143              : !> \param long_range_correction ...
     144              : !> \param ij_kind_full_fac ...
     145              : !> \param eam_data ...
     146              : !> \param nequip_data ...
     147              : !> \param deepmd_data ...
     148              : !> \param ace_data ...
     149              : !> \param charges ...
     150              : !> \par History
     151              : !>      12.2002 created [fawzi]
     152              : !> \author Fawzi Mohamed
     153              : ! **************************************************************************************************
     154       520153 :    SUBROUTINE fist_nonbond_env_get(fist_nonbond_env, potparm14, potparm, &
     155              :                                    nonbonded, rlist_cut, rlist_lowsq, aup, lup, ei_scale14, vdw_scale14, &
     156              :                                    shift_cutoff, do_electrostatics, r_last_update, r_last_update_pbc, rshell_last_update_pbc, &
     157              :                                    rcore_last_update_pbc, cell_last_update, num_update, last_update, &
     158              :                                    counter, natom_types, long_range_correction, ij_kind_full_fac, eam_data, &
     159              :                                    nequip_data, deepmd_data, ace_data, charges)
     160              : 
     161              :       TYPE(fist_nonbond_env_type), INTENT(IN)            :: fist_nonbond_env
     162              :       TYPE(pair_potential_pp_type), OPTIONAL, POINTER    :: potparm14, potparm
     163              :       TYPE(fist_neighbor_type), OPTIONAL, POINTER        :: nonbonded
     164              :       REAL(KIND=dp), DIMENSION(:, :), OPTIONAL, POINTER  :: rlist_cut, rlist_lowsq
     165              :       REAL(KIND=dp), OPTIONAL                            :: aup, lup, ei_scale14, vdw_scale14
     166              :       LOGICAL, INTENT(OUT), OPTIONAL                     :: shift_cutoff, do_electrostatics
     167              :       TYPE(pos_type), DIMENSION(:), OPTIONAL, POINTER    :: r_last_update, r_last_update_pbc, &
     168              :                                                             rshell_last_update_pbc, &
     169              :                                                             rcore_last_update_pbc
     170              :       TYPE(cell_type), OPTIONAL, POINTER                 :: cell_last_update
     171              :       INTEGER, OPTIONAL                                  :: num_update, last_update, counter, &
     172              :                                                             natom_types
     173              :       REAL(KIND=dp), OPTIONAL                            :: long_range_correction
     174              :       REAL(KIND=dp), DIMENSION(:, :), OPTIONAL, POINTER  :: ij_kind_full_fac
     175              :       TYPE(eam_type), DIMENSION(:), OPTIONAL, POINTER    :: eam_data
     176              :       TYPE(nequip_data_type), OPTIONAL, POINTER          :: nequip_data
     177              :       TYPE(deepmd_data_type), OPTIONAL, POINTER          :: deepmd_data
     178              :       TYPE(ace_data_type), OPTIONAL, POINTER             :: ace_data
     179              :       REAL(KIND=dp), DIMENSION(:), OPTIONAL, POINTER     :: charges
     180              : 
     181       520153 :       IF (PRESENT(charges)) charges => fist_nonbond_env%charges
     182       520153 :       IF (PRESENT(potparm14)) potparm14 => fist_nonbond_env%potparm14
     183       520153 :       IF (PRESENT(eam_data)) eam_data => fist_nonbond_env%eam_data
     184       520153 :       IF (PRESENT(nequip_data)) nequip_data => fist_nonbond_env%nequip_data
     185       520153 :       IF (PRESENT(deepmd_data)) deepmd_data => fist_nonbond_env%deepmd_data
     186       520153 :       IF (PRESENT(ace_data)) ace_data => fist_nonbond_env%ace_data
     187       520153 :       IF (PRESENT(potparm)) potparm => fist_nonbond_env%potparm
     188       520153 :       IF (PRESENT(rlist_cut)) rlist_cut => fist_nonbond_env%rlist_cut
     189       520153 :       IF (PRESENT(rlist_lowsq)) rlist_lowsq => fist_nonbond_env%rlist_lowsq
     190       520153 :       IF (PRESENT(ij_kind_full_fac)) ij_kind_full_fac => fist_nonbond_env%ij_kind_full_fac
     191       520153 :       IF (PRESENT(nonbonded)) nonbonded => fist_nonbond_env%nonbonded
     192       520153 :       IF (PRESENT(r_last_update)) THEN
     193       236996 :          r_last_update => fist_nonbond_env%r_last_update
     194              :       END IF
     195       520153 :       IF (PRESENT(r_last_update_pbc)) THEN
     196       381174 :          r_last_update_pbc => fist_nonbond_env%r_last_update_pbc
     197              :       END IF
     198       520153 :       IF (PRESENT(rshell_last_update_pbc)) THEN
     199       156120 :          rshell_last_update_pbc => fist_nonbond_env%rshell_last_update_pbc
     200              :       END IF
     201       520153 :       IF (PRESENT(rcore_last_update_pbc)) THEN
     202       156120 :          rcore_last_update_pbc => fist_nonbond_env%rcore_last_update_pbc
     203              :       END IF
     204       520153 :       IF (PRESENT(cell_last_update)) THEN
     205        78980 :          cell_last_update => fist_nonbond_env%cell_last_update
     206              :       END IF
     207       520153 :       IF (PRESENT(lup)) lup = fist_nonbond_env%lup
     208       520153 :       IF (PRESENT(aup)) aup = fist_nonbond_env%aup
     209       520153 :       IF (PRESENT(ei_scale14)) ei_scale14 = fist_nonbond_env%ei_scale14
     210       520153 :       IF (PRESENT(vdw_scale14)) vdw_scale14 = fist_nonbond_env%vdw_scale14
     211       520153 :       IF (PRESENT(shift_cutoff)) THEN
     212            0 :          shift_cutoff = fist_nonbond_env%shift_cutoff
     213              :       END IF
     214       520153 :       IF (PRESENT(do_electrostatics)) do_electrostatics = fist_nonbond_env%do_electrostatics
     215       520153 :       IF (PRESENT(natom_types)) natom_types = fist_nonbond_env%natom_types
     216       520153 :       IF (PRESENT(counter)) counter = fist_nonbond_env%counter
     217       520153 :       IF (PRESENT(last_update)) last_update = fist_nonbond_env%last_update
     218       520153 :       IF (PRESENT(num_update)) num_update = fist_nonbond_env%num_update
     219       520153 :       IF (PRESENT(long_range_correction)) THEN
     220            0 :          long_range_correction = fist_nonbond_env%long_range_correction
     221              :       END IF
     222       520153 :    END SUBROUTINE fist_nonbond_env_get
     223              : 
     224              : ! **************************************************************************************************
     225              : !> \brief sets a fist_nonbond_env
     226              : !> \param fist_nonbond_env the object to create
     227              : !> \param potparm14 ...
     228              : !> \param potparm ...
     229              : !> \param rlist_cut ...
     230              : !> \param rlist_lowsq ...
     231              : !> \param nonbonded ...
     232              : !> \param aup ...
     233              : !> \param lup ...
     234              : !> \param ei_scale14 ...
     235              : !> \param vdw_scale14 ...
     236              : !> \param shift_cutoff ...
     237              : !> \param do_electrostatics ...
     238              : !> \param r_last_update ...
     239              : !> \param r_last_update_pbc ...
     240              : !> \param rshell_last_update_pbc ...
     241              : !> \param rcore_last_update_pbc ...
     242              : !> \param cell_last_update ...
     243              : !> \param num_update ...
     244              : !> \param last_update ...
     245              : !> \param counter ...
     246              : !> \param natom_types ...
     247              : !> \param long_range_correction ...
     248              : !> \param eam_data ...
     249              : !> \param nequip_data ...
     250              : !> \param deepmd_data ...
     251              : !> \param ace_data ...
     252              : !> \param charges ...
     253              : !> \par History
     254              : !>      12.2002 created [fawzi]
     255              : !> \author Fawzi Mohamed
     256              : ! **************************************************************************************************
     257        92576 :    SUBROUTINE fist_nonbond_env_set(fist_nonbond_env, potparm14, potparm, &
     258              :                                    rlist_cut, rlist_lowsq, nonbonded, aup, lup, ei_scale14, vdw_scale14, &
     259              :                                    shift_cutoff, do_electrostatics, r_last_update, r_last_update_pbc, rshell_last_update_pbc, &
     260              :                                    rcore_last_update_pbc, cell_last_update, num_update, last_update, &
     261              :                                    counter, natom_types, long_range_correction, eam_data, &
     262              :                                    nequip_data, deepmd_data, ace_data, charges)
     263              : 
     264              :       TYPE(fist_nonbond_env_type), INTENT(INOUT)         :: fist_nonbond_env
     265              :       TYPE(pair_potential_pp_type), OPTIONAL, POINTER    :: potparm14, potparm
     266              :       REAL(KIND=dp), DIMENSION(:, :), OPTIONAL, POINTER  :: rlist_cut, rlist_lowsq
     267              :       TYPE(fist_neighbor_type), OPTIONAL, POINTER        :: nonbonded
     268              :       REAL(KIND=dp), OPTIONAL                            :: aup, lup, ei_scale14, vdw_scale14
     269              :       LOGICAL, INTENT(IN), OPTIONAL                      :: shift_cutoff, do_electrostatics
     270              :       TYPE(pos_type), DIMENSION(:), OPTIONAL, POINTER    :: r_last_update, r_last_update_pbc, &
     271              :                                                             rshell_last_update_pbc, &
     272              :                                                             rcore_last_update_pbc
     273              :       TYPE(cell_type), OPTIONAL, POINTER                 :: cell_last_update
     274              :       INTEGER, OPTIONAL                                  :: num_update, last_update, counter, &
     275              :                                                             natom_types
     276              :       REAL(KIND=dp), OPTIONAL                            :: long_range_correction
     277              :       TYPE(eam_type), DIMENSION(:), OPTIONAL, POINTER    :: eam_data
     278              :       TYPE(nequip_data_type), OPTIONAL, POINTER          :: nequip_data
     279              :       TYPE(deepmd_data_type), OPTIONAL, POINTER          :: deepmd_data
     280              :       TYPE(ace_data_type), OPTIONAL, POINTER             :: ace_data
     281              :       REAL(KIND=dp), DIMENSION(:), OPTIONAL, POINTER     :: charges
     282              : 
     283        92576 :       IF (PRESENT(potparm14)) fist_nonbond_env%potparm14 => potparm14
     284        92576 :       IF (PRESENT(eam_data)) fist_nonbond_env%eam_data => eam_data
     285        92576 :       IF (PRESENT(nequip_data)) fist_nonbond_env%nequip_data => nequip_data
     286        92576 :       IF (PRESENT(deepmd_data)) fist_nonbond_env%deepmd_data => deepmd_data
     287        92576 :       IF (PRESENT(ace_data)) fist_nonbond_env%ace_data => ace_data
     288        92576 :       IF (PRESENT(potparm)) fist_nonbond_env%potparm => potparm
     289        92576 :       IF (PRESENT(rlist_cut)) fist_nonbond_env%rlist_cut => rlist_cut
     290        92576 :       IF (PRESENT(charges)) fist_nonbond_env%charges => charges
     291        92576 :       IF (PRESENT(rlist_lowsq)) fist_nonbond_env%rlist_lowsq => rlist_lowsq
     292        92576 :       IF (PRESENT(nonbonded)) fist_nonbond_env%nonbonded => nonbonded
     293        92576 :       IF (PRESENT(r_last_update)) THEN
     294        10933 :          fist_nonbond_env%r_last_update => r_last_update
     295              :       END IF
     296        92576 :       IF (PRESENT(r_last_update_pbc)) THEN
     297        10933 :          fist_nonbond_env%r_last_update_pbc => r_last_update_pbc
     298              :       END IF
     299        92576 :       IF (PRESENT(rshell_last_update_pbc)) THEN
     300        10933 :          fist_nonbond_env%rshell_last_update_pbc => rshell_last_update_pbc
     301              :       END IF
     302        92576 :       IF (PRESENT(rcore_last_update_pbc)) THEN
     303        10933 :          fist_nonbond_env%rcore_last_update_pbc => rcore_last_update_pbc
     304              :       END IF
     305        92576 :       IF (PRESENT(cell_last_update)) THEN
     306        10933 :          fist_nonbond_env%cell_last_update => cell_last_update
     307              :       END IF
     308        92576 :       IF (PRESENT(lup)) fist_nonbond_env%lup = lup
     309        92576 :       IF (PRESENT(aup)) fist_nonbond_env%aup = aup
     310        92576 :       IF (PRESENT(ei_scale14)) fist_nonbond_env%ei_scale14 = ei_scale14
     311        92576 :       IF (PRESENT(vdw_scale14)) fist_nonbond_env%vdw_scale14 = vdw_scale14
     312        92576 :       IF (PRESENT(shift_cutoff)) THEN
     313            0 :          fist_nonbond_env%shift_cutoff = shift_cutoff
     314              :       END IF
     315        92576 :       IF (PRESENT(do_electrostatics)) fist_nonbond_env%do_electrostatics = do_electrostatics
     316        92576 :       IF (PRESENT(natom_types)) fist_nonbond_env%natom_types = natom_types
     317        92576 :       IF (PRESENT(counter)) fist_nonbond_env%counter = counter
     318        92576 :       IF (PRESENT(last_update)) fist_nonbond_env%last_update = last_update
     319        92576 :       IF (PRESENT(num_update)) fist_nonbond_env%num_update = num_update
     320        92576 :       IF (PRESENT(long_range_correction)) THEN
     321            0 :          fist_nonbond_env%long_range_correction = long_range_correction
     322              :       END IF
     323        92576 :    END SUBROUTINE fist_nonbond_env_set
     324              : 
     325              : ! **************************************************************************************************
     326              : !> \brief allocates and intitializes a fist_nonbond_env
     327              : !> \param fist_nonbond_env the object to create
     328              : !> \param atomic_kind_set ...
     329              : !> \param potparm14 ...
     330              : !> \param potparm ...
     331              : !> \param do_nonbonded ...
     332              : !> \param do_electrostatics ...
     333              : !> \param verlet_skin ...
     334              : !> \param ewald_rcut ...
     335              : !> \param ei_scale14 ...
     336              : !> \param vdw_scale14 ...
     337              : !> \param shift_cutoff ...
     338              : !> \par History
     339              : !>      12.2002 created [fawzi]
     340              : !> \author Fawzi Mohamed
     341              : ! **************************************************************************************************
     342         2669 :    SUBROUTINE fist_nonbond_env_create(fist_nonbond_env, atomic_kind_set, &
     343              :                                       potparm14, potparm, do_nonbonded, do_electrostatics, verlet_skin, ewald_rcut, &
     344              :                                       ei_scale14, vdw_scale14, shift_cutoff)
     345              :       TYPE(fist_nonbond_env_type), INTENT(OUT)           :: fist_nonbond_env
     346              :       TYPE(atomic_kind_type), DIMENSION(:), POINTER      :: atomic_kind_set
     347              :       TYPE(pair_potential_pp_type), OPTIONAL, POINTER    :: potparm14, potparm
     348              :       LOGICAL, INTENT(IN)                                :: do_nonbonded, do_electrostatics
     349              :       REAL(KIND=dp), INTENT(IN)                          :: verlet_skin, ewald_rcut, ei_scale14, &
     350              :                                                             vdw_scale14
     351              :       LOGICAL, INTENT(IN)                                :: shift_cutoff
     352              : 
     353              :       NULLIFY (fist_nonbond_env%potparm14)
     354              :       NULLIFY (fist_nonbond_env%potparm)
     355              :       NULLIFY (fist_nonbond_env%rlist_cut)
     356              :       NULLIFY (fist_nonbond_env%rlist_lowsq)
     357              :       NULLIFY (fist_nonbond_env%ij_kind_full_fac)
     358              :       NULLIFY (fist_nonbond_env%nonbonded)
     359              :       NULLIFY (fist_nonbond_env%cell_last_update)
     360              :       NULLIFY (fist_nonbond_env%r_last_update)
     361              :       NULLIFY (fist_nonbond_env%r_last_update_pbc)
     362              :       NULLIFY (fist_nonbond_env%rshell_last_update_pbc)
     363              :       NULLIFY (fist_nonbond_env%rcore_last_update_pbc)
     364              :       NULLIFY (fist_nonbond_env%eam_data)
     365              :       NULLIFY (fist_nonbond_env%nequip_data)
     366              :       NULLIFY (fist_nonbond_env%deepmd_data)
     367              :       NULLIFY (fist_nonbond_env%ace_data)
     368              :       NULLIFY (fist_nonbond_env%charges)
     369              :       CALL init_fist_nonbond_env(fist_nonbond_env, atomic_kind_set, potparm14, &
     370              :                                  potparm, do_nonbonded, do_electrostatics, verlet_skin, ewald_rcut, ei_scale14, &
     371         2669 :                                  vdw_scale14, shift_cutoff)
     372         2669 :    END SUBROUTINE fist_nonbond_env_create
     373              : 
     374              : ! **************************************************************************************************
     375              : !> \brief Purpose: Initialise the FIST nonbond environment.
     376              : !> \param fist_nonbond_env the object to create
     377              : !> \param atomic_kind_set ...
     378              : !> \param potparm14 ...
     379              : !> \param potparm ...
     380              : !> \param do_nonbonded ...
     381              : !> \param do_electrostatics ...
     382              : !> \param verlet_skin ...
     383              : !> \param ewald_rcut ...
     384              : !> \param ei_scale14 ...
     385              : !> \param vdw_scale14 ...
     386              : !> \param shift_cutoff ...
     387              : ! **************************************************************************************************
     388         2669 :    SUBROUTINE init_fist_nonbond_env(fist_nonbond_env, atomic_kind_set, &
     389              :                                     potparm14, potparm, do_nonbonded, do_electrostatics, verlet_skin, ewald_rcut, ei_scale14, &
     390              :                                     vdw_scale14, shift_cutoff)
     391              : 
     392              :       TYPE(fist_nonbond_env_type), INTENT(INOUT)         :: fist_nonbond_env
     393              :       TYPE(atomic_kind_type), DIMENSION(:), POINTER      :: atomic_kind_set
     394              :       TYPE(pair_potential_pp_type), OPTIONAL, POINTER    :: potparm14, potparm
     395              :       LOGICAL, INTENT(IN)                                :: do_nonbonded, do_electrostatics
     396              :       REAL(KIND=dp), INTENT(IN)                          :: verlet_skin, ewald_rcut, ei_scale14, &
     397              :                                                             vdw_scale14
     398              :       LOGICAL, INTENT(IN)                                :: shift_cutoff
     399              : 
     400              :       INTEGER                                            :: idim, jdim, natom_types
     401              :       LOGICAL                                            :: check, use_potparm, use_potparm14
     402              :       REAL(KIND=dp)                                      :: fac, rcut, rlow
     403              : 
     404         2669 :       use_potparm14 = PRESENT(potparm14)
     405         2669 :       IF (use_potparm14) use_potparm14 = use_potparm14 .OR. ASSOCIATED(potparm14)
     406         2669 :       use_potparm = PRESENT(potparm)
     407         2669 :       IF (use_potparm) use_potparm = use_potparm .OR. ASSOCIATED(potparm)
     408         2669 :       NULLIFY (fist_nonbond_env%nonbonded)
     409         2669 :       NULLIFY (fist_nonbond_env%r_last_update)
     410         2669 :       NULLIFY (fist_nonbond_env%r_last_update_pbc)
     411         2669 :       NULLIFY (fist_nonbond_env%rshell_last_update_pbc)
     412         2669 :       NULLIFY (fist_nonbond_env%rcore_last_update_pbc)
     413         2669 :       NULLIFY (fist_nonbond_env%cell_last_update)
     414         2669 :       NULLIFY (fist_nonbond_env%rlist_cut)
     415         2669 :       NULLIFY (fist_nonbond_env%rlist_lowsq)
     416         2669 :       NULLIFY (fist_nonbond_env%ij_kind_full_fac)
     417         2669 :       fist_nonbond_env%unit_type = "ANGSTROM"
     418         2669 :       fist_nonbond_env%do_nonbonded = do_nonbonded
     419         2669 :       fist_nonbond_env%do_electrostatics = do_electrostatics
     420         2669 :       fist_nonbond_env%lup = 0
     421         2669 :       fist_nonbond_env%aup = 0
     422         2669 :       fist_nonbond_env%ei_scale14 = ei_scale14
     423         2669 :       fist_nonbond_env%vdw_scale14 = vdw_scale14
     424         2669 :       fist_nonbond_env%shift_cutoff = shift_cutoff
     425         2669 :       fist_nonbond_env%counter = 0
     426         2669 :       fist_nonbond_env%last_update = 0
     427         2669 :       fist_nonbond_env%num_update = 0
     428         2669 :       fist_nonbond_env%long_range_correction = 0
     429         2669 :       IF (do_nonbonded) THEN
     430         2653 :          natom_types = 1
     431              :          ! Determine size of kind arrays
     432         2653 :          natom_types = SIZE(atomic_kind_set)
     433         2653 :          IF (use_potparm14) THEN
     434         2621 :             check = (SIZE(potparm14%pot, 1) == natom_types)
     435         2621 :             CPASSERT(check)
     436              :          END IF
     437         2653 :          IF (use_potparm) THEN
     438         2621 :             check = (SIZE(potparm%pot, 1) == natom_types)
     439         2621 :             CPASSERT(check)
     440              :          END IF
     441        10612 :          ALLOCATE (fist_nonbond_env%rlist_cut(natom_types, natom_types))
     442         7959 :          ALLOCATE (fist_nonbond_env%rlist_lowsq(natom_types, natom_types))
     443         7959 :          ALLOCATE (fist_nonbond_env%ij_kind_full_fac(natom_types, natom_types))
     444       518189 :          fist_nonbond_env%ij_kind_full_fac = 1.0_dp
     445        13898 :          DO idim = 1, natom_types
     446       271666 :             DO jdim = idim, natom_types
     447       269013 :                IF ((use_potparm) .OR. (use_potparm14)) THEN
     448       257688 :                   IF (use_potparm) THEN
     449       257688 :                      rcut = SQRT(potparm%pot(idim, jdim)%pot%rcutsq)
     450       257688 :                      fac = potparm%pot(idim, jdim)%pot%spl_f%rscale(1)
     451       257688 :                      rlow = fac/(potparm%pot(idim, jdim)%pot%pair_spline_data(1)%spline_data%xn)
     452              :                   ELSE
     453            0 :                      rcut = SQRT(potparm14%pot(idim, jdim)%pot%rcutsq)
     454            0 :                      fac = potparm14%pot(idim, jdim)%pot%spl_f%rscale(1)
     455            0 :                      rlow = fac/(potparm14%pot(idim, jdim)%pot%pair_spline_data(1)%spline_data%xn)
     456              :                   END IF
     457              :                   ! Warning: rlist_rcut should only be used by the neighbor list
     458              :                   ! algorithm. It is not the cutoff for the evaluation of the
     459              :                   ! interactions because rlist_rcut includes the Verlet skin.
     460       257688 :                   rcut = MAX(rcut, ewald_rcut) + verlet_skin
     461       257688 :                   fist_nonbond_env%rlist_cut(idim, jdim) = rcut
     462       257688 :                   fist_nonbond_env%rlist_cut(jdim, idim) = rcut
     463       257688 :                   rlow = rlow*(1.06_dp)**2 ! 1.06_dp in order to have 1/2 Emax_spline
     464       257688 :                   fist_nonbond_env%rlist_lowsq(idim, jdim) = rlow
     465       257688 :                   fist_nonbond_env%rlist_lowsq(jdim, idim) = rlow
     466              :                   ! In case of manybody potential the neighbor list will be full.
     467              :                   ! This means that for each atom pair (a,b) of the current types,
     468              :                   ! atom a is in the neighbor list of b and b is in the neighbor
     469              :                   ! list of a. ij_kind_full_fac is used to correct for the double
     470              :                   ! counting in the conventional pair potentials cause by this
     471              :                   ! situation.
     472       515268 :                   IF (ANY(potparm%pot(idim, jdim)%pot%type == tersoff_type)) THEN
     473              :                      ! TODO: what if 14 is not of tersoff type while the normal
     474              :                      ! nonbond is? (or the reverse). We'd better impose
     475              :                      ! consistency.
     476          116 :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     477              :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     478              :                   END IF
     479       515379 :                   IF (ANY(potparm%pot(idim, jdim)%pot%type == siepmann_type)) THEN
     480              :                      ! TODO:see tersoff_type
     481            5 :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     482              :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     483              :                   END IF
     484       515366 :                   IF (ANY(potparm%pot(idim, jdim)%pot%type == ace_type)) THEN
     485           18 :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     486           18 :                      fist_nonbond_env%ij_kind_full_fac(jdim, idim) = 0.5_dp
     487              :                   END IF
     488       515383 :                   IF (ANY(potparm%pot(idim, jdim)%pot%type == gal_type)) THEN
     489            1 :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     490              :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     491              :                   END IF
     492       515383 :                   IF (ANY(potparm%pot(idim, jdim)%pot%type == gal21_type)) THEN
     493            1 :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     494              :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     495              :                   END IF
     496       515378 :                   IF (ANY(potparm%pot(idim, jdim)%pot%type == nequip_type)) THEN
     497            6 :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     498              :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     499              :                   END IF
     500       515382 :                   IF (ANY(potparm%pot(idim, jdim)%pot%type == mace_type)) THEN
     501            2 :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     502              :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     503              :                   END IF
     504       515378 :                   IF (ANY(potparm%pot(idim, jdim)%pot%type == allegro_type)) THEN
     505            6 :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     506              :                      fist_nonbond_env%ij_kind_full_fac(idim, jdim) = 0.5_dp
     507              :                   END IF
     508              :                ELSE
     509              :                   ! In case we don't use potparm for initialization let's account
     510              :                   ! only for the real-space part of the Ewald sum.
     511           80 :                   fist_nonbond_env%rlist_cut(idim, jdim) = ewald_rcut
     512           80 :                   fist_nonbond_env%rlist_cut(jdim, idim) = ewald_rcut
     513           80 :                   fist_nonbond_env%rlist_lowsq(idim, jdim) = 0.0_dp
     514           80 :                   fist_nonbond_env%rlist_lowsq(jdim, idim) = 0.0_dp
     515              :                END IF
     516              :             END DO
     517              :          END DO
     518         2653 :          IF (use_potparm14) fist_nonbond_env%potparm14 => potparm14
     519         2653 :          IF (use_potparm) fist_nonbond_env%potparm => potparm
     520         2653 :          fist_nonbond_env%natom_types = natom_types
     521              :       ELSE
     522           16 :          NULLIFY (fist_nonbond_env%potparm)
     523           16 :          NULLIFY (fist_nonbond_env%potparm14)
     524              :       END IF
     525         2669 :    END SUBROUTINE init_fist_nonbond_env
     526              : 
     527              : ! **************************************************************************************************
     528              : !> \brief releases the given fist_nonbond_env (see doc/ReferenceCounting.html)
     529              : !> \param fist_nonbond_env the object to release
     530              : !> \par History
     531              : !>      12.2002 created [fawzi]
     532              : !> \author Fawzi Mohamed
     533              : ! **************************************************************************************************
     534         2669 :    SUBROUTINE fist_nonbond_env_release(fist_nonbond_env)
     535              :       TYPE(fist_nonbond_env_type), INTENT(INOUT)         :: fist_nonbond_env
     536              : 
     537         2669 :       IF (ASSOCIATED(fist_nonbond_env%nonbonded)) THEN
     538         2495 :          CALL fist_neighbor_deallocate(fist_nonbond_env%nonbonded)
     539              :       END IF
     540              :       ! Release potparm
     541         2669 :       CALL pair_potential_pp_release(fist_nonbond_env%potparm)
     542              :       ! Release potparm14
     543         2669 :       CALL pair_potential_pp_release(fist_nonbond_env%potparm14)
     544         2669 :       IF (ASSOCIATED(fist_nonbond_env%r_last_update)) THEN
     545         2495 :          DEALLOCATE (fist_nonbond_env%r_last_update)
     546              :       END IF
     547         2669 :       IF (ASSOCIATED(fist_nonbond_env%r_last_update_pbc)) THEN
     548         2495 :          DEALLOCATE (fist_nonbond_env%r_last_update_pbc)
     549              :       END IF
     550         2669 :       IF (ASSOCIATED(fist_nonbond_env%charges)) THEN
     551            8 :          DEALLOCATE (fist_nonbond_env%charges)
     552              :       END IF
     553         2669 :       IF (ASSOCIATED(fist_nonbond_env%eam_data)) THEN
     554           12 :          DEALLOCATE (fist_nonbond_env%eam_data)
     555              :       END IF
     556         2669 :       IF (ASSOCIATED(fist_nonbond_env%nequip_data)) THEN
     557            6 :          IF (ASSOCIATED(fist_nonbond_env%nequip_data%force)) THEN
     558            6 :             DEALLOCATE (fist_nonbond_env%nequip_data%force)
     559              :          END IF
     560            6 :          IF (ASSOCIATED(fist_nonbond_env%nequip_data%use_indices)) THEN
     561            6 :             DEALLOCATE (fist_nonbond_env%nequip_data%use_indices)
     562              :          END IF
     563            6 :          CALL torch_model_release(fist_nonbond_env%nequip_data%model)
     564            6 :          DEALLOCATE (fist_nonbond_env%nequip_data)
     565              :       END IF
     566         2669 :       IF (ASSOCIATED(fist_nonbond_env%deepmd_data)) THEN
     567            2 :          IF (ASSOCIATED(fist_nonbond_env%deepmd_data%force)) THEN
     568            2 :             DEALLOCATE (fist_nonbond_env%deepmd_data%force)
     569              :          END IF
     570            2 :          IF (ASSOCIATED(fist_nonbond_env%deepmd_data%use_indices)) THEN
     571            2 :             DEALLOCATE (fist_nonbond_env%deepmd_data%use_indices)
     572              :          END IF
     573            2 :          CALL deepmd_model_release(fist_nonbond_env%deepmd_data%model)
     574            2 :          DEALLOCATE (fist_nonbond_env%deepmd_data)
     575              :       END IF
     576         2669 :       IF (ASSOCIATED(fist_nonbond_env%ace_data)) THEN
     577            6 :          IF (ALLOCATED(fist_nonbond_env%ace_data%use_indices)) THEN
     578            6 :             DEALLOCATE (fist_nonbond_env%ace_data%use_indices)
     579              :          END IF
     580            6 :          IF (ALLOCATED(fist_nonbond_env%ace_data%inverse_index_map)) THEN
     581            6 :             DEALLOCATE (fist_nonbond_env%ace_data%inverse_index_map)
     582              :          END IF
     583            6 :          IF (ALLOCATED(fist_nonbond_env%ace_data%force)) THEN
     584            6 :             DEALLOCATE (fist_nonbond_env%ace_data%force)
     585              :          END IF
     586            6 :          IF (ALLOCATED(fist_nonbond_env%ace_data%atpos)) THEN
     587            6 :             DEALLOCATE (fist_nonbond_env%ace_data%atpos)
     588              :          END IF
     589            6 :          IF (ALLOCATED(fist_nonbond_env%ace_data%uctype)) THEN
     590            6 :             DEALLOCATE (fist_nonbond_env%ace_data%uctype)
     591              :          END IF
     592            6 :          IF (ALLOCATED(fist_nonbond_env%ace_data%attype)) THEN
     593            6 :             DEALLOCATE (fist_nonbond_env%ace_data%attype)
     594              :          END IF
     595            6 :          IF (ALLOCATED(fist_nonbond_env%ace_data%origin)) THEN
     596            6 :             DEALLOCATE (fist_nonbond_env%ace_data%origin)
     597              :          END IF
     598            6 :          IF (ALLOCATED(fist_nonbond_env%ace_data%shift)) THEN
     599            6 :             DEALLOCATE (fist_nonbond_env%ace_data%shift)
     600              :          END IF
     601            6 :          IF (ALLOCATED(fist_nonbond_env%ace_data%neiat)) THEN
     602            6 :             DEALLOCATE (fist_nonbond_env%ace_data%neiat)
     603              :          END IF
     604            6 :          IF (ALLOCATED(fist_nonbond_env%ace_data%nlist)) THEN
     605            6 :             DEALLOCATE (fist_nonbond_env%ace_data%nlist)
     606              :          END IF
     607            6 :          CALL ace_model_release(fist_nonbond_env%ace_data%model)
     608            6 :          DEALLOCATE (fist_nonbond_env%ace_data)
     609              :       END IF
     610         2669 :       IF (ASSOCIATED(fist_nonbond_env%rshell_last_update_pbc)) THEN
     611          238 :          DEALLOCATE (fist_nonbond_env%rshell_last_update_pbc)
     612              :       END IF
     613         2669 :       IF (ASSOCIATED(fist_nonbond_env%rcore_last_update_pbc)) THEN
     614          238 :          DEALLOCATE (fist_nonbond_env%rcore_last_update_pbc)
     615              :       END IF
     616         2669 :       IF (ASSOCIATED(fist_nonbond_env%cell_last_update)) THEN
     617         2495 :          CALL cell_release(fist_nonbond_env%cell_last_update)
     618              :       END IF
     619         2669 :       IF (ASSOCIATED(fist_nonbond_env%ij_kind_full_fac)) THEN
     620         2653 :          DEALLOCATE (fist_nonbond_env%ij_kind_full_fac)
     621              :       END IF
     622         2669 :       IF (ASSOCIATED(fist_nonbond_env%rlist_cut)) THEN
     623         2653 :          DEALLOCATE (fist_nonbond_env%rlist_cut)
     624              :       END IF
     625         2669 :       IF (ASSOCIATED(fist_nonbond_env%rlist_lowsq)) THEN
     626         2653 :          DEALLOCATE (fist_nonbond_env%rlist_lowsq)
     627              :       END IF
     628         2669 :    END SUBROUTINE fist_nonbond_env_release
     629              : 
     630            0 : END MODULE fist_nonbond_env_types
        

Generated by: LCOV version 2.0-1