(git:71c3ab0)
Loading...
Searching...
No Matches
reftraj_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 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
22 USE kinds, ONLY: default_path_length,&
23 dp
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 INTEGER, PARAMETER, PUBLIC :: reftraj_wrap_none = 201
37 INTEGER, PARAMETER, PUBLIC :: reftraj_wrap_positive = 202
38 INTEGER, PARAMETER, PUBLIC :: reftraj_wrap_central = 203
39
40! **************************************************************************************************
41!> \brief parameters related to the analysis of previously generated trajectories
42!> \author MI
43! **************************************************************************************************
44 TYPE reftraj_info_type
45 INTEGER :: first_snapshot = 0
46 INTEGER :: last_snapshot = 0
47 INTEGER :: stride = 0
48 INTEGER :: eval = reftraj_eval_none
49 INTEGER :: wrap = reftraj_wrap_none
50 LOGICAL :: variable_volume = .false.
51 LOGICAL :: msd = .false.
52 TYPE(cp_parser_type), POINTER :: traj_parser => null()
53 TYPE(cp_parser_type), POINTER :: cell_parser => null()
54 END TYPE reftraj_info_type
55
56! **************************************************************************************************
58 LOGICAL :: disp_atom = .false., msd_kind = .false., msd_molecule = .false., msd_region = .false.
59 INTEGER :: num_disp_atom = 0, ref0_unit = 0
60 INTEGER, POINTER, DIMENSION(:) :: disp_atom_index => null()
61 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
62 REAL(kind=dp), POINTER, DIMENSION(:, :) :: disp_atom_dr => null()
63 REAL(kind=dp), POINTER, DIMENSION(:, :) :: ref0_pos => null()
64 REAL(kind=dp), POINTER, DIMENSION(:, :) :: ref0_com_molecule => null()
65 REAL(kind=dp), POINTER, DIMENSION(:, :) :: val_msd_kind => null()
66 REAL(kind=dp), POINTER, DIMENSION(:, :) :: val_msd_molecule => null()
67 REAL(kind=dp), POINTER, DIMENSION(:, :) :: val_msd_region => null()
68 END TYPE reftraj_msd_type
69
70! **************************************************************************************************
72 INTEGER :: itimes = 0
73 INTEGER :: itimes0 = 0
74 INTEGER :: isnap = 0
75 INTEGER :: natom = 0
76 LOGICAL :: init = .false.
77 REAL(kind=dp) :: epot = 0.0_dp, epot0 = 0.0_dp, time = 0.0_dp, time0 = 0.0_dp
78 TYPE(reftraj_info_type), POINTER :: info => null()
79 TYPE(reftraj_msd_type), POINTER :: msd => null()
80 END TYPE reftraj_type
81
82 CHARACTER(len=*), PARAMETER, PRIVATE :: modulen = 'reftraj_types'
83
84CONTAINS
85
86! **************************************************************************************************
87!> \brief ...
88!> \param reftraj ...
89!> \param reftraj_section ...
90!> \param para_env ...
91! **************************************************************************************************
92 SUBROUTINE create_reftraj(reftraj, reftraj_section, para_env)
93
94 TYPE(reftraj_type), INTENT(OUT) :: reftraj
95 TYPE(section_vals_type), POINTER :: reftraj_section
96 TYPE(mp_para_env_type), POINTER :: para_env
97
98 CHARACTER(LEN=default_path_length) :: filename
99
100 NULLIFY (reftraj%info)
101 NULLIFY (reftraj%msd)
102
103 ALLOCATE (reftraj%info)
104 NULLIFY (reftraj%info%traj_parser)
105 NULLIFY (reftraj%info%cell_parser)
106
107 ! Initialize parser for trajectory
108 CALL section_vals_val_get(reftraj_section, "TRAJ_FILE_NAME", c_val=filename)
109 ALLOCATE (reftraj%info%traj_parser)
110 CALL parser_create(reftraj%info%traj_parser, filename, para_env=para_env)
111
112 CALL section_vals_val_get(reftraj_section, "VARIABLE_VOLUME", l_val=reftraj%info%variable_volume)
113 IF (reftraj%info%variable_volume) THEN
114 ! In case requested initialize parser for cell
115 CALL section_vals_val_get(reftraj_section, "CELL_FILE_NAME", c_val=filename)
116 ALLOCATE (reftraj%info%cell_parser)
117 CALL parser_create(reftraj%info%cell_parser, filename, para_env=para_env)
118 END IF
119
120 CALL section_vals_val_get(reftraj_section, "FIRST_SNAPSHOT", i_val=reftraj%info%first_snapshot)
121 CALL section_vals_val_get(reftraj_section, "LAST_SNAPSHOT", i_val=reftraj%info%last_snapshot)
122 CALL section_vals_val_get(reftraj_section, "STRIDE", i_val=reftraj%info%stride)
123 CALL section_vals_val_get(reftraj_section, "EVAL", i_val=reftraj%info%eval)
124 CALL section_vals_val_get(reftraj_section, "WRAP", i_val=reftraj%info%wrap)
125
126 CALL section_vals_val_get(reftraj_section, "MSD%_SECTION_PARAMETERS_", &
127 l_val=reftraj%info%msd)
128 IF (reftraj%info%msd .AND. (reftraj%info%wrap /= reftraj_wrap_none)) THEN
129 cpwarn("MSD calculation is incompatible with wrapping coordinates")
130 reftraj%info%wrap = reftraj_wrap_none
131 END IF
132
133 END SUBROUTINE create_reftraj
134
135! **************************************************************************************************
136!> \brief ...
137!> \param reftraj ...
138!> \par History
139!> 10.2007 created
140!> \author MI
141! **************************************************************************************************
142 SUBROUTINE release_reftraj(reftraj)
143
144 TYPE(reftraj_type), INTENT(INOUT) :: reftraj
145
146 IF (ASSOCIATED(reftraj%info%traj_parser)) THEN
147 CALL parser_release(reftraj%info%traj_parser)
148 DEALLOCATE (reftraj%info%traj_parser)
149 END IF
150 IF (ASSOCIATED(reftraj%info%cell_parser)) THEN
151 CALL parser_release(reftraj%info%cell_parser)
152 DEALLOCATE (reftraj%info%cell_parser)
153 END IF
154 IF (ASSOCIATED(reftraj%info)) THEN
155 DEALLOCATE (reftraj%info)
156 END IF
157 IF (ASSOCIATED(reftraj%msd)) THEN
158 DEALLOCATE (reftraj%msd%ref0_pos)
159 IF (reftraj%msd%msd_kind) THEN
160 DEALLOCATE (reftraj%msd%val_msd_kind)
161 END IF
162 IF (reftraj%msd%msd_molecule) THEN
163 DEALLOCATE (reftraj%msd%val_msd_molecule)
164 DEALLOCATE (reftraj%msd%ref0_com_molecule)
165 END IF
166 IF (reftraj%msd%disp_atom) THEN
167 DEALLOCATE (reftraj%msd%disp_atom_index)
168 DEALLOCATE (reftraj%msd%disp_atom_dr)
169 END IF
170
171 DEALLOCATE (reftraj%msd)
172 END IF
173
174 END SUBROUTINE release_reftraj
175
176END 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
integer, parameter, public reftraj_wrap_central
integer, parameter, public reftraj_wrap_positive
subroutine, public create_reftraj(reftraj, reftraj_section, para_env)
...
integer, parameter, public reftraj_eval_energy
subroutine, public release_reftraj(reftraj)
...
integer, parameter, public reftraj_wrap_none
integer, parameter, public reftraj_eval_energy_forces
integer, parameter, public reftraj_eval_none
stores all the informations relevant to an mpi environment