46#include "../base/base_uses.f90"
52 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'tmc_types'
66 TYPE(master_env_type),
POINTER :: m_env => null()
67 TYPE(worker_env_type),
POINTER :: w_env => null()
75 INTEGER :: group_ener_size = 0
76 INTEGER :: group_ener_nr = 0
77 INTEGER :: group_cc_size = 0
78 INTEGER :: group_cc_nr = 0
79 INTEGER :: group_nr = 0
80 INTEGER :: ana_on_the_fly = -1
92 INTEGER :: dim_per_elem = 3
93 INTEGER :: nr_temp = -1
94 REAL(kind=
dp),
DIMENSION(:),
POINTER :: temp => null()
96 REAL(kind=
dp),
DIMENSION(:),
POINTER :: sub_box_size => null()
99 INTEGER :: nr_elem_mv = -1
102 REAL(kind=
dp) :: pressure = 0.0_dp
103 LOGICAL :: v_isotropic = .false.
104 LOGICAL :: mv_cen_of_mass = .false.
105 LOGICAL :: esimate_acc_prob = .false.
106 LOGICAL :: speculative_canceling = .false.
107 LOGICAL :: use_scf_energy_info = .false.
108 LOGICAL :: use_reduced_tree = .false.
109 CHARACTER(LEN=default_path_length) :: energy_inp_file =
""
110 CHARACTER(LEN=default_path_length) :: nmc_inp_file =
""
111 LOGICAL :: draw_tree = .false.
112 CHARACTER(LEN=default_path_length) :: dot_file_name =
""
113 CHARACTER(LEN=default_path_length) :: all_conf_file_name =
""
114 LOGICAL :: print_only_diff_conf = .false.
115 LOGICAL :: print_trajectory = .false.
116 LOGICAL :: print_dipole = .false.
117 LOGICAL :: print_forces = .false.
118 LOGICAL :: print_cell = .false.
119 LOGICAL :: print_energies = .false.
120 TYPE(prior_estimate_acceptance_type),
POINTER :: prior_nmc_acc => null()
121 LOGICAL :: print_test_output = .false.
125 CHARACTER(LEN=default_string_length) :: name =
""
126 REAL(kind=
dp) :: mass = 0.0_dp
130 TYPE prior_estimate_acceptance_type
131 INTEGER :: counter = 0
132 REAL(kind=
dp) :: aver = 0.0_dp, aver_2 = 0.0_dp
133 END TYPE prior_estimate_acceptance_type
137 INTEGER :: num_mc_elem = 0
138 CHARACTER(LEN=default_path_length) :: restart_in_file_name =
""
139 CHARACTER(LEN=default_path_length) :: restart_out_file_name =
""
140 INTEGER :: restart_out_step = 0
141 INTEGER :: io_unit = -1
142 INTEGER :: info_out_step_size = 0
143 REAL(kind=
dp) :: walltime = 0.0_dp
144 INTEGER :: rnd_init = 0
145 REAL(kind=
dp) :: temp_decrease = 0.0_dp
147 INTEGER :: count_cancel_ener = 0
148 INTEGER :: count_cancel_nmc = 0
151 INTEGER,
DIMENSION(:),
POINTER :: tree_node_count => null()
152 INTEGER,
DIMENSION(:),
POINTER :: result_count => null()
154 POINTER :: result_list => null(), &
155 st_heads => null(), &
156 st_clean_ends => null()
158 INTEGER,
DIMENSION(4) :: estim_corr_wrong = 0
160 END TYPE master_env_type
164 INTEGER :: env_id_ener = -1, env_id_approx = -1
165 INTEGER :: io_unit = -1
166 REAL(kind=
dp) :: act_temp = 0.0_dp
167 END TYPE worker_env_type
179 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_env_create'
183 CALL timeset(routinen, handle)
185 cpassert(.NOT.
ASSOCIATED(tmc_env))
189 ALLOCATE (tmc_env%tmc_comp_set)
192 ALLOCATE (tmc_env%params)
194 ALLOCATE (tmc_env%params%sub_box_size(tmc_env%params%dim_per_elem))
195 tmc_env%params%sub_box_size(:) = -1.0_dp
197 CALL timestop(handle)
209 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_env_release'
213 CALL timeset(routinen, handle)
215 cpassert(
ASSOCIATED(tmc_env))
216 cpassert(
ASSOCIATED(tmc_env%params))
218 DEALLOCATE (tmc_env%params%sub_box_size)
219 IF (
ASSOCIATED(tmc_env%params%Temp))
THEN
220 DEALLOCATE (tmc_env%params%Temp)
222 IF (
ASSOCIATED(tmc_env%params%cell))
THEN
223 DEALLOCATE (tmc_env%params%cell)
225 IF (
ASSOCIATED(tmc_env%params%atoms))
THEN
226 CALL deallocate_tmc_atom_type(tmc_env%params%atoms)
228 DEALLOCATE (tmc_env%params)
232 IF (
ASSOCIATED(tmc_env%tmc_comp_set%para_env_m_first_w))
THEN
235 IF (
ASSOCIATED(tmc_env%tmc_comp_set%para_env_m_ana))
THEN
238 IF (
ASSOCIATED(tmc_env%tmc_comp_set%para_env_m_only))
THEN
242 DEALLOCATE (tmc_env%tmc_comp_set)
246 CALL timestop(handle)
258 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_master_env_create'
262 CALL timeset(routinen, handle)
264 cpassert(
ASSOCIATED(tmc_env))
265 cpassert(
ASSOCIATED(tmc_env%params))
266 cpassert(tmc_env%params%nr_temp > 0)
268 cpassert(.NOT.
ASSOCIATED(tmc_env%m_env))
270 ALLOCATE (tmc_env%m_env)
271 NULLIFY (tmc_env%m_env%gt_head, tmc_env%m_env%gt_act, tmc_env%m_env%tree_node_count, &
272 tmc_env%m_env%result_count, tmc_env%m_env%result_list, &
273 tmc_env%m_env%st_heads, tmc_env%m_env%st_clean_ends, &
274 tmc_env%m_env%gt_clean_end, tmc_env%m_env%cancelation_list, tmc_env%m_env%analysis_list)
276 tmc_env%m_env%restart_in_file_name =
""
277 tmc_env%m_env%restart_out_file_name =
""
278 ALLOCATE (tmc_env%m_env%tree_node_count(0:tmc_env%params%nr_temp))
279 tmc_env%m_env%tree_node_count(:) = 0
280 ALLOCATE (tmc_env%m_env%result_count(0:tmc_env%params%nr_temp))
281 tmc_env%m_env%result_count(:) = 0
282 ALLOCATE (tmc_env%m_env%st_heads(tmc_env%params%nr_temp))
283 ALLOCATE (tmc_env%m_env%st_clean_ends(tmc_env%params%nr_temp))
285 IF (tmc_env%params%USE_REDUCED_TREE)
ALLOCATE (tmc_env%m_env%result_list(tmc_env%params%nr_temp))
287 DO i = 1, tmc_env%params%nr_temp
288 tmc_env%m_env%st_heads(i)%elem => null()
289 tmc_env%m_env%st_clean_ends(i)%elem => null()
290 IF (tmc_env%params%USE_REDUCED_TREE)
THEN
291 tmc_env%m_env%result_list(i)%elem => null()
294 tmc_env%m_env%gt_head => null()
295 tmc_env%m_env%gt_clean_end => null()
296 tmc_env%m_env%temp_decrease = 1.0_dp
297 tmc_env%m_env%count_cancel_ener = 0
298 tmc_env%m_env%count_cancel_NMC = 0
299 tmc_env%m_env%estim_corr_wrong(:) = 0
301 ALLOCATE (tmc_env%params%prior_NMC_acc)
302 tmc_env%params%prior_NMC_acc%counter = 0
303 tmc_env%params%prior_NMC_acc%aver = 0.0_dp
304 tmc_env%params%prior_NMC_acc%aver_2 = 0.0_dp
306 CALL timestop(handle)
318 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_master_env_release'
322 CALL timeset(routinen, handle)
324 cpassert(
ASSOCIATED(tmc_env))
325 cpassert(
ASSOCIATED(tmc_env%m_env))
328 CALL clean_list(tmc_env%m_env%cancelation_list)
330 DEALLOCATE (tmc_env%m_env%tree_node_count)
331 DEALLOCATE (tmc_env%m_env%result_count)
332 DEALLOCATE (tmc_env%m_env%st_heads)
333 DEALLOCATE (tmc_env%m_env%st_clean_ends)
334 IF (tmc_env%params%USE_REDUCED_TREE)
DEALLOCATE (tmc_env%m_env%result_list)
335 DEALLOCATE (tmc_env%params%prior_NMC_acc)
337 DEALLOCATE (tmc_env%m_env)
339 CALL timestop(handle)
351 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_worker_env_create'
355 CALL timeset(routinen, handle)
357 cpassert(
ASSOCIATED(tmc_env))
358 cpassert(.NOT.
ASSOCIATED(tmc_env%w_env))
360 ALLOCATE (tmc_env%w_env)
362 tmc_env%w_env%env_id_ener = -1
363 tmc_env%w_env%env_id_approx = -1
364 tmc_env%w_env%io_unit = -1
365 tmc_env%w_env%act_temp = -1.0_dp
367 CALL timestop(handle)
379 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_worker_env_release'
383 CALL timeset(routinen, handle)
385 cpassert(
ASSOCIATED(tmc_env))
386 cpassert(
ASSOCIATED(tmc_env%w_env))
388 DEALLOCATE (tmc_env%w_env)
390 CALL timestop(handle)
402 INTEGER,
INTENT(IN) :: nr_atoms
404 cpassert(.NOT.
ASSOCIATED(atoms))
405 cpassert(nr_atoms > 0)
407 ALLOCATE (atoms(nr_atoms))
409 cpassert(
ASSOCIATED(atoms))
418 SUBROUTINE deallocate_tmc_atom_type(atoms)
421 cpassert(
ASSOCIATED(atoms))
425 cpassert(.NOT.
ASSOCIATED(atoms))
426 END SUBROUTINE deallocate_tmc_atom_type
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
Interface to the message passing library MPI.
subroutine, public mp_para_env_release(para_env)
releases the para object (to be called when you don't want anymore the shared copy of this object)
Parallel (pseudo)random number generator (RNG) for multiple streams and substreams of random numbers.
tree nodes creation, searching, deallocation, references etc.
tree nodes creation, searching, deallocation, references etc.
integer, parameter, public task_type_mc
module handles definition of the tree nodes for the global and the subtrees binary tree parent elemen...
subroutine, public clean_list(list)
clean a certain element element list
module handles definition of the tree nodes for the global and the subtrees binary tree parent elemen...
subroutine, public allocate_tmc_atom_type(atoms, nr_atoms)
creates a structure for storing the atom informations
subroutine, public tmc_env_release(tmc_env)
releases the structure environment for TMC
subroutine, public tmc_worker_env_create(tmc_env)
creates a new structure environment for TMC master
subroutine, public tmc_master_env_create(tmc_env)
creates a new structure environment for TMC master
subroutine, public tmc_master_env_release(tmc_env)
releases the structure environment for TMC master
subroutine, public tmc_worker_env_release(tmc_env)
releases the structure environment for TMC master
subroutine, public tmc_env_create(tmc_env)
creates a new structure environment for TMC
Type defining parameters related to the simulation cell.
stores all the informations relevant to an mpi environment