(git:374b731)
Loading...
Searching...
No Matches
taper_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!> \brief Definition of the semi empirical parameter types.
10!> \author Teodoro Laino [tlaino] - 10.2008 University of Zurich
11! **************************************************************************************************
13
14 USE kinds, ONLY: dp
15#include "./base/base_uses.f90"
16
17 IMPLICIT NONE
18
19 PRIVATE
20
21 ! *** Global parameters ***
22
23 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'taper_types'
24
25! **************************************************************************************************
26!> \brief Taper type
27! **************************************************************************************************
29 LOGICAL :: apply_taper
30 REAL(kind=dp) :: r0, rscale
31 END TYPE taper_type
32
34
35CONTAINS
36
37! **************************************************************************************************
38!> \brief Creates taper type
39!> \param taper ...
40!> \param rc ...
41!> \param range ...
42! **************************************************************************************************
43 SUBROUTINE taper_create(taper, rc, range)
44 TYPE(taper_type), POINTER :: taper
45 REAL(kind=dp), INTENT(IN) :: rc, range
46
47 cpassert(.NOT. ASSOCIATED(taper))
48 ALLOCATE (taper)
49 IF (range > epsilon(0.0_dp)) THEN
50 taper%apply_taper = .true.
51 cpassert(range > 0.0_dp)
52 taper%r0 = 2.0_dp*rc - 20.0_dp*range
53 taper%rscale = 1.0_dp/range
54 ELSE
55 taper%apply_taper = .false.
56 END IF
57
58 END SUBROUTINE taper_create
59
60! **************************************************************************************************
61!> \brief Releases taper type
62!> \param taper ...
63! **************************************************************************************************
64 SUBROUTINE taper_release(taper)
65 TYPE(taper_type), POINTER :: taper
66
67 IF (ASSOCIATED(taper)) THEN
68 DEALLOCATE (taper)
69 END IF
70 END SUBROUTINE taper_release
71
72! **************************************************************************************************
73!> \brief Taper functions
74!> \param taper ...
75!> \param rij ...
76!> \return ...
77! **************************************************************************************************
78 FUNCTION taper_eval(taper, rij) RESULT(ft)
79 TYPE(taper_type), POINTER :: taper
80 REAL(kind=dp), INTENT(IN) :: rij
81 REAL(kind=dp) :: ft
82
83 REAL(kind=dp) :: dr
84
85 ft = 1._dp
86 IF (taper%apply_taper) THEN
87 dr = taper%rscale*(rij - taper%r0)
88 ft = 0.5_dp*(1.0_dp - tanh(dr))
89 END IF
90 END FUNCTION taper_eval
91
92! **************************************************************************************************
93!> \brief Analytical derivatives for taper function
94!> \param taper ...
95!> \param rij ...
96!> \return ...
97! **************************************************************************************************
98 FUNCTION dtaper_eval(taper, rij) RESULT(dft)
99 TYPE(taper_type), POINTER :: taper
100 REAL(kind=dp), INTENT(IN) :: rij
101 REAL(kind=dp) :: dft
102
103 REAL(kind=dp) :: dr
104
105 dft = 0.0_dp
106 IF (taper%apply_taper) THEN
107 dr = taper%rscale*(rij - taper%r0)
108 dft = -0.5_dp*(1.0_dp - tanh(dr)**2)*taper%rscale
109 END IF
110 END FUNCTION dtaper_eval
111
112END MODULE taper_types
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
Definition of the semi empirical parameter types.
Definition taper_types.F:12
real(kind=dp) function, public dtaper_eval(taper, rij)
Analytical derivatives for taper function.
Definition taper_types.F:99
subroutine, public taper_create(taper, rc, range)
Creates taper type.
Definition taper_types.F:44
subroutine, public taper_release(taper)
Releases taper type.
Definition taper_types.F:65
real(kind=dp) function, public taper_eval(taper, rij)
Taper functions.
Definition taper_types.F:79