48#include "../base/base_uses.f90"
54 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'tmc_types'
68 TYPE(master_env_type),
POINTER :: m_env => null()
69 TYPE(worker_env_type),
POINTER :: w_env => null()
77 INTEGER :: group_ener_size = 0
78 INTEGER :: group_ener_nr = 0
79 INTEGER :: group_cc_size = 0
80 INTEGER :: group_cc_nr = 0
81 INTEGER :: group_nr = 0
82 INTEGER :: ana_on_the_fly = -1
94 INTEGER :: dim_per_elem = 3
95 INTEGER :: nr_temp = -1
96 REAL(kind=
dp),
DIMENSION(:),
POINTER :: temp => null()
98 REAL(kind=
dp),
DIMENSION(:),
POINTER :: sub_box_size => null()
101 INTEGER :: nr_elem_mv = -1
104 REAL(kind=
dp) :: pressure = 0.0_dp
105 LOGICAL :: v_isotropic = .false.
106 LOGICAL :: mv_cen_of_mass = .false.
107 LOGICAL :: esimate_acc_prob = .false.
108 LOGICAL :: speculative_canceling = .false.
109 LOGICAL :: use_scf_energy_info = .false.
110 LOGICAL :: use_reduced_tree = .false.
111 CHARACTER(LEN=default_path_length) :: energy_inp_file =
""
112 CHARACTER(LEN=default_path_length) :: nmc_inp_file =
""
113 LOGICAL :: draw_tree = .false.
114 CHARACTER(LEN=default_path_length) :: dot_file_name =
""
115 CHARACTER(LEN=default_path_length) :: all_conf_file_name =
""
116 LOGICAL :: print_only_diff_conf = .false.
117 LOGICAL :: print_trajectory = .false.
118 LOGICAL :: print_dipole = .false.
119 LOGICAL :: print_forces = .false.
120 LOGICAL :: print_cell = .false.
121 LOGICAL :: print_energies = .false.
122 TYPE(prior_estimate_acceptance_type),
POINTER :: prior_nmc_acc => null()
123 LOGICAL :: print_test_output = .false.
127 CHARACTER(LEN=default_string_length) :: name =
""
128 REAL(kind=
dp) :: mass = 0.0_dp
132 TYPE prior_estimate_acceptance_type
133 INTEGER :: counter = 0
134 REAL(kind=
dp) :: aver = 0.0_dp, aver_2 = 0.0_dp
135 END TYPE prior_estimate_acceptance_type
139 INTEGER :: num_mc_elem = 0
140 CHARACTER(LEN=default_path_length) :: restart_in_file_name =
""
141 CHARACTER(LEN=default_path_length) :: restart_out_file_name =
""
142 INTEGER :: restart_out_step = 0
143 INTEGER :: io_unit = -1
144 INTEGER :: info_out_step_size = 0
145 REAL(kind=
dp) :: walltime = 0.0_dp
146 INTEGER :: rnd_init = 0
147 REAL(kind=
dp) :: temp_decrease = 0.0_dp
149 INTEGER :: count_cancel_ener = 0
150 INTEGER :: count_cancel_nmc = 0
153 INTEGER,
DIMENSION(:),
POINTER :: tree_node_count => null()
154 INTEGER,
DIMENSION(:),
POINTER :: result_count => null()
156 POINTER :: result_list => null(), &
157 st_heads => null(), &
158 st_clean_ends => null()
160 INTEGER,
DIMENSION(4) :: estim_corr_wrong = 0
162 END TYPE master_env_type
166 INTEGER :: env_id_ener = -1, env_id_approx = -1
167 INTEGER :: io_unit = -1
168 REAL(kind=
dp) :: act_temp = 0.0_dp
169 END TYPE worker_env_type
181 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_env_create'
185 CALL timeset(routinen, handle)
187 cpassert(.NOT.
ASSOCIATED(tmc_env))
191 ALLOCATE (tmc_env%tmc_comp_set)
194 ALLOCATE (tmc_env%params)
196 ALLOCATE (tmc_env%params%sub_box_size(tmc_env%params%dim_per_elem))
197 tmc_env%params%sub_box_size(:) = -1.0_dp
199 CALL timestop(handle)
211 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_env_release'
215 CALL timeset(routinen, handle)
217 cpassert(
ASSOCIATED(tmc_env))
218 cpassert(
ASSOCIATED(tmc_env%params))
220 DEALLOCATE (tmc_env%params%sub_box_size)
221 IF (
ASSOCIATED(tmc_env%params%Temp))
THEN
222 DEALLOCATE (tmc_env%params%Temp)
224 IF (
ASSOCIATED(tmc_env%params%cell))
THEN
225 DEALLOCATE (tmc_env%params%cell)
227 IF (
ASSOCIATED(tmc_env%params%atoms))
THEN
228 CALL deallocate_tmc_atom_type(tmc_env%params%atoms)
230 DEALLOCATE (tmc_env%params)
234 IF (
ASSOCIATED(tmc_env%tmc_comp_set%para_env_m_first_w))
THEN
237 IF (
ASSOCIATED(tmc_env%tmc_comp_set%para_env_m_ana))
THEN
240 IF (
ASSOCIATED(tmc_env%tmc_comp_set%para_env_m_only))
THEN
244 DEALLOCATE (tmc_env%tmc_comp_set)
248 CALL timestop(handle)
260 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_master_env_create'
264 CALL timeset(routinen, handle)
266 cpassert(
ASSOCIATED(tmc_env))
267 cpassert(
ASSOCIATED(tmc_env%params))
268 cpassert(tmc_env%params%nr_temp > 0)
270 cpassert(.NOT.
ASSOCIATED(tmc_env%m_env))
272 ALLOCATE (tmc_env%m_env)
273 NULLIFY (tmc_env%m_env%gt_head, tmc_env%m_env%gt_act, tmc_env%m_env%tree_node_count, &
274 tmc_env%m_env%result_count, tmc_env%m_env%result_list, &
275 tmc_env%m_env%st_heads, tmc_env%m_env%st_clean_ends, &
276 tmc_env%m_env%gt_clean_end, tmc_env%m_env%cancelation_list, tmc_env%m_env%analysis_list)
278 tmc_env%m_env%restart_in_file_name =
""
279 tmc_env%m_env%restart_out_file_name =
""
280 ALLOCATE (tmc_env%m_env%tree_node_count(0:tmc_env%params%nr_temp))
281 tmc_env%m_env%tree_node_count(:) = 0
282 ALLOCATE (tmc_env%m_env%result_count(0:tmc_env%params%nr_temp))
283 tmc_env%m_env%result_count(:) = 0
284 ALLOCATE (tmc_env%m_env%st_heads(tmc_env%params%nr_temp))
285 ALLOCATE (tmc_env%m_env%st_clean_ends(tmc_env%params%nr_temp))
287 IF (tmc_env%params%USE_REDUCED_TREE)
ALLOCATE (tmc_env%m_env%result_list(tmc_env%params%nr_temp))
289 DO i = 1, tmc_env%params%nr_temp
290 tmc_env%m_env%st_heads(i)%elem => null()
291 tmc_env%m_env%st_clean_ends(i)%elem => null()
292 IF (tmc_env%params%USE_REDUCED_TREE)
THEN
293 tmc_env%m_env%result_list(i)%elem => null()
296 tmc_env%m_env%gt_head => null()
297 tmc_env%m_env%gt_clean_end => null()
298 tmc_env%m_env%temp_decrease = 1.0_dp
299 tmc_env%m_env%count_cancel_ener = 0
300 tmc_env%m_env%count_cancel_NMC = 0
301 tmc_env%m_env%estim_corr_wrong(:) = 0
303 ALLOCATE (tmc_env%params%prior_NMC_acc)
304 tmc_env%params%prior_NMC_acc%counter = 0
305 tmc_env%params%prior_NMC_acc%aver = 0.0_dp
306 tmc_env%params%prior_NMC_acc%aver_2 = 0.0_dp
308 CALL timestop(handle)
320 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_master_env_release'
324 CALL timeset(routinen, handle)
326 cpassert(
ASSOCIATED(tmc_env))
327 cpassert(
ASSOCIATED(tmc_env%m_env))
330 CALL clean_list(tmc_env%m_env%cancelation_list)
332 DEALLOCATE (tmc_env%m_env%tree_node_count)
333 DEALLOCATE (tmc_env%m_env%result_count)
334 DEALLOCATE (tmc_env%m_env%st_heads)
335 DEALLOCATE (tmc_env%m_env%st_clean_ends)
336 IF (tmc_env%params%USE_REDUCED_TREE)
DEALLOCATE (tmc_env%m_env%result_list)
337 DEALLOCATE (tmc_env%params%prior_NMC_acc)
339 DEALLOCATE (tmc_env%m_env)
341 CALL timestop(handle)
353 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_worker_env_create'
357 CALL timeset(routinen, handle)
359 cpassert(
ASSOCIATED(tmc_env))
360 cpassert(.NOT.
ASSOCIATED(tmc_env%w_env))
362 ALLOCATE (tmc_env%w_env)
364 tmc_env%w_env%env_id_ener = -1
365 tmc_env%w_env%env_id_approx = -1
366 tmc_env%w_env%io_unit = -1
367 tmc_env%w_env%act_temp = -1.0_dp
369 CALL timestop(handle)
381 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tmc_worker_env_release'
385 CALL timeset(routinen, handle)
387 cpassert(
ASSOCIATED(tmc_env))
388 cpassert(
ASSOCIATED(tmc_env%w_env))
390 DEALLOCATE (tmc_env%w_env)
392 CALL timestop(handle)
404 INTEGER,
INTENT(IN) :: nr_atoms
406 cpassert(.NOT.
ASSOCIATED(atoms))
407 cpassert(nr_atoms > 0)
409 ALLOCATE (atoms(nr_atoms))
411 cpassert(
ASSOCIATED(atoms))
420 SUBROUTINE deallocate_tmc_atom_type(atoms)
423 cpassert(
ASSOCIATED(atoms))
427 cpassert(.NOT.
ASSOCIATED(atoms))
428 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
subroutine, public clean_list(list)
clean a certain element element list
module handles definition of the tree nodes for the global and
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