(git:0de0cc2)
cp_ddapc_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 contains information regarding the decoupling/recoupling method of Bloechl
10 !> \author Teodoro Laino
11 ! **************************************************************************************************
13  USE cell_methods, ONLY: read_cell
14  USE cell_types, ONLY: cell_release,&
15  cell_type
16  USE cp_ddapc_methods, ONLY: ddapc_eval_ami,&
22  cp_logger_type
27  section_vals_type,&
29  USE kinds, ONLY: dp
30  USE mathconstants, ONLY: pi
31  USE message_passing, ONLY: mp_para_env_type
32  USE particle_types, ONLY: particle_type
33  USE pw_grid_types, ONLY: pw_grid_type
34  USE pw_grids, ONLY: pw_grid_release
36  USE pw_pool_types, ONLY: pw_pool_release,&
37  pw_pool_type
38  USE pw_types, ONLY: pw_c1d_gs_type,&
39  pw_r3d_rs_type
40 #include "./base/base_uses.f90"
41 
42  IMPLICIT NONE
43  PRIVATE
44  LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .true.
45  CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'cp_ddapc_types'
46 
47  PUBLIC :: cp_ddapc_type, cp_ddapc_create, cp_ddapc_release
48  PUBLIC :: cp_ddapc_ewald_type, cp_ddapc_ewald_create, cp_ddapc_ewald_release
49 
50 ! **************************************************************************************************
51 !> \author Teodoro Laino
52 ! **************************************************************************************************
53  TYPE cp_ddapc_type
54  REAL(KIND=dp) :: c0 = 0.0_dp
55  REAL(KIND=dp), DIMENSION(:, :), POINTER :: ami => null()
56  REAL(KIND=dp), DIMENSION(:, :), POINTER :: md => null() ! decoupling
57  REAL(KIND=dp), DIMENSION(:, :), POINTER :: mr => null() ! recoupling
58  REAL(KIND=dp), DIMENSION(:, :), POINTER :: mt => null() ! decoupling+recoupling
59  REAL(KIND=dp), DIMENSION(:, :), POINTER :: ms => null() ! solvation
60  REAL(KIND=dp), POINTER, DIMENSION(:, :) :: gfunc => null()
61  REAL(KIND=dp), POINTER, DIMENSION(:) :: w => null()
62  END TYPE cp_ddapc_type
63 
64 ! **************************************************************************************************
65  TYPE cp_ddapc_ewald_type
66  LOGICAL :: do_decoupling = .false.
67  LOGICAL :: do_qmmm_periodic_decpl = .false.
68  LOGICAL :: do_solvation = .false.
69  LOGICAL :: do_property = .false.
70  LOGICAL :: do_restraint = .false.
71  TYPE(section_vals_type), POINTER :: ewald_section => null()
72  TYPE(pw_pool_type), POINTER :: pw_pool_qm => null(), pw_pool_mm => null()
73  TYPE(pw_grid_type), POINTER :: pw_grid_qm => null(), pw_grid_mm => null()
74  TYPE(pw_r3d_rs_type), POINTER :: coeff_qm => null(), coeff_mm => null()
75  END TYPE cp_ddapc_ewald_type
76 
77 CONTAINS
78 
79 ! **************************************************************************************************
80 !> \brief ...
81 !> \param cp_para_env ...
82 !> \param cp_ddapc_env ...
83 !> \param cp_ddapc_ewald ...
84 !> \param particle_set ...
85 !> \param radii ...
86 !> \param cell ...
87 !> \param super_cell ...
88 !> \param rho_tot_g ...
89 !> \param gcut ...
90 !> \param iw2 ...
91 !> \param Vol ...
92 !> \param force_env_section ...
93 !> \author Tedoro Laino
94 !> \note NB receive cp_para_env to pass down to parallelized ewald_ddapc_pot()
95 ! **************************************************************************************************
96  SUBROUTINE cp_ddapc_create(cp_para_env, cp_ddapc_env, cp_ddapc_ewald, &
97  particle_set, radii, cell, super_cell, rho_tot_g, gcut, iw2, Vol, &
98  force_env_section)
99  TYPE(mp_para_env_type), POINTER :: cp_para_env
100  TYPE(cp_ddapc_type), INTENT(OUT) :: cp_ddapc_env
101  TYPE(cp_ddapc_ewald_type), POINTER :: cp_ddapc_ewald
102  TYPE(particle_type), DIMENSION(:), POINTER :: particle_set
103  REAL(kind=dp), DIMENSION(:), POINTER :: radii
104  TYPE(cell_type), POINTER :: cell, super_cell
105  TYPE(pw_c1d_gs_type), INTENT(IN) :: rho_tot_g
106  REAL(kind=dp), INTENT(IN) :: gcut
107  INTEGER, INTENT(IN) :: iw2
108  REAL(kind=dp), INTENT(IN) :: vol
109  TYPE(section_vals_type), POINTER :: force_env_section
110 
111  CHARACTER(len=*), PARAMETER :: routinen = 'cp_ddapc_create'
112 
113  INTEGER :: handle
114  TYPE(section_vals_type), POINTER :: param_section, solvation_section
115 
116  CALL timeset(routinen, handle)
117  NULLIFY (cp_ddapc_env%AmI, &
118  cp_ddapc_env%Md, &
119  cp_ddapc_env%Mt, &
120  cp_ddapc_env%Mr, &
121  cp_ddapc_env%Ms, &
122  cp_ddapc_env%gfunc, &
123  cp_ddapc_env%w)
124  ! Evaluates gfunc and AmI
125  CALL ddapc_eval_gfunc(cp_ddapc_env%gfunc, cp_ddapc_env%w, gcut, rho_tot_g, radii)
126  CALL ddapc_eval_ami(cp_ddapc_env%AmI, &
127  cp_ddapc_env%c0, &
128  cp_ddapc_env%gfunc, &
129  cp_ddapc_env%w, &
130  particle_set, &
131  gcut, &
132  rho_tot_g, &
133  radii, &
134  iw2, &
135  vol)
136  IF (cp_ddapc_ewald%do_qmmm_periodic_decpl .OR. &
137  cp_ddapc_ewald%do_decoupling) THEN
138  !
139  ! Evaluate the matrix for the Classical contribution to the coupling/decoupling scheme
140  !
141  param_section => cp_ddapc_ewald%ewald_section
142  !NB parallelized ewald_ddapc_pot() needs cp_para_env
143  CALL ewald_ddapc_pot(cp_para_env, cp_ddapc_ewald%coeff_qm, &
144  1.0_dp, &
145  cell, &
146  param_section, &
147  particle_set, &
148  cp_ddapc_env%Md, &
149  radii)
150  IF (cp_ddapc_ewald%do_qmmm_periodic_decpl .OR. cp_ddapc_ewald%do_decoupling) THEN
151  ALLOCATE (cp_ddapc_env%Mt(SIZE(cp_ddapc_env%Md, 1), SIZE(cp_ddapc_env%Md, 2)))
152  IF (cp_ddapc_ewald%do_decoupling) THEN
153  ! Just decoupling
154  cp_ddapc_env%Mt = cp_ddapc_env%Md
155  ELSE
156  ! QMMM periodic calculation
157  !NB parallelized ewald_ddapc_pot() needs cp_para_env
158  CALL ewald_ddapc_pot(cp_para_env, cp_ddapc_ewald%coeff_mm, -1.0_dp, super_cell, param_section, &
159  particle_set, cp_ddapc_env%Mr, radii)
160  cp_ddapc_env%Mt = cp_ddapc_env%Md + cp_ddapc_env%Mr
161  END IF
162  END IF
163  END IF
164  IF (cp_ddapc_ewald%do_solvation) THEN
165  ! Spherical Solvation model
166  solvation_section => section_vals_get_subs_vals(force_env_section, "DFT%SCRF")
167  CALL solvation_ddapc_pot(solvation_section, &
168  particle_set, cp_ddapc_env%Ms, radii)
169  END IF
170  CALL timestop(handle)
171  END SUBROUTINE cp_ddapc_create
172 
173 ! **************************************************************************************************
174 !> \brief ...
175 !> \param cp_ddapc_env ...
176 !> \par History
177 !> none
178 !> \author Teodoro Laino - [tlaino]
179 ! **************************************************************************************************
180  SUBROUTINE cp_ddapc_release(cp_ddapc_env)
181  TYPE(cp_ddapc_type), INTENT(INOUT) :: cp_ddapc_env
182 
183  IF (ASSOCIATED(cp_ddapc_env%AmI)) THEN
184  DEALLOCATE (cp_ddapc_env%AmI)
185  END IF
186  IF (ASSOCIATED(cp_ddapc_env%Mt)) THEN
187  DEALLOCATE (cp_ddapc_env%Mt)
188  END IF
189  IF (ASSOCIATED(cp_ddapc_env%Md)) THEN
190  DEALLOCATE (cp_ddapc_env%Md)
191  END IF
192  IF (ASSOCIATED(cp_ddapc_env%Mr)) THEN
193  DEALLOCATE (cp_ddapc_env%Mr)
194  END IF
195  IF (ASSOCIATED(cp_ddapc_env%Ms)) THEN
196  DEALLOCATE (cp_ddapc_env%Ms)
197  END IF
198  IF (ASSOCIATED(cp_ddapc_env%gfunc)) THEN
199  DEALLOCATE (cp_ddapc_env%gfunc)
200  END IF
201  IF (ASSOCIATED(cp_ddapc_env%w)) THEN
202  DEALLOCATE (cp_ddapc_env%w)
203  END IF
204 
205  END SUBROUTINE cp_ddapc_release
206 
207 ! **************************************************************************************************
208 !> \brief ...
209 !> \param cp_ddapc_ewald ...
210 !> \param qmmm_decoupl ...
211 !> \param qm_cell ...
212 !> \param force_env_section ...
213 !> \param subsys_section ...
214 !> \param para_env ...
215 !> \par History
216 !> none
217 !> \author Teodoro Laino - [tlaino]
218 ! **************************************************************************************************
219  SUBROUTINE cp_ddapc_ewald_create(cp_ddapc_ewald, qmmm_decoupl, qm_cell, &
220  force_env_section, subsys_section, para_env)
221  TYPE(cp_ddapc_ewald_type), POINTER :: cp_ddapc_ewald
222  LOGICAL, INTENT(IN) :: qmmm_decoupl
223  TYPE(cell_type), POINTER :: qm_cell
224  TYPE(section_vals_type), POINTER :: force_env_section, subsys_section
225  TYPE(mp_para_env_type), POINTER :: para_env
226 
227  INTEGER :: my_val, npts(3), output_unit
228  INTEGER, DIMENSION(:), POINTER :: ngrids
229  LOGICAL :: analyt, decoupling, &
230  do_qmmm_periodic_decpl, do_restraint, &
231  do_restraintb, do_solvation
232  REAL(kind=dp) :: hmat(3, 3)
233  REAL(kind=dp), DIMENSION(:), POINTER :: gx, gy, gz, lg
234  TYPE(cell_type), POINTER :: dummy_cell, mm_cell
235  TYPE(cp_logger_type), POINTER :: logger
236  TYPE(section_vals_type), POINTER :: cell_section, grid_print_section, multipole_section, &
237  poisson_section, printc_section, qmmm_per_section, restraint_section, restraint_sectionb, &
238  solvation_section
239 
240  logger => cp_get_default_logger()
241  output_unit = cp_logger_get_default_io_unit(logger)
242  cpassert(.NOT. ASSOCIATED(cp_ddapc_ewald))
243  ALLOCATE (cp_ddapc_ewald)
244  NULLIFY (cp_ddapc_ewald%pw_grid_mm, &
245  cp_ddapc_ewald%pw_grid_qm, &
246  cp_ddapc_ewald%ewald_section, &
247  cp_ddapc_ewald%pw_pool_mm, &
248  cp_ddapc_ewald%pw_pool_qm, &
249  cp_ddapc_ewald%coeff_mm, &
250  cp_ddapc_ewald%coeff_qm)
251  NULLIFY (multipole_section)
252 
253  poisson_section => section_vals_get_subs_vals(force_env_section, "DFT%POISSON")
254  solvation_section => section_vals_get_subs_vals(force_env_section, "DFT%SCRF")
255  qmmm_per_section => section_vals_get_subs_vals(force_env_section, "QMMM%PERIODIC")
256  printc_section => section_vals_get_subs_vals(force_env_section, "PROPERTIES%FIT_CHARGE")
257  restraint_section => section_vals_get_subs_vals(force_env_section, "DFT%QS%DDAPC_RESTRAINT")
258  restraint_sectionb => section_vals_get_subs_vals(force_env_section, &
259  "PROPERTIES%ET_COUPLING%DDAPC_RESTRAINT_A")
260  CALL section_vals_get(solvation_section, explicit=do_solvation)
261  CALL section_vals_get(poisson_section, explicit=decoupling)
262  CALL section_vals_get(restraint_section, explicit=do_restraint)
263  CALL section_vals_get(restraint_sectionb, explicit=do_restraintb)
264  do_qmmm_periodic_decpl = qmmm_decoupl
265  cp_ddapc_ewald%do_solvation = do_solvation
266  cp_ddapc_ewald%do_qmmm_periodic_decpl = do_qmmm_periodic_decpl
267  cp_ddapc_ewald%do_property = cp_printkey_is_on(logger%iter_info, printc_section)
268  cp_ddapc_ewald%do_restraint = do_restraint .OR. do_restraintb
269  ! Determining the tasks and further check
270  IF (do_qmmm_periodic_decpl .AND. decoupling) THEN
271  ! Check than an additional POISSON section has not been defined. In case write a warning
272  IF (output_unit > 0) &
273  WRITE (output_unit, '(T2,"WARNING",A)') &
274  "A calculation with the QMMM periodic model has been requested.", &
275  "The explicit POISSON section in DFT section will be IGNORED.", &
276  "QM Electrostatic controlled only by the PERIODIC section in QMMM section"
277  decoupling = .false.
278  END IF
279  IF (decoupling) THEN
280  ! Simple decoupling technique
281  CALL section_vals_val_get(poisson_section, "POISSON_SOLVER", i_val=my_val)
282  SELECT CASE (my_val)
283  CASE (pw_poisson_multipole)
284  multipole_section => section_vals_get_subs_vals(poisson_section, "MULTIPOLE")
285  CASE DEFAULT
286  decoupling = .false.
287  END SELECT
288  END IF
289  cp_ddapc_ewald%do_decoupling = decoupling
290  IF (cp_ddapc_ewald%do_qmmm_periodic_decpl) THEN
291  ! QMMM periodic
292  multipole_section => section_vals_get_subs_vals(qmmm_per_section, "MULTIPOLE")
293  END IF
294  cp_ddapc_ewald%ewald_section => multipole_section
295  IF (cp_ddapc_ewald%do_decoupling .OR. cp_ddapc_ewald%do_qmmm_periodic_decpl) THEN
296  ! Do we do the calculation analytically or interpolating the g-space factor?
297  CALL section_vals_val_get(multipole_section, "ANALYTICAL_GTERM", l_val=analyt)
298  IF (.NOT. analyt) THEN
299  CALL section_vals_val_get(multipole_section, "ngrids", i_vals=ngrids)
300  npts = ngrids
301 
302  NULLIFY (lg, gx, gy, gz)
303  hmat = qm_cell%hmat
304  CALL eval_lg(multipole_section, hmat, qm_cell%deth, lg, gx, gy, gz)
305  grid_print_section => section_vals_get_subs_vals(force_env_section, "PRINT%GRID_INFORMATION")
306  CALL setup_ewald_spline(pw_grid=cp_ddapc_ewald%pw_grid_qm, pw_pool=cp_ddapc_ewald%pw_pool_qm, &
307  coeff=cp_ddapc_ewald%coeff_qm, lg=lg, gx=gx, gy=gy, gz=gz, hmat=hmat, npts=npts, &
308  param_section=multipole_section, tag="ddapc", &
309  para_env=para_env, print_section=grid_print_section)
310  DEALLOCATE (lg)
311  DEALLOCATE (gx)
312  DEALLOCATE (gy)
313  DEALLOCATE (gz)
314  IF (cp_ddapc_ewald%do_qmmm_periodic_decpl) THEN
315  NULLIFY (mm_cell, dummy_cell)
316  cell_section => section_vals_get_subs_vals(subsys_section, "CELL")
317  CALL read_cell(mm_cell, dummy_cell, cell_section=cell_section, para_env=para_env)
318  hmat = mm_cell%hmat
319  CALL eval_lg(multipole_section, hmat, mm_cell%deth, lg, gx, gy, gz)
320  grid_print_section => section_vals_get_subs_vals(force_env_section, "PRINT%GRID_INFORMATION")
321  CALL setup_ewald_spline(pw_grid=cp_ddapc_ewald%pw_grid_mm, pw_pool=cp_ddapc_ewald%pw_pool_mm, &
322  coeff=cp_ddapc_ewald%coeff_mm, lg=lg, gx=gx, gy=gy, gz=gz, hmat=hmat, npts=npts, &
323  param_section=multipole_section, tag="ddapc", para_env=para_env, &
324  print_section=grid_print_section)
325  DEALLOCATE (lg)
326  DEALLOCATE (gx)
327  DEALLOCATE (gy)
328  DEALLOCATE (gz)
329  CALL cell_release(dummy_cell)
330  CALL cell_release(mm_cell)
331  END IF
332  END IF
333  END IF
334  END SUBROUTINE cp_ddapc_ewald_create
335 
336 ! **************************************************************************************************
337 !> \brief ...
338 !> \param multipole_section ...
339 !> \param hmat ...
340 !> \param deth ...
341 !> \param LG ...
342 !> \param gx ...
343 !> \param gy ...
344 !> \param gz ...
345 !> \par History
346 !> none
347 !> \author Teodoro Laino - [tlaino]
348 ! **************************************************************************************************
349  SUBROUTINE eval_lg(multipole_section, hmat, deth, LG, gx, gy, gz)
350  TYPE(section_vals_type), POINTER :: multipole_section
351  REAL(kind=dp), INTENT(IN) :: hmat(3, 3), deth
352  REAL(kind=dp), DIMENSION(:), POINTER :: lg, gx, gy, gz
353 
354  INTEGER :: i, k1, k2, k3, n_rep, ndim, nmax1, &
355  nmax2, nmax3
356  REAL(kind=dp) :: alpha, eps, fac, fs, fvec(3), galpha, &
357  gsq, gsqi, rcut, tol, tol1
358 
359  rcut = min(hmat(1, 1), hmat(2, 2), hmat(3, 3))/2.0_dp
360  CALL section_vals_val_get(multipole_section, "RCUT", n_rep_val=n_rep)
361  IF (n_rep == 1) CALL section_vals_val_get(multipole_section, "RCUT", r_val=rcut)
362  CALL section_vals_val_get(multipole_section, "EWALD_PRECISION", r_val=eps)
363  eps = min(abs(eps), 0.5_dp)
364  tol = sqrt(abs(log(eps*rcut)))
365  alpha = sqrt(abs(log(eps*rcut*tol)))/rcut
366  galpha = 1.0_dp/(4.0_dp*alpha*alpha)
367  tol1 = sqrt(-log(eps*rcut*(2.0_dp*tol*alpha)**2))
368  nmax1 = nint(0.25_dp + hmat(1, 1)*alpha*tol1/pi)
369  nmax2 = nint(0.25_dp + hmat(2, 2)*alpha*tol1/pi)
370  nmax3 = nint(0.25_dp + hmat(3, 3)*alpha*tol1/pi)
371  fac = 1.e0_dp/deth
372  fvec = 2.0_dp*pi/(/hmat(1, 1), hmat(2, 2), hmat(3, 3)/)
373  ndim = (nmax1 + 1)*(2*nmax2 + 1)*(2*nmax3 + 1) - 1
374  ALLOCATE (lg(ndim))
375  ALLOCATE (gx(ndim))
376  ALLOCATE (gy(ndim))
377  ALLOCATE (gz(ndim))
378 
379  i = 0
380  DO k1 = 0, nmax1
381  DO k2 = -nmax2, nmax2
382  DO k3 = -nmax3, nmax3
383  IF (k1 == 0 .AND. k2 == 0 .AND. k3 == 0) cycle
384  i = i + 1
385  fs = 2.0_dp; IF (k1 == 0) fs = 1.0_dp
386  gx(i) = fvec(1)*real(k1, kind=dp)
387  gy(i) = fvec(2)*real(k2, kind=dp)
388  gz(i) = fvec(3)*real(k3, kind=dp)
389  gsq = gx(i)*gx(i) + gy(i)*gy(i) + gz(i)*gz(i)
390  gsqi = fs/gsq
391  lg(i) = fac*gsqi*exp(-galpha*gsq)
392  END DO
393  END DO
394  END DO
395 
396  END SUBROUTINE eval_lg
397 
398 ! **************************************************************************************************
399 !> \brief ...
400 !> \param cp_ddapc_ewald ...
401 !> \par History
402 !> none
403 !> \author Teodoro Laino - [tlaino]
404 ! **************************************************************************************************
405  SUBROUTINE cp_ddapc_ewald_release(cp_ddapc_ewald)
406  TYPE(cp_ddapc_ewald_type), POINTER :: cp_ddapc_ewald
407 
408  IF (ASSOCIATED(cp_ddapc_ewald)) THEN
409  IF (ASSOCIATED(cp_ddapc_ewald%coeff_qm)) THEN
410  CALL cp_ddapc_ewald%pw_pool_qm%give_back_pw(cp_ddapc_ewald%coeff_qm)
411  DEALLOCATE (cp_ddapc_ewald%coeff_qm)
412  END IF
413  IF (ASSOCIATED(cp_ddapc_ewald%coeff_mm)) THEN
414  CALL cp_ddapc_ewald%pw_pool_mm%give_back_pw(cp_ddapc_ewald%coeff_mm)
415  DEALLOCATE (cp_ddapc_ewald%coeff_mm)
416  END IF
417  IF (ASSOCIATED(cp_ddapc_ewald%pw_pool_qm)) THEN
418  CALL pw_pool_release(cp_ddapc_ewald%pw_pool_qm)
419  cpassert(.NOT. ASSOCIATED(cp_ddapc_ewald%pw_pool_qm))
420  END IF
421  IF (ASSOCIATED(cp_ddapc_ewald%pw_pool_mm)) THEN
422  CALL pw_pool_release(cp_ddapc_ewald%pw_pool_mm)
423  cpassert(.NOT. ASSOCIATED(cp_ddapc_ewald%pw_pool_mm))
424  END IF
425  IF (ASSOCIATED(cp_ddapc_ewald%pw_grid_qm)) THEN
426  CALL pw_grid_release(cp_ddapc_ewald%pw_grid_qm)
427  cpassert(.NOT. ASSOCIATED(cp_ddapc_ewald%pw_grid_qm))
428  END IF
429  IF (ASSOCIATED(cp_ddapc_ewald%pw_grid_mm)) THEN
430  CALL pw_grid_release(cp_ddapc_ewald%pw_grid_mm)
431  cpassert(.NOT. ASSOCIATED(cp_ddapc_ewald%pw_grid_mm))
432  END IF
433  DEALLOCATE (cp_ddapc_ewald)
434  END IF
435 
436  END SUBROUTINE cp_ddapc_ewald_release
437 
438 END MODULE cp_ddapc_types
static GRID_HOST_DEVICE double fac(const int i)
Factorial function, e.g. fac(5) = 5! = 120.
Definition: grid_common.h:48
Handles all functions related to the CELL.
Definition: cell_methods.F:15
recursive subroutine, public read_cell(cell, cell_ref, use_ref_cell, cell_section, check_for_ref, para_env)
...
Definition: cell_methods.F:272
Handles all functions related to the CELL.
Definition: cell_types.F:15
subroutine, public cell_release(cell)
releases the given cell (see doc/ReferenceCounting.html)
Definition: cell_types.F:559
contains information regarding the decoupling/recoupling method of Bloechl
subroutine, public ddapc_eval_ami(GAmI, c0, gfunc, w, particle_set, gcut, rho_tot_g, radii, iw, Vol)
Computes the inverse AmI of the Am matrix.
recursive subroutine, public ewald_ddapc_pot(cp_para_env, coeff, factor, cell, multipole_section, particle_set, M, radii)
Evaluates the Ewald term E2 and E3 energy term for the decoupling/coupling of periodic images.
subroutine, public solvation_ddapc_pot(solvation_section, particle_set, M, radii)
Evaluates the electrostatic potential due to a simple solvation model Spherical cavity in a dieletric...
subroutine, public ddapc_eval_gfunc(gfunc, w, gcut, rho_tot_g, radii)
...
contains information regarding the decoupling/recoupling method of Bloechl
subroutine, public cp_ddapc_release(cp_ddapc_env)
...
subroutine, public cp_ddapc_create(cp_para_env, cp_ddapc_env, cp_ddapc_ewald, particle_set, radii, cell, super_cell, rho_tot_g, gcut, iw2, Vol, force_env_section)
...
subroutine, public cp_ddapc_ewald_create(cp_ddapc_ewald, qmmm_decoupl, qm_cell, force_env_section, subsys_section, para_env)
...
subroutine, public cp_ddapc_ewald_release(cp_ddapc_ewald)
...
various routines to log and control the output. The idea is that decisions about where to log should ...
integer function, public cp_logger_get_default_io_unit(logger)
returns the unit nr for the ionode (-1 on all other processors) skips as well checks if the procs cal...
type(cp_logger_type) function, pointer, public cp_get_default_logger()
returns the default logger
routines to handle the output, The idea is to remove the decision of wheter to output and what to out...
logical function, public cp_printkey_is_on(iteration_info, print_key)
returns true if the printlevel activates this printkey does not look if this iteration it should be p...
Setting up the Spline coefficients used to Interpolate the G-Term in Ewald sums.
subroutine, public setup_ewald_spline(pw_grid, pw_pool, coeff, LG, gx, gy, gz, hmat, npts, param_section, tag, print_section, para_env)
Setup of the G-space Ewald Term Spline Coefficients.
objects that represent the structure of input sections and the data contained in an input section
recursive type(section_vals_type) function, pointer, public section_vals_get_subs_vals(section_vals, subsection_name, i_rep_section, can_return_null)
returns the values of the requested subsection
subroutine, public section_vals_get(section_vals, ref_count, n_repetition, n_subs_vals_rep, section, explicit)
returns various attributes about the section_vals
subroutine, public section_vals_val_get(section_vals, keyword_name, i_rep_section, i_rep_val, n_rep_val, val, l_val, i_val, r_val, c_val, l_vals, i_vals, r_vals, c_vals, explicit)
returns the requested value
Defines the basic variable types.
Definition: kinds.F:23
integer, parameter, public dp
Definition: kinds.F:34
Definition of mathematical constants and functions.
Definition: mathconstants.F:16
real(kind=dp), parameter, public pi
Interface to the message passing library MPI.
Define the data structure for the particle information.
This module defines the grid data type and some basic operations on it.
Definition: pw_grids.F:36
subroutine, public pw_grid_release(pw_grid)
releases the given pw grid
Definition: pw_grids.F:2133
functions related to the poisson solver on regular grids
integer, parameter, public pw_poisson_multipole
Manages a pool of grids (to be used for example as tmp objects), but can also be used to instantiate ...
Definition: pw_pool_types.F:24
subroutine, public pw_pool_release(pool)
releases the given pool (see cp2k/doc/ReferenceCounting.html)