(git:f7c1873)
mp2_laplace.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 Routines to calculate MP2 energy with laplace approach
10 !> \par History
11 !> 11.2012 created [Mauro Del Ben]
12 ! **************************************************************************************************
14 !
15  USE cp_fm_types, ONLY: cp_fm_get_info,&
16  cp_fm_type
17  USE kinds, ONLY: dp
18 #include "./base/base_uses.f90"
19 
20  IMPLICIT NONE
21 
22  PRIVATE
23 
24  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'mp2_laplace'
25 
27 
28 CONTAINS
29 
30 ! **************************************************************************************************
31 !> \brief ...
32 !> \param fm_mat_S ...
33 !> \param homo ...
34 !> \param virtual ...
35 !> \param Eigenval ...
36 !> \param dajquad ...
37 ! **************************************************************************************************
38  SUBROUTINE calc_fm_mat_s_laplace(fm_mat_S, homo, virtual, Eigenval, dajquad)
39  TYPE(cp_fm_type), INTENT(IN) :: fm_mat_s
40  INTEGER, INTENT(IN) :: homo, virtual
41  REAL(kind=dp), DIMENSION(:), INTENT(IN) :: eigenval
42  REAL(kind=dp), INTENT(IN) :: dajquad
43 
44  CHARACTER(LEN=*), PARAMETER :: routinen = 'calc_fm_mat_S_laplace'
45 
46  INTEGER :: avirt, handle, i_global, iib, iocc, &
47  ncol_local
48  INTEGER, DIMENSION(:), POINTER :: col_indices
49  REAL(kind=dp) :: laplace_transf
50 
51  CALL timeset(routinen, handle)
52 
53  ! get info of fm_mat_S
54  CALL cp_fm_get_info(matrix=fm_mat_s, &
55  ncol_local=ncol_local, &
56  col_indices=col_indices)
57 
58  DO iib = 1, ncol_local
59  i_global = col_indices(iib)
60 
61  iocc = max(1, i_global - 1)/virtual + 1
62  avirt = i_global - (iocc - 1)*virtual
63 
64  laplace_transf = exp(0.5_dp*(eigenval(iocc) - eigenval(avirt + homo))*dajquad)
65 
66  fm_mat_s%local_data(:, iib) = fm_mat_s%local_data(:, iib)*laplace_transf
67 
68  END DO
69 
70  CALL timestop(handle)
71 
72  END SUBROUTINE calc_fm_mat_s_laplace
73 
74 ! **************************************************************************************************
75 !> \brief ...
76 !> \param fm_mat_Q ...
77 !> \param Erpa ...
78 !> \param tau_wjquad ...
79 ! **************************************************************************************************
80  SUBROUTINE sos_mp2_postprocessing(fm_mat_Q, Erpa, tau_wjquad)
81  TYPE(cp_fm_type), DIMENSION(:), INTENT(IN) :: fm_mat_q
82  REAL(kind=dp), INTENT(INOUT) :: erpa
83  REAL(kind=dp), INTENT(IN) :: tau_wjquad
84 
85  CHARACTER(LEN=*), PARAMETER :: routinen = 'SOS_MP2_postprocessing'
86 
87  INTEGER :: handle, jjb, ncol_local
88  REAL(kind=dp) :: trace_xx
89 
90  CALL timeset(routinen, handle)
91 
92  ! get info of fm_mat_Q
93  CALL cp_fm_get_info(matrix=fm_mat_q(1), &
94  ncol_local=ncol_local)
95 
96  ! calculate the trace of the product Q*Q
97  trace_xx = 0.0_dp
98  DO jjb = 1, ncol_local
99  trace_xx = trace_xx + dot_product(fm_mat_q(1)%local_data(:, jjb), &
100  fm_mat_q(SIZE(fm_mat_q))%local_data(:, jjb))
101  END DO
102 
103  erpa = erpa - trace_xx*tau_wjquad
104 
105  CALL timestop(handle)
106 
107  END SUBROUTINE sos_mp2_postprocessing
108 
109 END MODULE mp2_laplace
represent a full matrix distributed on many processors
Definition: cp_fm_types.F:15
subroutine, public cp_fm_get_info(matrix, name, nrow_global, ncol_global, nrow_block, ncol_block, nrow_local, ncol_local, row_indices, col_indices, local_data, context, nrow_locals, ncol_locals, matrix_struct, para_env)
returns all kind of information about the full matrix
Definition: cp_fm_types.F:1016
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public dp
Definition: kinds.F:34
Routines to calculate MP2 energy with laplace approach.
Definition: mp2_laplace.F:13
subroutine, public sos_mp2_postprocessing(fm_mat_Q, Erpa, tau_wjquad)
...
Definition: mp2_laplace.F:81
subroutine, public calc_fm_mat_s_laplace(fm_mat_S, homo, virtual, Eigenval, dajquad)
...
Definition: mp2_laplace.F:39