22#include "../base/base_uses.f90"
28 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'tmc_analysis_types'
39 CHARACTER(LEN=default_path_length),
PARAMETER, &
41 CHARACTER(LEN=default_path_length),
PARAMETER, &
53 INTEGER :: io_unit = -1
54 CHARACTER(len=default_string_length), &
55 DIMENSION(:),
POINTER :: dirs => null()
56 CHARACTER(LEN=default_path_length) :: out_file_prefix =
""
57 INTEGER :: conf_offset = 0
60 INTEGER :: dim_per_elem = 3
61 INTEGER :: nr_dim = -1
62 REAL(kind=
dp) :: temperature = 0.0_dp
64 INTEGER :: from_elem = -1, to_elem = -1
65 INTEGER :: id_traj = -1, id_cell = -1, id_frc = -1, id_dip = -1, id_ener = -1
66 INTEGER :: lc_traj = 0, lc_cell = 0, lc_frc = 0, lc_dip = 0, lc_ener = 0
67 CHARACTER(LEN=default_path_length) :: costum_pos_file_name =
""
68 CHARACTER(LEN=default_path_length) :: costum_dip_file_name =
""
69 CHARACTER(LEN=default_path_length) :: costum_cell_file_name =
""
70 LOGICAL :: restart = .true., restarted = .false.
71 LOGICAL :: print_test_output = .false.
73 TYPE(density_3d_type),
POINTER :: density_3d => null()
76 TYPE(dipole_analysis_type),
POINTER :: dip_ana => null()
77 TYPE(displacement_type),
POINTER :: displace => null()
81 INTEGER :: conf_counter = 0
82 INTEGER,
DIMENSION(3) :: nr_bins = 0
83 REAL(kind=
dp) :: sum_vol = 0.0_dp
84 REAL(kind=
dp) :: sum_vol2 = 0.0_dp
85 REAL(kind=
dp),
DIMENSION(3) :: sum_box_length = 0.0_dp
86 REAL(kind=
dp),
DIMENSION(3) :: sum_box_length2 = 0.0_dp
87 REAL(kind=
dp),
DIMENSION(:, :, :),
POINTER :: sum_density => null(), sum_dens2 => null()
88 LOGICAL :: print_dens = .true.
89 END TYPE density_3d_type
92 INTEGER :: conf_counter = 0
93 INTEGER :: nr_bins = 0
94 REAL(kind=
dp) :: step_length = -1.0_dp
96 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: g_r => null()
97 REAL(kind=
dp) :: sum_box_scale(3) = 0.0_dp
101 CHARACTER(LEN=default_string_length) :: f_n =
""
102 CHARACTER(LEN=default_string_length) :: s_n =
""
103 INTEGER :: pair_count = 0
107 INTEGER :: conf_counter = 0
109 REAL(kind=
dp),
DIMENSION(:),
POINTER :: charges => null()
110 REAL(kind=
dp),
DIMENSION(:),
POINTER :: last_dip_cl => null()
111 LOGICAL :: print_cl_dip = .true.
114 TYPE dipole_analysis_type
115 REAL(kind=
dp) :: conf_counter = 0
116 INTEGER :: ana_type = -1
117 LOGICAL :: print_diel_const_traj = .true.
119 REAL(kind=
dp) :: mu2_pv_s = 0.0_dp
121 REAL(kind=
dp),
DIMENSION(:),
POINTER :: mu_psv => null(), mu_pv => null(), mu2_pv => null()
123 REAL(kind=
dp),
DIMENSION(:, :),
POINTER :: mu2_pv_mat => null()
125 END TYPE dipole_analysis_type
127 TYPE displacement_type
128 INTEGER :: conf_counter = 0
129 REAL(kind=
dp) :: disp = 0.0_dp
130 LOGICAL :: print_disp = .true.
131 END TYPE displacement_type
143 cpassert(.NOT.
ASSOCIATED(tmc_ana))
157 cpassert(
ASSOCIATED(tmc_ana))
159 IF (
ASSOCIATED(tmc_ana%dirs))
THEN
160 DEALLOCATE (tmc_ana%dirs)
163 IF (
ASSOCIATED(tmc_ana%density_3d))
THEN
164 CALL tmc_ana_dens_release(tmc_ana%density_3d)
166 IF (
ASSOCIATED(tmc_ana%pair_correl))
THEN
167 CALL tmc_ana_pair_correl_release(tmc_ana%pair_correl)
170 IF (
ASSOCIATED(tmc_ana%dip_mom))
THEN
171 CALL tmc_ana_dipole_moment_release(tmc_ana%dip_mom)
174 IF (
ASSOCIATED(tmc_ana%dip_ana))
THEN
175 CALL tmc_ana_dipole_analysis_release(tmc_ana%dip_ana)
178 IF (
ASSOCIATED(tmc_ana%displace))
THEN
179 CALL tmc_ana_displacement_release(ana_disp=tmc_ana%displace)
197 TYPE(density_3d_type),
POINTER :: ana_dens
198 INTEGER,
DIMENSION(3) :: nr_bins
200 cpassert(.NOT.
ASSOCIATED(ana_dens))
204 ana_dens%nr_bins(:) = nr_bins(:)
206 ALLOCATE (ana_dens%sum_density(nr_bins(1), nr_bins(2), nr_bins(3)))
207 ALLOCATE (ana_dens%sum_dens2(nr_bins(1), nr_bins(2), nr_bins(3)))
208 ana_dens%sum_density = 0.0_dp
209 ana_dens%sum_dens2 = 0.0_dp
217 SUBROUTINE tmc_ana_dens_release(ana_dens)
218 TYPE(density_3d_type),
POINTER :: ana_dens
220 cpassert(
ASSOCIATED(ana_dens))
222 DEALLOCATE (ana_dens%sum_density)
223 DEALLOCATE (ana_dens%sum_dens2)
224 DEALLOCATE (ana_dens)
225 END SUBROUTINE tmc_ana_dens_release
242 cpassert(.NOT.
ASSOCIATED(ana_pair_correl))
243 ALLOCATE (ana_pair_correl)
245 ana_pair_correl%nr_bins = nr_bins
254 SUBROUTINE tmc_ana_pair_correl_release(ana_pair_correl)
257 cpassert(
ASSOCIATED(ana_pair_correl))
259 DEALLOCATE (ana_pair_correl%g_r)
260 DEALLOCATE (ana_pair_correl%pairs)
261 DEALLOCATE (ana_pair_correl)
262 END SUBROUTINE tmc_ana_pair_correl_release
275 CHARACTER(LEN=default_string_length) :: n1, n2
276 INTEGER,
OPTIONAL :: list_end
279 INTEGER :: last, list_nr
281 cpassert(
ASSOCIATED(pair_list))
282 IF (
PRESENT(list_end))
THEN
283 cpassert(list_end <=
SIZE(pair_list))
286 last =
SIZE(pair_list)
291 list_search:
DO list_nr = 1, last
292 IF ((pair_list(list_nr)%f_n == n1 .AND. &
293 pair_list(list_nr)%s_n == n2) .OR. &
294 (pair_list(list_nr)%f_n == n2 .AND. &
295 pair_list(list_nr)%s_n == n1))
THEN
318 CHARACTER(LEN=default_string_length),
POINTER :: charge_atm(:)
319 REAL(kind=
dp),
POINTER :: charge(:)
320 INTEGER :: dim_per_elem
324 cpassert(.NOT.
ASSOCIATED(ana_dip_mom))
325 ALLOCATE (ana_dip_mom)
327 ALLOCATE (ana_dip_mom%charges_inp(
SIZE(charge)))
328 DO i = 1,
SIZE(charge)
329 ana_dip_mom%charges_inp(i)%name = charge_atm(i)
330 ana_dip_mom%charges_inp(i)%mass = charge(i)
333 ALLOCATE (ana_dip_mom%last_dip_cl(dim_per_elem))
344 SUBROUTINE tmc_ana_dipole_moment_release(ana_dip_mom)
347 cpassert(
ASSOCIATED(ana_dip_mom))
349 IF (
ASSOCIATED(ana_dip_mom%charges_inp))
DEALLOCATE (ana_dip_mom%charges_inp)
350 IF (
ASSOCIATED(ana_dip_mom%charges))
DEALLOCATE (ana_dip_mom%charges)
351 DEALLOCATE (ana_dip_mom%last_dip_cl)
352 DEALLOCATE (ana_dip_mom)
353 END SUBROUTINE tmc_ana_dipole_moment_release
362 TYPE(dipole_analysis_type),
POINTER :: ana_dip_ana
364 cpassert(.NOT.
ASSOCIATED(ana_dip_ana))
365 ALLOCATE (ana_dip_ana)
367 ALLOCATE (ana_dip_ana%mu_psv(3))
368 ana_dip_ana%mu_psv = 0.0_dp
369 ALLOCATE (ana_dip_ana%mu_pv(3))
370 ana_dip_ana%mu_pv = 0.0_dp
371 ALLOCATE (ana_dip_ana%mu2_pv(3))
372 ana_dip_ana%mu2_pv = 0.0_dp
373 ALLOCATE (ana_dip_ana%mu2_pv_mat(3, 3))
374 ana_dip_ana%mu2_pv_mat = 0.0_dp
383 SUBROUTINE tmc_ana_dipole_analysis_release(ana_dip_ana)
384 TYPE(dipole_analysis_type),
POINTER :: ana_dip_ana
386 cpassert(
ASSOCIATED(ana_dip_ana))
388 DEALLOCATE (ana_dip_ana%mu_psv)
389 DEALLOCATE (ana_dip_ana%mu_pv)
390 DEALLOCATE (ana_dip_ana%mu2_pv)
391 DEALLOCATE (ana_dip_ana%mu2_pv_mat)
393 DEALLOCATE (ana_dip_ana)
394 END SUBROUTINE tmc_ana_dipole_analysis_release
408 TYPE(displacement_type),
POINTER :: ana_disp
409 INTEGER :: dim_per_elem
411 cpassert(.NOT.
ASSOCIATED(ana_disp))
412 cpassert(dim_per_elem > 0)
413 mark_used(dim_per_elem)
425 SUBROUTINE tmc_ana_displacement_release(ana_disp)
426 TYPE(displacement_type),
POINTER :: ana_disp
428 cpassert(
ASSOCIATED(ana_disp))
430 DEALLOCATE (ana_disp)
431 END SUBROUTINE tmc_ana_displacement_release
Handles all functions related to the CELL.
Defines the basic variable types.
integer, parameter, public dp
integer, parameter, public default_string_length
integer, parameter, public default_path_length
module provides variables for the TMC analysis tool
integer function, public search_pair_in_list(pair_list, n1, n2, list_end)
search the pair of two atom types in list
subroutine, public tmc_ana_displacement_create(ana_disp, dim_per_elem)
creates a new structure environment for TMC analysis
subroutine, public tmc_ana_dipole_analysis_create(ana_dip_ana)
creates a new structure environment for TMC analysis
subroutine, public tmc_ana_dipole_moment_create(ana_dip_mom, charge_atm, charge, dim_per_elem)
creates a new structure environment for TMC analysis
subroutine, public tmc_ana_env_create(tmc_ana)
creates a new structure environment for TMC analysis
subroutine, public tmc_ana_env_release(tmc_ana)
releases the structure environment for TMC analysis
integer, parameter, public ana_type_default
integer, parameter, public ana_type_ice
character(len=default_path_length), parameter, public tmc_ana_pair_correl_file_name
character(len=default_path_length), parameter, public tmc_ana_density_file_name
integer, parameter, public ana_type_sym_xyz
subroutine, public tmc_ana_density_create(ana_dens, nr_bins)
creates a new structure environment for TMC analysis
subroutine, public tmc_ana_pair_correl_create(ana_pair_correl, nr_bins)
creates a new structure environment for TMC analysis
module handles definition of the tree nodes for the global and the subtrees binary tree parent elemen...
module handles definition of the tree nodes for the global and the subtrees binary tree parent elemen...
Type defining parameters related to the simulation cell.