(git:98357aa)
Loading...
Searching...
No Matches
dimer_types.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief Contains types used for a Dimer Method calculations
10!> \par History
11!> Luca Bellucci 11.2017 added kdimer and beta
12!> \author Luca Bellucci and Teodoro Laino - created [tlaino] - 01.2008
13! **************************************************************************************************
15
16 USE cell_types, ONLY: &
37 USE kinds, ONLY: default_path_length,&
38 dp
44#include "../base/base_uses.f90"
45
46 IMPLICIT NONE
47 PRIVATE
48
49 LOGICAL, PRIVATE, PARAMETER :: debug_this_module = .true.
50 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'dimer_types'
51
52 PUBLIC :: dimer_env_type, &
59
60! **************************************************************************************************
61!> \brief Type containing all informations abour the rotation of the Dimer
62!> \par History
63!> none
64!> \author Luca Bellucci and Teodoro Laino - created [tlaino] - 01.2008
65! **************************************************************************************************
66 TYPE dimer_rotational_type
67 ! Rotational parameters
68 INTEGER :: rotation_step = 0
69 LOGICAL :: interpolate_gradient = .false.
70 REAL(KIND=dp) :: angle_tol = 0.0_dp, angle1 = 0.0_dp, angle2 = 0.0_dp, &
71 dcdp = 0.0_dp, curvature = 0.0_dp
72 REAL(KIND=dp), POINTER, DIMENSION(:) :: g0 => null(), g1 => null(), g1p => null()
73 END TYPE dimer_rotational_type
74
75! **************************************************************************************************
76!> \brief Type containing all informations abour the translation of the Dimer
77!> \par History
78!> none
79!> \author Luca Bellucci and Teodoro Laino - created [tlaino] - 01.2008
80! **************************************************************************************************
81 TYPE dimer_translational_type
82 ! Translational parameters
83 REAL(KIND=dp), POINTER, DIMENSION(:) :: tls_vec => null()
84 END TYPE dimer_translational_type
85
86! **************************************************************************************************
87!> \brief Conjugate Directions type
88!> \par History
89!> none
90!> \author Luca Bellucci and Teodoro Laino - created [tlaino] - 01.2008
91! **************************************************************************************************
92 TYPE dimer_cg_rot_type
93 REAL(KIND=dp) :: norm_theta = 0.0_dp, norm_theta_old = 0.0_dp, norm_h = 0.0_dp
94 REAL(KIND=dp), POINTER, DIMENSION(:) :: nvec_old => null()
95 END TYPE dimer_cg_rot_type
96
97! **************************************************************************************************
98!> \brief Defines the environment for a Dimer Method calculation
99!> \par History
100!> none
101!> \author Luca Bellucci and Teodoro Laino - created [tlaino] - 01.2008
102! **************************************************************************************************
104 INTEGER :: ref_count = 0
105 REAL(kind=dp) :: dr = 0.0_dp
106 REAL(kind=dp), POINTER, DIMENSION(:) :: nvec => null()
107 REAL(kind=dp) :: beta = 0.0_dp
108 TYPE(dimer_rotational_type) :: rot = dimer_rotational_type()
109 TYPE(dimer_translational_type) :: tsl = dimer_translational_type()
110 TYPE(dimer_cg_rot_type) :: cg_rot = dimer_cg_rot_type()
111 LOGICAL :: kdimer = .false.
112 END TYPE dimer_env_type
113
114CONTAINS
115
116! **************************************************************************************************
117!> \brief ...
118!> \param dimer_env ...
119!> \param subsys ...
120!> \param globenv ...
121!> \param dimer_section ...
122!> \param force_env ...
123!> \par History
124!> Luca Bellucci 11.2017 added K-DIMER and BETA
125!> 2016/03/03 [LTong] changed input natom to subsys
126!> \author Luca Bellucci and Teodoro Laino - created [tlaino] - 01.2008
127! **************************************************************************************************
128 SUBROUTINE dimer_env_create(dimer_env, subsys, globenv, dimer_section, force_env)
129 TYPE(dimer_env_type), POINTER :: dimer_env
130 TYPE(cp_subsys_type), POINTER :: subsys
131 TYPE(global_environment_type), POINTER :: globenv
132 TYPE(section_vals_type), POINTER :: dimer_section
133 TYPE(force_env_type), POINTER :: force_env
134
135 INTEGER :: i, j, k, natom, unit_nr
136 REAL(kind=dp) :: norm, xval(3)
137 TYPE(cell_type), POINTER :: cell
138
139 NULLIFY (cell)
141 cpassert(.NOT. ASSOCIATED(dimer_env))
142 ALLOCATE (dimer_env)
143 dimer_env%ref_count = 1
144 ! Setup NVEC
145 ! get natom
146 CALL cp_subsys_get(subsys=subsys, cell=cell, natom=natom)
147 ! Allocate the working arrays
148 ALLOCATE (dimer_env%rot%g0(natom*3))
149 ALLOCATE (dimer_env%rot%g1(natom*3))
150 ALLOCATE (dimer_env%rot%g1p(natom*3))
151 ! Read dimer vector from input
152 CALL dimer_init_vector(dimer_env, dimer_section, natom, &
153 unit_nr, globenv, force_env)
154 IF (unit_nr > 0) THEN
155 WRITE (unit_nr, "(/,T2,A,T9,A,T71,I10)") &
156 "DIMER|", "Dimension of dimer vector (natom * 3)", natom*3
157 DO j = 1, natom
158 WRITE (unit_nr, "(T2,A,T9,3(F12.6,3X))") &
159 "DIMER|", dimer_env%nvec(3*j - 2:3*j)
160 END DO
161 END IF
162 ! Transform input cell
163 DO i = 1, natom
164 xval(:) = dimer_env%nvec(3*i - 2:3*i)
165 CALL cell_transform_input_cartesian(cell, xval)
166 dimer_env%nvec(3*i - 2:3*i) = xval(:)
167 END DO
168 ! Check for translation in the dimer vector and remove them
169 IF (natom > 1) THEN
170 xval = 0.0_dp
171 DO j = 1, natom
172 DO k = 1, 3
173 i = (j - 1)*3 + k
174 xval(k) = xval(k) + dimer_env%nvec(i)
175 END DO
176 END DO
177 IF (unit_nr > 0) THEN
178 WRITE (unit_nr, "(/,T2,A,T9,A)") &
179 "DIMER|", "Overall translation to be removed from the initial dimer vector"
180 WRITE (unit_nr, "(T2,A,T9,3(F12.6,3X))") &
181 "DIMER|", xval(1:3)
182 END IF
183 ! Subtract net translations
184 xval = xval/real(natom*3, kind=dp)
185 DO j = 1, natom
186 DO k = 1, 3
187 i = (j - 1)*3 + k
188 dimer_env%nvec(i) = dimer_env%nvec(i) - xval(k)
189 END DO
190 END DO
191 END IF
192 ! set nvec components to zero for the corresponding constraints
193 CALL dimer_fixed_atom_control(dimer_env%nvec, subsys, unit_nr)
194 ! Normalize dimer vector
195 norm = sqrt(sum(dimer_env%nvec**2))
196 IF (norm <= epsilon(0.0_dp)) THEN
197 cpabort("The norm of the dimer vector is 0! Calculation cannot proceed further.")
198 END IF
199 IF (unit_nr > 0) THEN
200 WRITE (unit_nr, "(T2,A,T9,A,T69,F12.6)") &
201 "DIMER|", "Norm of dimer vector to be normalized by rescaling", norm
202 END IF
203 dimer_env%nvec = dimer_env%nvec/norm
204 dimer_env%rot%rotation_step = do_first_rotation_step
205 CALL section_vals_val_get(dimer_section, "DR", r_val=dimer_env%dr)
206 CALL section_vals_val_get(dimer_section, "INTERPOLATE_GRADIENT", &
207 l_val=dimer_env%rot%interpolate_gradient)
208 CALL section_vals_val_get(dimer_section, "ANGLE_TOLERANCE", &
209 r_val=dimer_env%rot%angle_tol)
210 CALL section_vals_val_get(dimer_section, "K-DIMER", &
211 l_val=dimer_env%kdimer)
212 CALL section_vals_val_get(dimer_section, "BETA", &
213 r_val=dimer_env%beta)
214 ! initialise values
215 dimer_env%cg_rot%norm_h = 1.0_dp
216 dimer_env%rot%g0 = 0.0_dp
217 dimer_env%rot%g1 = 0.0_dp
218 dimer_env%rot%g1p = 0.0_dp
219 ALLOCATE (dimer_env%cg_rot%nvec_old(natom*3))
220 END SUBROUTINE dimer_env_create
221
222! **************************************************************************************************
223!> \brief ...
224!> \param dimer_env ...
225!> \par History
226!> none
227!> \author Luca Bellucci and Teodoro Laino - created [tlaino] - 01.2008
228! **************************************************************************************************
229 SUBROUTINE dimer_env_retain(dimer_env)
230 TYPE(dimer_env_type), POINTER :: dimer_env
231
232 cpassert(ASSOCIATED(dimer_env))
233 cpassert(dimer_env%ref_count > 0)
234 dimer_env%ref_count = dimer_env%ref_count + 1
235 END SUBROUTINE dimer_env_retain
236
237! **************************************************************************************************
238!> \brief ...
239!> \param dimer_env ...
240!> \par History
241!> none
242!> \author Luca Bellucci and Teodoro Laino - created [tlaino] - 01.2008
243! **************************************************************************************************
244 SUBROUTINE dimer_env_release(dimer_env)
245 TYPE(dimer_env_type), POINTER :: dimer_env
246
247 IF (ASSOCIATED(dimer_env)) THEN
248 cpassert(dimer_env%ref_count > 0)
249 dimer_env%ref_count = dimer_env%ref_count - 1
250 IF (dimer_env%ref_count == 0) THEN
251 IF (ASSOCIATED(dimer_env%nvec)) THEN
252 DEALLOCATE (dimer_env%nvec)
253 END IF
254 IF (ASSOCIATED(dimer_env%rot%g0)) THEN
255 DEALLOCATE (dimer_env%rot%g0)
256 END IF
257 IF (ASSOCIATED(dimer_env%rot%g1)) THEN
258 DEALLOCATE (dimer_env%rot%g1)
259 END IF
260 IF (ASSOCIATED(dimer_env%rot%g1p)) THEN
261 DEALLOCATE (dimer_env%rot%g1p)
262 END IF
263 IF (ASSOCIATED(dimer_env%cg_rot%nvec_old)) THEN
264 DEALLOCATE (dimer_env%cg_rot%nvec_old)
265 END IF
266 ! No need to deallocate tls_vec (just a pointer to aother local array)
267 NULLIFY (dimer_env%tsl%tls_vec)
268 DEALLOCATE (dimer_env)
269 END IF
270 END IF
271 END SUBROUTINE dimer_env_release
272
273! **************************************************************************************************
274!> \brief Set parts of a given array vec to zero according to fixed atom constraints.
275!> When atoms are (partially) fixed then the relevant components of
276!> nvec should be set to zero. Furthermore, the relevant components
277!> of the gradient in CG should also be set to zero.
278!> \param vec : vector to be modified
279!> \param subsys : subsys type object used by CP2k
280!> \param unit : unit to write message to
281!> \par History
282!> 2016/03/03 [LTong] created
283!> \author Lianheng Tong [LTong]
284! **************************************************************************************************
285 SUBROUTINE dimer_fixed_atom_control(vec, subsys, unit)
286 REAL(kind=dp), DIMENSION(:), INTENT(INOUT) :: vec
287 TYPE(cp_subsys_type), POINTER :: subsys
288 INTEGER, INTENT(IN), OPTIONAL :: unit
289
290 INTEGER :: ii, ikind, ind, iparticle, nfixed_atoms, &
291 nkinds
292 TYPE(fixd_constraint_type), DIMENSION(:), POINTER :: fixd_list
293 TYPE(molecule_kind_list_type), POINTER :: molecule_kinds
294 TYPE(molecule_kind_type), DIMENSION(:), POINTER :: molecule_kind_set
295 TYPE(molecule_kind_type), POINTER :: molecule_kind
296
297 NULLIFY (molecule_kinds, molecule_kind, fixd_list)
298
299 ! need to get constraint information from molecule information
300 CALL cp_subsys_get(subsys=subsys, &
301 molecule_kinds=molecule_kinds)
302 molecule_kind_set => molecule_kinds%els
303
304 ! get total number of fixed atoms
305 ! nkinds is the kinds of molecules, not atoms
306 nkinds = molecule_kinds%n_els
307 DO ikind = 1, nkinds
308 molecule_kind => molecule_kind_set(ikind)
309 CALL get_molecule_kind(molecule_kind, &
310 nfixd=nfixed_atoms, &
311 fixd_list=fixd_list)
312 IF (ASSOCIATED(fixd_list)) THEN
313 IF (PRESENT(unit)) THEN
314 IF (unit > 0) THEN
315 WRITE (unit, "(/,T2,A,T9,A,T71,I10)") &
316 "DIMER|", "Number of fixed atoms to adjust dimer vector", nfixed_atoms
317 END IF
318 END IF
319 DO ii = 1, nfixed_atoms
320 IF (.NOT. fixd_list(ii)%restraint%active) THEN
321 iparticle = fixd_list(ii)%fixd
322 ind = (iparticle - 1)*3
323 ! apply constraint to nvec
324 SELECT CASE (fixd_list(ii)%itype)
325 CASE (use_perd_x)
326 vec(ind + 1) = 0.0_dp
327 CASE (use_perd_y)
328 vec(ind + 2) = 0.0_dp
329 CASE (use_perd_z)
330 vec(ind + 3) = 0.0_dp
331 CASE (use_perd_xy)
332 vec(ind + 1) = 0.0_dp
333 vec(ind + 2) = 0.0_dp
334 CASE (use_perd_xz)
335 vec(ind + 1) = 0.0_dp
336 vec(ind + 3) = 0.0_dp
337 CASE (use_perd_yz)
338 vec(ind + 2) = 0.0_dp
339 vec(ind + 3) = 0.0_dp
340 CASE (use_perd_xyz)
341 vec(ind + 1) = 0.0_dp
342 vec(ind + 2) = 0.0_dp
343 vec(ind + 3) = 0.0_dp
344 END SELECT
345 END IF ! .NOT.fixd_list(ii)%restraint%active
346 END DO ! ii
347 END IF ! ASSOCIATED(fixd_list)
348 END DO ! ikind
349 END SUBROUTINE dimer_fixed_atom_control
350
351! **************************************************************************************************
352!> \brief Read dimer vector from input and store into dimer_env%nvec
353!> \param dimer_env ...
354!> \param dimer_section ...
355!> \param natom ...
356!> \param unit ...
357!> \param globenv ...
358!> \param force_env ...
359!> \par History
360!> 2026/05 created
361!> \author HE Zilong
362! **************************************************************************************************
363 SUBROUTINE dimer_init_vector(dimer_env, dimer_section, natom, unit, globenv, force_env)
364 TYPE(dimer_env_type), INTENT(INOUT), POINTER :: dimer_env
365 TYPE(section_vals_type), INTENT(INOUT), POINTER :: dimer_section
366 INTEGER, INTENT(IN) :: natom, unit
367 TYPE(global_environment_type), INTENT(IN), POINTER :: globenv
368 TYPE(force_env_type), POINTER :: force_env
369
370 CHARACTER(LEN=17) :: vib_name
371 CHARACTER(LEN=default_path_length) :: molden_name
372 INTEGER :: dimer_init_method, i, ierr, isize, j, &
373 n_rep_val, nvec_size, vib_list_size
374 INTEGER, ALLOCATABLE, DIMENSION(:) :: vib_id_list
375 LOGICAL :: explicit, found
376 REAL(kind=dp), ALLOCATABLE, DIMENSION(:) :: array_r, vib_wt_list
377 REAL(kind=dp), DIMENSION(:), POINTER :: array
378 TYPE(cp_parser_type) :: parser
379 TYPE(mp_para_env_type), POINTER :: para_env
380 TYPE(section_vals_type), POINTER :: nvec_section
381
382 para_env => force_env%para_env
383 nvec_section => section_vals_get_subs_vals(dimer_section, "DIMER_VECTOR")
384 NULLIFY (array)
385 nvec_size = natom*3
386
387 ALLOCATE (dimer_env%nvec(nvec_size))
388 dimer_env%nvec(:) = 0.0_dp
389 CALL section_vals_get(nvec_section, explicit=explicit)
390 IF (explicit) THEN
391 IF (unit > 0) WRITE (unit, "(/,T2,A,T9,A)") &
392 "DIMER|", "Initial dimer vector read from input DIMER_VECTOR section"
393 isize = 0
394 CALL section_vals_val_get(nvec_section, "_DEFAULT_KEYWORD_", n_rep_val=n_rep_val)
395 DO i = 1, n_rep_val
396 CALL section_vals_val_get(nvec_section, "_DEFAULT_KEYWORD_", r_vals=array, i_rep_val=i)
397 DO j = 1, SIZE(array)
398 isize = isize + 1
399 IF (isize <= nvec_size) THEN
400 dimer_env%nvec(isize) = array(j)
401 ELSE
402 cpabort("Size of input DIMER_VECTOR more than natom * 3")
403 END IF
404 END DO
405 END DO
406 IF (isize /= nvec_size) THEN
407 cpabort("Size of input DIMER_VECTOR inconsistent with natom * 3")
408 END IF
409 ELSE
410 CALL section_vals_val_get(dimer_section, "INITIALIZATION_METHOD", i_val=dimer_init_method)
411 SELECT CASE (dimer_init_method)
412 CASE (dimer_init_random)
413 IF (unit > 0) WRITE (unit, "(/,T2,A,T9,A)") &
414 "DIMER|", "Initial dimer vector generated randomly"
415 CALL globenv%gaussian_rng_stream%fill(dimer_env%nvec)
416 CASE (dimer_init_molden)
417 CALL section_vals_val_get(dimer_section, "VIB_MOLDEN_NAME", explicit=explicit)
418 IF (.NOT. explicit) THEN
419 cpabort("INITIALIZATION_METHOD MOLDEN requires VIB_MOLDEN_NAME")
420 END IF
421 CALL section_vals_val_get(dimer_section, "VIB_MOLDEN_NAME", c_val=molden_name)
422 IF (unit > 0) THEN
423 WRITE (unit, "(/,T2,A,T9,A)") &
424 "DIMER|", "Initial dimer vector by linear combination of normal modes from:"
425 WRITE (unit, "(T2,A,T9,A)") &
426 "DIMER|", trim(adjustl(molden_name))
427 END IF
428 ! Build lists of indices and weights for linear combination
429 CALL vib_get_index_weight(dimer_section, vib_id_list, vib_wt_list, &
430 vib_list_size, unit)
431 ! Find vibrational modes in molden and do linear combination
432 ALLOCATE (array_r(nvec_size))
433 CALL parser_create(parser, molden_name, para_env=para_env, apply_preprocessing=.false.)
434 vib_modes: DO i = 1, vib_list_size
435 ! Format below is from molden_utils.F
436 WRITE (unit=vib_name, fmt='(T2,A,1X,I6)') "vibration", vib_id_list(i)
437 CALL parser_search_string(parser, trim(vib_name), &
438 ignore_case=.false., found=found, &
439 begin_line=.true., search_from_begin_of_file=.true.)
440 IF (.NOT. found) CALL cp_abort(__location__, &
441 "Could not found <"//vib_name//"> from molden file")
442 DO j = 1, natom
443 CALL parser_get_next_line(parser, 1)
444 READ (unit=parser%input_line, fmt=*, iostat=ierr) &
445 array_r(3*j - 2), array_r(3*j - 1), array_r(3*j)
446 IF (ierr /= 0) THEN
447 CALL cp_abort(__location__, &
448 "Error while reading MOLDEN file: cannot parse the line "// &
449 trim(adjustl(cp_to_string(j)))//" of <"//vib_name//"> "// &
450 "for components of the normal mode")
451 END IF
452 END DO
453 dimer_env%nvec(:) = dimer_env%nvec(:) + array_r(:)*vib_wt_list(i)
454 END DO vib_modes
455 CALL parser_release(parser)
456 IF (ALLOCATED(array_r)) DEALLOCATE (array_r)
457 IF (ALLOCATED(vib_id_list)) DEALLOCATE (vib_id_list)
458 IF (ALLOCATED(vib_wt_list)) DEALLOCATE (vib_wt_list)
459 CASE DEFAULT
460 cpabort("Invalid or not yet implemented dimer initialization method")
461 END SELECT
462 END IF
463
464 END SUBROUTINE dimer_init_vector
465
466! **************************************************************************************************
467!> \brief Read VIB_INDEX and VIB_WEIGHT under DIMER section
468!> \param dimer_section ...
469!> \param vib_id_list ...
470!> \param vib_wt_list ...
471!> \param vib_list_size ...
472!> \param unit ...
473!> \par History
474!> 2026/05 created
475!> \author HE Zilong
476! **************************************************************************************************
477 SUBROUTINE vib_get_index_weight(dimer_section, vib_id_list, vib_wt_list, vib_list_size, unit)
478 TYPE(section_vals_type), INTENT(IN), POINTER :: dimer_section
479 INTEGER, ALLOCATABLE, DIMENSION(:), INTENT(OUT) :: vib_id_list
480 REAL(kind=dp), ALLOCATABLE, DIMENSION(:), &
481 INTENT(OUT) :: vib_wt_list
482 INTEGER, INTENT(OUT) :: vib_list_size
483 INTEGER, INTENT(IN) :: unit
484
485 INTEGER :: i, isize, n_rep_val, vib_id_size, &
486 vib_wt_size
487 INTEGER, DIMENSION(:), POINTER :: tmpilist
488 REAL(kind=dp), DIMENSION(:), POINTER :: tmprlist
489
490 vib_id_size = 0
491 CALL section_vals_val_get(dimer_section, "VIB_INDEX", n_rep_val=n_rep_val)
492 DO i = 1, n_rep_val
493 CALL section_vals_val_get(dimer_section, "VIB_INDEX", &
494 i_vals=tmpilist, i_rep_val=i)
495 vib_id_size = vib_id_size + SIZE(tmpilist)
496 END DO
497 ALLOCATE (vib_id_list(vib_id_size))
498 isize = 0
499 DO i = 1, n_rep_val
500 CALL section_vals_val_get(dimer_section, "VIB_INDEX", &
501 i_vals=tmpilist, i_rep_val=i)
502 vib_id_list(isize + 1:isize + SIZE(tmpilist)) = tmpilist
503 isize = isize + SIZE(tmpilist)
504 END DO
505
506 vib_wt_size = 0
507 CALL section_vals_val_get(dimer_section, "VIB_WEIGHT", n_rep_val=n_rep_val)
508 DO i = 1, n_rep_val
509 CALL section_vals_val_get(dimer_section, "VIB_WEIGHT", &
510 r_vals=tmprlist, i_rep_val=i)
511 vib_wt_size = vib_wt_size + SIZE(tmprlist)
512 END DO
513 ALLOCATE (vib_wt_list(vib_wt_size))
514 isize = 0
515 DO i = 1, n_rep_val
516 CALL section_vals_val_get(dimer_section, "VIB_WEIGHT", &
517 r_vals=tmprlist, i_rep_val=i)
518 vib_wt_list(isize + 1:isize + SIZE(tmprlist)) = tmprlist
519 isize = isize + SIZE(tmprlist)
520 END DO
521
522 IF (vib_id_size /= vib_wt_size) THEN
523 CALL cp_abort(__location__, &
524 "Inconsistent count of values speficied in input between "// &
525 "VIB_INDEX ("//trim(adjustl(cp_to_string(vib_id_size)))//") "// &
526 "and VIB_WEIGHT ("//trim(adjustl(cp_to_string(vib_wt_size)))//")")
527 ELSE
528 vib_list_size = vib_id_size
529 END IF
530 IF (unit > 0) THEN
531 WRITE (unit, "(/,T2,A,T9,A)") &
532 "DIMER|", "Indices and weights of vibrational modes in linear combination"
533 DO i = 1, vib_list_size
534 WRITE (unit, "(T2,A,T10,I6,T18,F12.6)") &
535 "DIMER|", vib_id_list(i), vib_wt_list(i)
536 END DO
537 END IF
538
539 END SUBROUTINE vib_get_index_weight
540
541END MODULE dimer_types
Handles all functions related to the CELL.
Definition cell_types.F:15
integer, parameter, public use_perd_xyz
Definition cell_types.F:42
integer, parameter, public use_perd_y
Definition cell_types.F:42
integer, parameter, public use_perd_xz
Definition cell_types.F:42
integer, parameter, public use_perd_x
Definition cell_types.F:42
integer, parameter, public use_perd_z
Definition cell_types.F:42
integer, parameter, public use_perd_yz
Definition cell_types.F:42
integer, parameter, public use_perd_xy
Definition cell_types.F:42
subroutine, public cell_transform_input_cartesian(cell, vector)
Transform a Cartesian real-space vector from the user input cell frame into CP2K's canonical internal...
Definition cell_types.F:284
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...
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_get_next_line(parser, nline, at_end)
Read the next input line and broadcast the input information. Skip (nline-1) lines and skip also all ...
subroutine, public parser_search_string(parser, string, ignore_case, found, line, begin_line, search_from_begin_of_file)
Search a string pattern in a file defined by its logical unit number "unit". A case sensitive search ...
Utility routines to read data from files. Kept as close as possible to the old parser because.
subroutine, public parser_release(parser)
releases the parser
subroutine, public parser_create(parser, file_name, unit_nr, para_env, end_section_label, separator_chars, comment_char, continuation_char, quote_char, section_char, parse_white_lines, initial_variables, apply_preprocessing)
Start a parser run. Initial variables allow to @SET stuff before opening the file.
types that represent a subsys, i.e. a part of the system
subroutine, public cp_subsys_get(subsys, ref_count, atomic_kinds, atomic_kind_set, particles, particle_set, local_particles, molecules, molecule_set, molecule_kinds, molecule_kind_set, local_molecules, para_env, colvar_p, shell_particles, core_particles, gci, multipoles, natom, nparticle, ncore, nshell, nkind, atprop, virial, results, cell, cell_ref, use_ref_cell)
returns information about various attributes of the given subsys
Contains types used for a Dimer Method calculations.
Definition dimer_types.F:14
subroutine, public vib_get_index_weight(dimer_section, vib_id_list, vib_wt_list, vib_list_size, unit)
Read VIB_INDEX and VIB_WEIGHT under DIMER section.
subroutine, public dimer_fixed_atom_control(vec, subsys, unit)
Set parts of a given array vec to zero according to fixed atom constraints. When atoms are (partially...
subroutine, public dimer_env_retain(dimer_env)
...
subroutine, public dimer_env_release(dimer_env)
...
subroutine, public dimer_init_vector(dimer_env, dimer_section, natom, unit, globenv, force_env)
Read dimer vector from input and store into dimer_envnvec.
subroutine, public dimer_env_create(dimer_env, subsys, globenv, dimer_section, force_env)
...
Interface for the force calculations.
Define type storing the global information of a run. Keep the amount of stored data small....
collects all constants needed in input so that they can be used without circular dependencies
integer, parameter, public dimer_init_random
integer, parameter, public dimer_init_molden
integer, parameter, public do_first_rotation_step
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
integer, parameter, public default_path_length
Definition kinds.F:58
Interface to the message passing library MPI.
represent a simple array based list of the given type
Define the molecule kind structure types and the corresponding functionality.
subroutine, public get_molecule_kind(molecule_kind, atom_list, bond_list, bend_list, ub_list, impr_list, opbend_list, colv_list, fixd_list, g3x3_list, g4x6_list, vsite_list, torsion_list, shell_list, name, mass, charge, kind_number, natom, nbend, nbond, nub, nimpr, nopbend, nconstraint, nconstraint_fixd, nfixd, ncolv, ng3x3, ng4x6, nvsite, nfixd_restraint, ng3x3_restraint, ng4x6_restraint, nvsite_restraint, nrestraints, nmolecule, nsgf, nshell, ntorsion, molecule_list, nelectron, nelectron_alpha, nelectron_beta, bond_kind_set, bend_kind_set, ub_kind_set, impr_kind_set, opbend_kind_set, torsion_kind_set, molname_generated)
Get informations about a molecule kind.
Type defining parameters related to the simulation cell.
Definition cell_types.F:60
represents a system: atoms, molecules, their pos,vel,...
Defines the environment for a Dimer Method calculation.
wrapper to abstract the force evaluation of the various methods
contains the initially parsed file and the initial parallel environment
stores all the informations relevant to an mpi environment