Line data Source code
1 : !--------------------------------------------------------------------------------------------------!
2 : ! CP2K: A general program to perform molecular dynamics simulations !
3 : ! Copyright 2000-2023 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 : ! **************************************************************************************************
15 : MODULE reftraj_types
16 :
17 : USE cp_parser_types, ONLY: cp_parser_type,&
18 : parser_create,&
19 : parser_release
20 : USE input_section_types, ONLY: section_vals_type,&
21 : section_vals_val_get
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, &
31 : create_reftraj, release_reftraj
32 :
33 : ! **************************************************************************************************
34 : !> \brief parameters related to the analysis of previously generated trajecorties
35 : !> \author MI
36 : ! **************************************************************************************************
37 : TYPE reftraj_info_type
38 : INTEGER :: first_snapshot
39 : INTEGER :: last_snapshot
40 : INTEGER :: stride
41 : LOGICAL :: eval_ef
42 : LOGICAL :: eval_forces
43 : LOGICAL :: variable_volume
44 : LOGICAL :: msd
45 : TYPE(cp_parser_type), POINTER :: traj_parser
46 : TYPE(cp_parser_type), POINTER :: cell_parser
47 : END TYPE reftraj_info_type
48 :
49 : ! **************************************************************************************************
50 : TYPE reftraj_msd_type
51 : LOGICAL :: disp_atom, msd_kind, msd_molecule, msd_region
52 : INTEGER :: num_disp_atom, ref0_unit
53 : INTEGER, POINTER, DIMENSION(:) :: disp_atom_index
54 : REAL(KIND=dp) :: disp_atom_tol, drcom(3), ref0_com(3), total_mass
55 : REAL(KIND=dp), POINTER, DIMENSION(:, :) :: disp_atom_dr
56 : REAL(KIND=dp), POINTER, DIMENSION(:, :) :: ref0_pos
57 : REAL(KIND=dp), POINTER, DIMENSION(:, :) :: ref0_com_molecule
58 : REAL(KIND=dp), POINTER, DIMENSION(:, :) :: val_msd_kind
59 : REAL(KIND=dp), POINTER, DIMENSION(:, :) :: val_msd_molecule
60 : REAL(KIND=dp), POINTER, DIMENSION(:, :) :: val_msd_region
61 : END TYPE reftraj_msd_type
62 :
63 : ! **************************************************************************************************
64 : TYPE reftraj_type
65 : INTEGER :: itimes
66 : INTEGER :: itimes0
67 : INTEGER :: isnap
68 : INTEGER :: natom
69 : LOGICAL :: init
70 : REAL(KIND=dp) :: epot, epot0, time, time0
71 : TYPE(reftraj_info_type), POINTER :: info
72 : TYPE(reftraj_msd_type), POINTER :: msd
73 : END TYPE reftraj_type
74 :
75 : CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'reftraj_types'
76 :
77 : CONTAINS
78 :
79 : ! **************************************************************************************************
80 : !> \brief ...
81 : !> \param reftraj ...
82 : !> \param reftraj_section ...
83 : !> \param para_env ...
84 : ! **************************************************************************************************
85 32 : SUBROUTINE create_reftraj(reftraj, reftraj_section, para_env)
86 :
87 : TYPE(reftraj_type), INTENT(OUT) :: reftraj
88 : TYPE(section_vals_type), POINTER :: reftraj_section
89 : TYPE(mp_para_env_type), POINTER :: para_env
90 :
91 : CHARACTER(LEN=default_path_length) :: filename
92 :
93 : NULLIFY (reftraj%info)
94 32 : NULLIFY (reftraj%msd)
95 :
96 32 : ALLOCATE (reftraj%info)
97 32 : NULLIFY (reftraj%info%traj_parser)
98 32 : NULLIFY (reftraj%info%cell_parser)
99 :
100 : ! Initialize parser for trajectory
101 32 : CALL section_vals_val_get(reftraj_section, "TRAJ_FILE_NAME", c_val=filename)
102 32 : ALLOCATE (reftraj%info%traj_parser)
103 32 : CALL parser_create(reftraj%info%traj_parser, filename, para_env=para_env)
104 :
105 32 : CALL section_vals_val_get(reftraj_section, "VARIABLE_VOLUME", l_val=reftraj%info%variable_volume)
106 32 : IF (reftraj%info%variable_volume) THEN
107 : ! In case requested initialize parser for cell
108 6 : CALL section_vals_val_get(reftraj_section, "CELL_FILE_NAME", c_val=filename)
109 6 : ALLOCATE (reftraj%info%cell_parser)
110 6 : CALL parser_create(reftraj%info%cell_parser, filename, para_env=para_env)
111 : END IF
112 :
113 32 : CALL section_vals_val_get(reftraj_section, "FIRST_SNAPSHOT", i_val=reftraj%info%first_snapshot)
114 32 : CALL section_vals_val_get(reftraj_section, "LAST_SNAPSHOT", i_val=reftraj%info%last_snapshot)
115 32 : CALL section_vals_val_get(reftraj_section, "STRIDE", i_val=reftraj%info%stride)
116 32 : CALL section_vals_val_get(reftraj_section, "EVAL_ENERGY_FORCES", l_val=reftraj%info%eval_ef)
117 32 : CALL section_vals_val_get(reftraj_section, "EVAL_FORCES", l_val=reftraj%info%eval_forces)
118 32 : IF (reftraj%info%eval_forces) reftraj%info%eval_ef = .TRUE.
119 :
120 : CALL section_vals_val_get(reftraj_section, "MSD%_SECTION_PARAMETERS_", &
121 32 : l_val=reftraj%info%msd)
122 :
123 32 : END SUBROUTINE create_reftraj
124 :
125 : ! **************************************************************************************************
126 : !> \brief ...
127 : !> \param reftraj ...
128 : !> \par History
129 : !> 10.2007 created
130 : !> \author MI
131 : ! **************************************************************************************************
132 32 : SUBROUTINE release_reftraj(reftraj)
133 :
134 : TYPE(reftraj_type), INTENT(INOUT) :: reftraj
135 :
136 32 : IF (ASSOCIATED(reftraj%info%traj_parser)) THEN
137 32 : CALL parser_release(reftraj%info%traj_parser)
138 32 : DEALLOCATE (reftraj%info%traj_parser)
139 : END IF
140 32 : IF (ASSOCIATED(reftraj%info%cell_parser)) THEN
141 6 : CALL parser_release(reftraj%info%cell_parser)
142 6 : DEALLOCATE (reftraj%info%cell_parser)
143 : END IF
144 32 : IF (ASSOCIATED(reftraj%info)) THEN
145 32 : DEALLOCATE (reftraj%info)
146 : END IF
147 32 : IF (ASSOCIATED(reftraj%msd)) THEN
148 2 : DEALLOCATE (reftraj%msd%ref0_pos)
149 2 : IF (reftraj%msd%msd_kind) THEN
150 2 : DEALLOCATE (reftraj%msd%val_msd_kind)
151 : END IF
152 2 : IF (reftraj%msd%msd_molecule) THEN
153 0 : DEALLOCATE (reftraj%msd%val_msd_molecule)
154 0 : DEALLOCATE (reftraj%msd%ref0_com_molecule)
155 : END IF
156 2 : IF (reftraj%msd%disp_atom) THEN
157 2 : DEALLOCATE (reftraj%msd%disp_atom_index)
158 2 : DEALLOCATE (reftraj%msd%disp_atom_dr)
159 : END IF
160 :
161 2 : DEALLOCATE (reftraj%msd)
162 : END IF
163 :
164 32 : END SUBROUTINE release_reftraj
165 :
166 0 : END MODULE reftraj_types
|