(git:374b731)
Loading...
Searching...
No Matches
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,&
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
28CONTAINS
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
109END 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
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 calc_fm_mat_s_laplace(fm_mat_s, homo, virtual, eigenval, dajquad)
...
Definition mp2_laplace.F:39
subroutine, public sos_mp2_postprocessing(fm_mat_q, erpa, tau_wjquad)
...
Definition mp2_laplace.F:81
represent a full matrix