(git:e7e05ae)
shell_potential_types.F
Go to the documentation of this file.
1 !--------------------------------------------------------------------------------------------------!
2 ! CP2K: A general program to perform molecular dynamics simulations !
3 ! Copyright 2000-2024 CP2K developers group <https://cp2k.org> !
4 ! !
5 ! SPDX-License-Identifier: GPL-2.0-or-later !
6 !--------------------------------------------------------------------------------------------------!
7 
8 ! **************************************************************************************************
9 !> \author MI (12.01.2007)
10 ! **************************************************************************************************
12 
13  USE kinds, ONLY: default_string_length,&
14  dp
15 #include "../base/base_uses.f90"
16 
17  IMPLICIT NONE
18 
19  PRIVATE
20 
21 ! Global parameters (only in this module)
22 
23  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'shell_potential_types'
24 
25 ! **************************************************************************************************
26 !> \brief Define the shell type
27 ! **************************************************************************************************
28  TYPE shell_kind_type
29  REAL(dp) :: charge_core = 0.0_dp, &
30  charge_shell = 0.0_dp
31  REAL(dp) :: mass_core = 0.0_dp, &
32  massfrac = 0.0_dp, &
33  mass_shell = 0.0_dp
34  REAL(dp) :: k2_spring = 0.0_dp, k4_spring = 0.0_dp
35  REAL(dp) :: max_dist = 0.0_dp
36  REAL(dp) :: shell_cutoff = 0.0_dp
37  END TYPE shell_kind_type
38 
39 ! **************************************************************************************************
40  TYPE shell_p_type
41  CHARACTER(LEN=default_string_length) :: atm_name = ""
42  TYPE(shell_kind_type), POINTER :: shell => null()
43  END TYPE shell_p_type
44 
45 ! Public subroutines
46 
47  PUBLIC :: get_shell, shell_p_create, &
49 
50 ! Public data types
51 
52  PUBLIC :: shell_p_type, shell_kind_type
53 
54 CONTAINS
55 
56 ! **************************************************************************************************
57 !> \brief ...
58 !> \param shell ...
59 !> \param charge ...
60 !> \param charge_core ...
61 !> \param charge_shell ...
62 !> \param mass_core ...
63 !> \param mass_shell ...
64 !> \param k2_spring ...
65 !> \param k4_spring ...
66 !> \param max_dist ...
67 !> \param shell_cutoff ...
68 ! **************************************************************************************************
69  ELEMENTAL SUBROUTINE get_shell(shell, charge, charge_core, charge_shell, mass_core, &
70  mass_shell, k2_spring, k4_spring, max_dist, shell_cutoff)
71 
72  TYPE(shell_kind_type), INTENT(IN) :: shell
73  REAL(kind=dp), INTENT(OUT), OPTIONAL :: charge, charge_core, charge_shell, &
74  mass_core, mass_shell, k2_spring, &
75  k4_spring, max_dist, shell_cutoff
76 
77  IF (PRESENT(charge)) charge = shell%charge_core + shell%charge_shell
78  IF (PRESENT(charge_core)) charge_core = shell%charge_core
79  IF (PRESENT(charge_shell)) charge_shell = shell%charge_shell
80  IF (PRESENT(mass_core)) mass_core = shell%mass_core
81  IF (PRESENT(mass_shell)) mass_shell = shell%mass_shell
82  IF (PRESENT(k2_spring)) k2_spring = shell%k2_spring
83  IF (PRESENT(k4_spring)) k4_spring = shell%k4_spring
84  IF (PRESENT(max_dist)) max_dist = shell%max_dist
85  IF (PRESENT(shell_cutoff)) shell_cutoff = shell%shell_cutoff
86 
87  END SUBROUTINE
88 
89 ! **************************************************************************************************
90 !> \brief ...
91 !> \param shell_list ...
92 !> \param ndim ...
93 ! **************************************************************************************************
94  SUBROUTINE shell_p_create(shell_list, ndim)
95 
96  TYPE(shell_p_type), DIMENSION(:), POINTER :: shell_list
97  INTEGER, INTENT(IN) :: ndim
98 
99  INTEGER :: i
100 
101  cpassert(.NOT. ASSOCIATED(shell_list))
102  ALLOCATE (shell_list(ndim))
103 
104  DO i = 1, ndim
105  ALLOCATE (shell_list(i)%shell)
106  END DO
107 
108  END SUBROUTINE shell_p_create
109 
110 ! **************************************************************************************************
111 !> \brief ...
112 !> \param shell_list ...
113 ! **************************************************************************************************
114  SUBROUTINE shell_p_release(shell_list)
115  TYPE(shell_p_type), DIMENSION(:), POINTER :: shell_list
116 
117  INTEGER :: i
118 
119  IF (ASSOCIATED(shell_list)) THEN
120  DO i = 1, SIZE(shell_list)
121  DEALLOCATE (shell_list(i)%shell)
122  END DO
123  DEALLOCATE (shell_list)
124  END IF
125 
126  NULLIFY (shell_list)
127 
128  END SUBROUTINE shell_p_release
129 
130 END MODULE shell_potential_types
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public dp
Definition: kinds.F:34
integer, parameter, public default_string_length
Definition: kinds.F:57
subroutine, public shell_p_release(shell_list)
...
elemental subroutine, public get_shell(shell, charge, charge_core, charge_shell, mass_core, mass_shell, k2_spring, k4_spring, max_dist, shell_cutoff)
...
subroutine, public shell_p_create(shell_list, ndim)
...