(git:ccc2433)
reftraj_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 initialization of the reftraj structure used to analyse
10 !> previously generated trajectories
11 !> \par History
12 !> Created 10-07 [MI]
13 !> \author MI
14 ! **************************************************************************************************
16 
17  USE cp_parser_types, ONLY: cp_parser_type,&
20  USE input_section_types, ONLY: section_vals_type,&
22  USE kinds, ONLY: default_path_length,&
23  dp
24  USE message_passing, ONLY: mp_para_env_type
25 #include "../base/base_uses.f90"
26 
27  IMPLICIT NONE
28 
29  PRIVATE
30  PUBLIC :: reftraj_type, reftraj_msd_type, &
32 
33  INTEGER, PARAMETER, PUBLIC :: reftraj_eval_none = 101
34  INTEGER, PARAMETER, PUBLIC :: reftraj_eval_energy = 102
35  INTEGER, PARAMETER, PUBLIC :: reftraj_eval_energy_forces = 103
36 
37 ! **************************************************************************************************
38 !> \brief parameters related to the analysis of previously generated trajecorties
39 !> \author MI
40 ! **************************************************************************************************
41  TYPE reftraj_info_type
42  INTEGER :: first_snapshot = 0
43  INTEGER :: last_snapshot = 0
44  INTEGER :: stride = 0
45  INTEGER :: eval = reftraj_eval_none
46  LOGICAL :: variable_volume = .false.
47  LOGICAL :: msd = .false.
48  TYPE(cp_parser_type), POINTER :: traj_parser => null()
49  TYPE(cp_parser_type), POINTER :: cell_parser => null()
50  END TYPE reftraj_info_type
51 
52 ! **************************************************************************************************
53  TYPE reftraj_msd_type
54  LOGICAL :: disp_atom = .false., msd_kind = .false., msd_molecule = .false., msd_region = .false.
55  INTEGER :: num_disp_atom = 0, ref0_unit = 0
56  INTEGER, POINTER, DIMENSION(:) :: disp_atom_index => null()
57  REAL(kind=dp) :: disp_atom_tol = 0.0_dp, drcom(3) = 0.0_dp, ref0_com(3) = 0.0_dp, total_mass = 0.0_dp
58  REAL(kind=dp), POINTER, DIMENSION(:, :) :: disp_atom_dr => null()
59  REAL(kind=dp), POINTER, DIMENSION(:, :) :: ref0_pos => null()
60  REAL(kind=dp), POINTER, DIMENSION(:, :) :: ref0_com_molecule => null()
61  REAL(kind=dp), POINTER, DIMENSION(:, :) :: val_msd_kind => null()
62  REAL(kind=dp), POINTER, DIMENSION(:, :) :: val_msd_molecule => null()
63  REAL(kind=dp), POINTER, DIMENSION(:, :) :: val_msd_region => null()
64  END TYPE reftraj_msd_type
65 
66 ! **************************************************************************************************
67  TYPE reftraj_type
68  INTEGER :: itimes = 0
69  INTEGER :: itimes0 = 0
70  INTEGER :: isnap = 0
71  INTEGER :: natom = 0
72  LOGICAL :: init = .false.
73  REAL(kind=dp) :: epot = 0.0_dp, epot0 = 0.0_dp, time = 0.0_dp, time0 = 0.0_dp
74  TYPE(reftraj_info_type), POINTER :: info => null()
75  TYPE(reftraj_msd_type), POINTER :: msd => null()
76  END TYPE reftraj_type
77 
78  CHARACTER(len=*), PARAMETER, PRIVATE :: modulen = 'reftraj_types'
79 
80 CONTAINS
81 
82 ! **************************************************************************************************
83 !> \brief ...
84 !> \param reftraj ...
85 !> \param reftraj_section ...
86 !> \param para_env ...
87 ! **************************************************************************************************
88  SUBROUTINE create_reftraj(reftraj, reftraj_section, para_env)
89 
90  TYPE(reftraj_type), INTENT(OUT) :: reftraj
91  TYPE(section_vals_type), POINTER :: reftraj_section
92  TYPE(mp_para_env_type), POINTER :: para_env
93 
94  CHARACTER(LEN=default_path_length) :: filename
95  LOGICAL :: old_eval_ef, old_eval_forces
96 
97  NULLIFY (reftraj%info)
98  NULLIFY (reftraj%msd)
99 
100  ALLOCATE (reftraj%info)
101  NULLIFY (reftraj%info%traj_parser)
102  NULLIFY (reftraj%info%cell_parser)
103 
104  ! Initialize parser for trajectory
105  CALL section_vals_val_get(reftraj_section, "TRAJ_FILE_NAME", c_val=filename)
106  ALLOCATE (reftraj%info%traj_parser)
107  CALL parser_create(reftraj%info%traj_parser, filename, para_env=para_env)
108 
109  CALL section_vals_val_get(reftraj_section, "VARIABLE_VOLUME", l_val=reftraj%info%variable_volume)
110  IF (reftraj%info%variable_volume) THEN
111  ! In case requested initialize parser for cell
112  CALL section_vals_val_get(reftraj_section, "CELL_FILE_NAME", c_val=filename)
113  ALLOCATE (reftraj%info%cell_parser)
114  CALL parser_create(reftraj%info%cell_parser, filename, para_env=para_env)
115  END IF
116 
117  CALL section_vals_val_get(reftraj_section, "FIRST_SNAPSHOT", i_val=reftraj%info%first_snapshot)
118  CALL section_vals_val_get(reftraj_section, "LAST_SNAPSHOT", i_val=reftraj%info%last_snapshot)
119  CALL section_vals_val_get(reftraj_section, "STRIDE", i_val=reftraj%info%stride)
120  CALL section_vals_val_get(reftraj_section, "EVAL", i_val=reftraj%info%eval)
121 
122  ! Read deprecated keywords to retain backwards compatibility.
123  ! For details see: https://github.com/cp2k/cp2k/issues/894
124  CALL section_vals_val_get(reftraj_section, "EVAL_ENERGY_FORCES", l_val=old_eval_ef)
125  CALL section_vals_val_get(reftraj_section, "EVAL_FORCES", l_val=old_eval_forces)
126  IF (old_eval_ef) reftraj%info%eval = reftraj_eval_energy
127  IF (old_eval_forces) reftraj%info%eval = reftraj_eval_energy_forces
128 
129  CALL section_vals_val_get(reftraj_section, "MSD%_SECTION_PARAMETERS_", &
130  l_val=reftraj%info%msd)
131 
132  END SUBROUTINE create_reftraj
133 
134 ! **************************************************************************************************
135 !> \brief ...
136 !> \param reftraj ...
137 !> \par History
138 !> 10.2007 created
139 !> \author MI
140 ! **************************************************************************************************
141  SUBROUTINE release_reftraj(reftraj)
142 
143  TYPE(reftraj_type), INTENT(INOUT) :: reftraj
144 
145  IF (ASSOCIATED(reftraj%info%traj_parser)) THEN
146  CALL parser_release(reftraj%info%traj_parser)
147  DEALLOCATE (reftraj%info%traj_parser)
148  END IF
149  IF (ASSOCIATED(reftraj%info%cell_parser)) THEN
150  CALL parser_release(reftraj%info%cell_parser)
151  DEALLOCATE (reftraj%info%cell_parser)
152  END IF
153  IF (ASSOCIATED(reftraj%info)) THEN
154  DEALLOCATE (reftraj%info)
155  END IF
156  IF (ASSOCIATED(reftraj%msd)) THEN
157  DEALLOCATE (reftraj%msd%ref0_pos)
158  IF (reftraj%msd%msd_kind) THEN
159  DEALLOCATE (reftraj%msd%val_msd_kind)
160  END IF
161  IF (reftraj%msd%msd_molecule) THEN
162  DEALLOCATE (reftraj%msd%val_msd_molecule)
163  DEALLOCATE (reftraj%msd%ref0_com_molecule)
164  END IF
165  IF (reftraj%msd%disp_atom) THEN
166  DEALLOCATE (reftraj%msd%disp_atom_index)
167  DEALLOCATE (reftraj%msd%disp_atom_dr)
168  END IF
169 
170  DEALLOCATE (reftraj%msd)
171  END IF
172 
173  END SUBROUTINE release_reftraj
174 
175 END MODULE reftraj_types
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.
objects that represent the structure of input sections and the data contained in an input section
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.
initialization of the reftraj structure used to analyse previously generated trajectories
Definition: reftraj_types.F:15
subroutine, public create_reftraj(reftraj, reftraj_section, para_env)
...
Definition: reftraj_types.F:89
integer, parameter, public reftraj_eval_energy
Definition: reftraj_types.F:34
subroutine, public release_reftraj(reftraj)
...
integer, parameter, public reftraj_eval_energy_forces
Definition: reftraj_types.F:35
integer, parameter, public reftraj_eval_none
Definition: reftraj_types.F:33