45#include "../base/base_uses.f90"
51 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'tmc_tree_acceptance'
58 INTEGER,
PARAMETER :: DEBUG = 0
81 temperature, diff_pot_check, accept, rnd_nr, &
83 TYPE(
tree_type),
POINTER :: tree_element, parent_element
85 REAL(kind=
dp) :: temperature
86 LOGICAL :: diff_pot_check, accept
87 REAL(kind=
dp) :: rnd_nr
88 LOGICAL,
OPTIONAL :: approx_ener
90 CHARACTER(LEN=*),
PARAMETER :: routinen =
'acceptance_check'
93 REAL(kind=
dp) :: ekin_last_acc, elem_ener, kb, parent_ener
95 cpassert(
ASSOCIATED(tree_element))
96 cpassert(
ASSOCIATED(parent_element))
97 cpassert(
ASSOCIATED(tmc_params))
98 cpassert(temperature > 0.0_dp)
99 cpassert(rnd_nr >= 0.0_dp .AND. rnd_nr <= 1.0_dp)
104 CALL timeset(routinen, handle)
107 cpabort(
"task_type_gaussian_adaptation not yet implemented")
115 IF (diff_pot_check .AND. (tmc_params%NMC_inp_file /=
""))
THEN
116 IF ((tree_element%potential == huge(tree_element%potential)) .OR. &
117 tree_element%e_pot_approx == huge(tree_element%e_pot_approx))
THEN
118 elem_ener = huge(elem_ener)
122 elem_ener = 1.0_dp/(kb*temperature)*tree_element%potential &
123 - 1.0_dp/(kb*tmc_params%Temp(tree_element%temp_created)) &
124 *tree_element%e_pot_approx
126 parent_ener = 1.0_dp/(kb*temperature)*parent_element%potential &
127 - 1.0_dp/(kb*tmc_params%Temp(tree_element%temp_created)) &
128 *parent_element%e_pot_approx
131 IF (elem_ener <= parent_ener)
THEN
136 exp(-(elem_ener - parent_ener)))
THEN
144 IF (tree_element%move_type ==
mv_type_md)
THEN
145 ekin_last_acc = tree_element%ekin_before_md
148 ekin_last_acc = parent_element%ekin
151 IF (
PRESENT(approx_ener))
THEN
152 elem_ener = tree_element%e_pot_approx &
154 parent_ener = parent_element%e_pot_approx &
157 elem_ener = tree_element%potential &
159 parent_ener = parent_element%potential &
164 IF (elem_ener <= parent_ener)
THEN
169 exp(-1.0_dp/(kb*temperature)*(elem_ener - parent_ener)))
THEN
178 IF (diff_pot_check)
THEN
179 cpassert(
ASSOCIATED(tmc_params%prior_NMC_acc))
180 tmc_params%prior_NMC_acc%counter = tmc_params%prior_NMC_acc%counter + 1
181 tmc_params%prior_NMC_acc%aver = (tmc_params%prior_NMC_acc%aver*(tmc_params%prior_NMC_acc%counter - 1) + &
182 ((elem_ener - parent_ener)))/real(tmc_params%prior_NMC_acc%counter, kind=
dp)
183 tmc_params%prior_NMC_acc%aver_2 = (tmc_params%prior_NMC_acc%aver_2*(tmc_params%prior_NMC_acc%counter - 1) + &
184 (elem_ener - parent_ener)**2)/real(tmc_params%prior_NMC_acc%counter, kind=
dp)
188 CALL timestop(handle)
205 SUBROUTINE swap_acceptance_check(tree_elem, conf1, conf2, tmc_params, accept)
211 CHARACTER(LEN=*),
PARAMETER :: routinen =
'swap_acceptance_check'
214 REAL(kind=
dp) :: delta, elem1_ener, elem2_ener, kb, vol1, &
219 cpassert(
ASSOCIATED(tree_elem))
220 cpassert(tree_elem%rnd_nr >= 0.0_dp)
221 cpassert(
ASSOCIATED(conf1))
222 cpassert(
ASSOCIATED(conf2))
223 cpassert(
ASSOCIATED(tmc_params))
226 CALL timeset(routinen, handle)
228 IF (tmc_params%pressure > 0.0_dp)
THEN
230 elem1_ener = conf1%potential &
232 elem2_ener = conf2%potential &
236 IF (tree_elem%rnd_nr < exp((1.0_dp/(kb*tmc_params%Temp(tree_elem%mv_conf)) - &
237 1.0_dp/(kb*tmc_params%Temp(tree_elem%mv_conf + 1))) &
238 *(elem2_ener - elem1_ener)))
THEN
245 CALL get_scaled_cell(cell=tmc_params%cell, box_scale=conf1%box_scale, &
247 CALL get_scaled_cell(cell=tmc_params%cell, box_scale=conf2%box_scale, &
250 delta = (1.0_dp/(kb*tmc_params%Temp(tree_elem%mv_conf)) &
251 - 1.0_dp/(kb*tmc_params%Temp(tree_elem%mv_conf + 1)))* &
252 ((conf2%potential + conf2%ekin) - (conf1%potential + conf1%ekin)) + &
253 (1.0_dp/(kb*tmc_params%Temp(tree_elem%mv_conf))*tmc_params%pressure &
254 - 1.0_dp/(kb*tmc_params%Temp(tree_elem%mv_conf + 1))*tmc_params%pressure)* &
256 IF (tree_elem%rnd_nr < exp(delta))
THEN
263 CALL timestop(handle)
264 END SUBROUTINE swap_acceptance_check
279 SUBROUTINE volume_acceptance_check(parent_elem, new_elem, temperature, &
280 rnd_nr, tmc_params, accept)
281 TYPE(
tree_type),
POINTER :: parent_elem, new_elem
282 REAL(kind=
dp) :: temperature, rnd_nr
286 CHARACTER(LEN=*),
PARAMETER :: routinen =
'volume_acceptance_check'
289 REAL(kind=
dp) :: d_enthalpy, kb, n_vol, p_vol
293 cpassert(
ASSOCIATED(parent_elem))
294 cpassert(
ASSOCIATED(new_elem))
295 cpassert(temperature > 0.0_dp)
296 cpassert(rnd_nr > 0.0_dp)
297 cpassert(
ASSOCIATED(tmc_params))
298 cpassert(tmc_params%pressure >= 0.0_dp)
301 CALL timeset(routinen, handle)
303 CALL get_scaled_cell(cell=tmc_params%cell, box_scale=parent_elem%box_scale, &
305 CALL get_scaled_cell(cell=tmc_params%cell, box_scale=new_elem%box_scale, &
311 d_enthalpy = (new_elem%potential - parent_elem%potential) + &
312 tmc_params%pressure*(n_vol - p_vol) - &
313 kb*temperature*(
SIZE(new_elem%pos)/ &
314 tmc_params%dim_per_elem)* &
317 IF (tmc_params%v_isotropic)
THEN
318 d_enthalpy = (new_elem%potential - parent_elem%potential) + &
319 tmc_params%pressure*(n_vol - p_vol) - &
320 kb*temperature*((
SIZE(new_elem%pos)/ &
321 tmc_params%dim_per_elem) + 2/real(3, kind=
dp))* &
324 d_enthalpy = (new_elem%potential - parent_elem%potential) + &
325 tmc_params%pressure*(n_vol - p_vol) - &
326 kb*temperature*(
SIZE(new_elem%pos)/ &
327 tmc_params%dim_per_elem)* &
332 IF (d_enthalpy <= 0.0_dp)
THEN
335 IF (rnd_nr < exp(-1.0_dp/(kb*temperature)*d_enthalpy))
THEN
342 CALL timestop(handle)
343 END SUBROUTINE volume_acceptance_check
359 CHARACTER(LEN=*),
PARAMETER :: routinen =
'check_acceptance_of_depending_subtree_nodes'
362 LOGICAL :: parent_ready
363 TYPE(
tree_type),
POINTER :: act_elem, parent_elem
365 NULLIFY (parent_elem, act_elem)
367 cpassert(
ASSOCIATED(tmc_env))
368 cpassert(
ASSOCIATED(tree_elem))
370 cpassert(
ASSOCIATED(tree_elem%parent))
373 CALL timeset(routinen, handle)
375 act_elem => tree_elem
380 cpassert(.NOT.
ASSOCIATED(act_elem, parent_elem))
383 SELECT CASE (parent_elem%stat)
387 parent_ready = .false.
390 parent_ready = .true.
392 cpabort(
"unknown parent element status"//
cp_to_string(parent_elem%stat))
396 IF (parent_ready)
THEN
398 CALL check_and_change_status_of_subtree_elem(act_elem=act_elem, &
399 parent_elem=parent_elem, tmc_env=tmc_env)
403 parent_elem => tree_elem
404 IF (
ASSOCIATED(tree_elem%acc))
THEN
405 act_elem => tree_elem%acc
407 CALL check_and_change_status_of_subtree_elem(act_elem=act_elem, &
408 parent_elem=parent_elem, tmc_env=tmc_env)
413 IF (.NOT.
ASSOCIATED(act_elem%nacc))
EXIT nacc_loop
414 act_elem => act_elem%nacc
416 CALL check_and_change_status_of_subtree_elem(act_elem=act_elem, &
417 parent_elem=parent_elem, tmc_env=tmc_env)
423 CALL timestop(handle)
433 SUBROUTINE check_and_change_status_of_subtree_elem(act_elem, parent_elem, tmc_env)
434 TYPE(
tree_type),
POINTER :: act_elem, parent_elem
437 CHARACTER(LEN=*),
PARAMETER :: routinen =
'check_and_change_status_of_subtree_elem'
440 LOGICAL :: flag, result_acc
444 NULLIFY (tmp_gt_list_ptr, tmp_gt_ptr)
447 CALL timeset(routinen, handle)
449 cpassert(
ASSOCIATED(tmc_env))
450 cpassert(
ASSOCIATED(tmc_env%params))
451 cpassert(
ASSOCIATED(act_elem))
452 cpassert(
ASSOCIATED(parent_elem))
454 mark_used(parent_elem)
458 tmp_gt_list_ptr => act_elem%gt_nodes_references
461 DO WHILE (
ASSOCIATED(tmp_gt_list_ptr))
465 CALL check_elements(gt_act_elem=tmp_gt_list_ptr%gt_elem, tmc_env=tmc_env, &
466 check_done=flag, result_acc=result_acc)
469 CALL prob_update(move_types=tmc_env%params%move_types, elem=act_elem, &
470 acc=result_acc, prob_opt=tmc_env%params%esimate_acc_prob)
474 IF (result_acc .EQV. .true.)
THEN
476 IF (
ASSOCIATED(tmp_gt_list_ptr%gt_elem%nacc))
THEN
477 tmp_gt_ptr => tmp_gt_list_ptr%gt_elem%nacc
479 end_ptr=tmp_gt_list_ptr%gt_elem, removed=flag, &
485 IF (
ASSOCIATED(tmp_gt_list_ptr%gt_elem%acc))
THEN
486 tmp_gt_ptr => tmp_gt_list_ptr%gt_elem%acc
488 end_ptr=tmp_gt_list_ptr%gt_elem, removed=flag, &
493 IF (tmc_env%params%DRAW_TREE)
THEN
495 tmc_params=tmc_env%params)
498 tmp_gt_list_ptr => tmp_gt_list_ptr%next
501 CALL timestop(handle)
502 END SUBROUTINE check_and_change_status_of_subtree_elem
513 SUBROUTINE subtree_configuration_stat_change(gt_ptr, stat, tmc_params)
518 CHARACTER(LEN=*),
PARAMETER :: routinen =
'subtree_configuration_stat_change'
525 cpassert(
ASSOCIATED(gt_ptr))
526 cpassert(
ASSOCIATED(tmc_params))
529 CALL timeset(routinen, handle)
533 IF (.NOT. gt_ptr%swaped)
THEN
534 ptr => gt_ptr%conf(gt_ptr%mv_conf)%elem
545 CALL cp_abort(__location__, &
546 "unknown global tree status"// &
550 IF (tmc_params%DRAW_TREE)
THEN
556 CALL timestop(handle)
557 END SUBROUTINE subtree_configuration_stat_change
565 SUBROUTINE elem_ready_to_check(elem, ready)
569 CHARACTER(LEN=*),
PARAMETER :: routinen =
'elem_ready_to_check'
573 cpassert(
ASSOCIATED(elem))
576 CALL timeset(routinen, handle)
580 SELECT CASE (elem%stat)
588 CALL cp_abort(__location__, &
589 "status of actual tree node is unknown" &
593 CALL timestop(handle)
594 END SUBROUTINE elem_ready_to_check
604 SUBROUTINE check_elements(gt_act_elem, tmc_env, check_done, result_acc)
607 LOGICAL :: check_done, result_acc
609 CHARACTER(LEN=*),
PARAMETER :: routinen =
'check_elements'
612 LOGICAL :: act_ready, tmp_ready
613 TYPE(
tree_type),
POINTER :: act_element, tmp_element
615 NULLIFY (act_element, tmp_element)
618 cpassert(
ASSOCIATED(gt_act_elem))
619 cpassert(
ASSOCIATED(tmc_env))
620 cpassert(
ASSOCIATED(tmc_env%m_env))
623 CALL timeset(routinen, handle)
627 SELECT CASE (gt_act_elem%stat)
635 CALL cp_abort(__location__, &
636 "undefinite status of already checked elements:" &
642 IF (.NOT. check_done)
THEN
647 cpassert(
ASSOCIATED(act_element))
648 cpassert(
ASSOCIATED(tmp_element))
651 CALL elem_ready_to_check(elem=act_element, ready=act_ready)
652 CALL elem_ready_to_check(elem=tmp_element, ready=tmp_ready)
655 IF (act_ready .AND. tmp_ready)
THEN
657 IF (gt_act_elem%swaped)
THEN
658 CALL swap_acceptance_check(tree_elem=gt_act_elem, conf1=act_element, &
659 conf2=tmp_element, tmc_params=tmc_env%params, &
663 CALL volume_acceptance_check(parent_elem=tmp_element, new_elem=act_element, &
664 temperature=tmc_env%params%Temp(gt_act_elem%mv_conf), &
665 rnd_nr=gt_act_elem%rnd_nr, &
666 tmc_params=tmc_env%params, accept=result_acc)
668 IF (tmc_env%m_env%temp_decrease /= 1.0_dp)
THEN
669 CALL acceptance_check(tree_element=act_element, parent_element=tmp_element, &
670 tmc_params=tmc_env%params, temperature=gt_act_elem%Temp, &
671 diff_pot_check=.true., accept=result_acc, &
672 rnd_nr=gt_act_elem%rnd_nr)
674 CALL acceptance_check(tree_element=act_element, parent_element=tmp_element, &
675 tmc_params=tmc_env%params, &
676 temperature=tmc_env%params%Temp(gt_act_elem%mv_conf), &
677 diff_pot_check=.true., accept=result_acc, &
678 rnd_nr=gt_act_elem%rnd_nr)
685 SELECT CASE (gt_act_elem%stat)
690 IF (gt_act_elem%conf(gt_act_elem%mv_conf)%elem%stat /= gt_act_elem%stat)
THEN
691 gt_act_elem%stat = gt_act_elem%conf(gt_act_elem%mv_conf)%elem%stat
695 CALL cp_abort(__location__, &
696 "status of actual checked node is unknown" &
702 CALL timestop(handle)
703 END SUBROUTINE check_elements
717 LOGICAL :: result_acc, something_updated
719 CHARACTER(LEN=*),
PARAMETER :: routinen =
'tree_update'
721 INTEGER :: handle, itmp
724 TYPE(
tree_type),
POINTER :: act_element, tmp_element
726 NULLIFY (gt_act_elem, tmp_element, act_element)
728 cpassert(
ASSOCIATED(tmc_env))
731 CALL timeset(routinen, handle)
734 something_updated = .false.
736 gt_act_elem => tmc_env%m_env%gt_act
737 search_calculated_element_loop:
DO
738 NULLIFY (act_element, tmp_element)
741 IF (.NOT. found)
EXIT search_calculated_element_loop
744 CALL check_elements(gt_act_elem=gt_act_elem, tmc_env=tmc_env, &
745 check_done=found, result_acc=result_acc)
747 IF (.NOT. found)
EXIT search_calculated_element_loop
751 elem1=act_element, elem2=tmp_element)
756 tmc_env%m_env%result_count(gt_act_elem%mv_conf) = &
757 tmc_env%m_env%result_count(gt_act_elem%mv_conf) + 1
760 IF (gt_act_elem%swaped)
THEN
761 tmc_env%m_env%result_count(gt_act_elem%mv_conf + 1) = &
762 tmc_env%m_env%result_count(gt_act_elem%mv_conf + 1) + 1
765 tmc_env%m_env%result_count(0) = tmc_env%m_env%result_count(0) + 1
768 something_updated = .true.
778 IF (.NOT. result_acc)
THEN
779 IF (gt_act_elem%prob_acc > 0.0_dp)
THEN
780 IF (gt_act_elem%prob_acc >= 0.5_dp)
THEN
782 tmc_env%m_env%estim_corr_wrong(4) = tmc_env%m_env%estim_corr_wrong(4) + 1
783 IF (debug > 0)
WRITE (tmc_env%m_env%io_unit, *) &
784 "Wrong guess for NACC (elem/estim acc prob)", gt_act_elem%nr, gt_act_elem%prob_acc
786 tmc_env%m_env%estim_corr_wrong(3) = tmc_env%m_env%estim_corr_wrong(3) + 1
790 gt_act_elem%prob_acc = 0.0_dp
791 itmp = gt_act_elem%conf(gt_act_elem%mv_conf)%elem%sub_tree_nr
795 IF (gt_act_elem%prob_acc > 0.0_dp)
THEN
796 IF (gt_act_elem%prob_acc <= 0.5_dp)
THEN
798 tmc_env%m_env%estim_corr_wrong(2) = tmc_env%m_env%estim_corr_wrong(2) + 1
799 IF (debug > 0)
WRITE (tmc_env%m_env%io_unit, *) &
800 "wrong guess for ACC (elem/estim acc prob)", gt_act_elem%nr, gt_act_elem%prob_acc
802 tmc_env%m_env%estim_corr_wrong(1) = tmc_env%m_env%estim_corr_wrong(1) + 1
806 gt_act_elem%prob_acc = 1.0_dp
809 IF (.NOT. gt_act_elem%swaped)
THEN
811 tmc_env%m_env%result_list(gt_act_elem%mv_conf)%elem => &
812 gt_act_elem%conf(gt_act_elem%mv_conf)%elem
816 tmc_env%m_env%result_list(gt_act_elem%mv_conf)%elem => act_element
817 tmc_env%m_env%result_list(gt_act_elem%mv_conf + 1)%elem => tmp_element
819 tmc_env%m_env%gt_act => gt_act_elem
823 IF (.NOT. gt_act_elem%swaped)
THEN
824 CALL subtree_configuration_stat_change(gt_ptr=gt_act_elem, &
825 stat=gt_act_elem%stat, &
826 tmc_params=tmc_env%params)
829 IF (tmc_env%params%DRAW_TREE)
THEN
831 tmc_params=tmc_env%params)
835 CALL prob_update(move_types=tmc_env%params%move_types, &
837 prob_opt=tmc_env%params%esimate_acc_prob)
841 result_count=tmc_env%m_env%result_count, &
842 conf_updated=gt_act_elem%mv_conf, accepted=result_acc, &
843 tmc_params=tmc_env%params)
844 IF (gt_act_elem%swaped)
THEN
846 result_count=tmc_env%m_env%result_count, &
847 conf_updated=gt_act_elem%mv_conf + 1, accepted=result_acc, &
848 tmc_params=tmc_env%params)
852 IF (tmc_env%tmc_comp_set%para_env_m_ana%num_pe > 1 .AND. result_acc)
THEN
853 CALL add_to_list(elem=tmc_env%m_env%result_list(gt_act_elem%mv_conf)%elem, &
854 list=tmc_env%m_env%analysis_list, &
855 temp_ind=gt_act_elem%mv_conf, &
856 nr=tmc_env%m_env%result_count(gt_act_elem%mv_conf))
857 IF (gt_act_elem%swaped)
THEN
858 CALL add_to_list(elem=tmc_env%m_env%result_list(gt_act_elem%mv_conf + 1)%elem, &
859 list=tmc_env%m_env%analysis_list, &
860 temp_ind=gt_act_elem%mv_conf + 1, &
861 nr=tmc_env%m_env%result_count(gt_act_elem%mv_conf + 1))
864 END DO search_calculated_element_loop
867 CALL timestop(handle)
881 FUNCTION ready_for_update_acc_prob(elem)
RESULT(ready)
885 cpassert(
ASSOCIATED(elem))
887 IF ((elem%scf_energies_count >= 4) &
892 END FUNCTION ready_for_update_acc_prob
906 CHARACTER(LEN=*),
PARAMETER :: routinen =
'check_elements_for_acc_prob_update'
909 TYPE(
tree_type),
POINTER :: act_elem, parent_elem
911 NULLIFY (parent_elem, act_elem)
913 cpassert(
ASSOCIATED(tree_elem))
914 cpassert(
ASSOCIATED(tmc_env))
917 CALL timeset(routinen, handle)
919 act_elem => tree_elem
921 IF (tmc_env%params%esimate_acc_prob .AND. &
922 ready_for_update_acc_prob(act_elem))
THEN
929 CALL update_prob_gt_node_list(reference_list=act_elem%gt_nodes_references, &
930 act_elem=act_elem, parent_elem=parent_elem, act_parent=.true., &
935 parent_elem => tree_elem
938 IF (
ASSOCIATED(tree_elem%acc))
THEN
939 act_elem => tree_elem%acc
941 CALL update_prob_gt_node_list(reference_list=act_elem%gt_nodes_references, &
942 act_elem=act_elem, parent_elem=parent_elem, act_parent=.false., &
948 IF (.NOT.
ASSOCIATED(act_elem%nacc))
EXIT nacc_loop
949 act_elem => act_elem%nacc
950 CALL update_prob_gt_node_list(reference_list=act_elem%gt_nodes_references, &
951 act_elem=act_elem, parent_elem=parent_elem, act_parent=.false., &
956 CALL timestop(handle)
971 SUBROUTINE update_prob_gt_node_list(reference_list, act_elem, parent_elem, act_parent, tmc_env)
973 TYPE(
tree_type),
POINTER :: act_elem, parent_elem
974 LOGICAL :: act_parent
977 CHARACTER(LEN=*),
PARAMETER :: routinen =
'update_prob_gt_node_list'
979 INTEGER :: handle, integration_steps
980 REAL(kind=
dp) :: kb, tmp_prob
982 TYPE(
tree_type),
POINTER :: tmp_elem, tmp_parent_elem
986 NULLIFY (tmp_pt_ptr, tmp_elem, tmp_parent_elem)
988 IF (.NOT.
ASSOCIATED(reference_list))
RETURN
990 cpassert(
ASSOCIATED(reference_list%gt_elem))
991 cpassert(
ASSOCIATED(act_elem))
992 cpassert(
ASSOCIATED(parent_elem))
995 CALL timeset(routinen, handle)
998 IF (ready_for_update_acc_prob(act_elem))
THEN
1002 integration_steps = 100
1004 tmp_pt_ptr => reference_list
1006 reference_loop:
DO WHILE (
ASSOCIATED(tmp_pt_ptr))
1008 IF (tmp_pt_ptr%gt_elem%swaped)
THEN
1009 NULLIFY (tmp_elem, tmp_parent_elem)
1012 elem1=tmp_elem, elem2=tmp_parent_elem)
1014 IF (act_parent .AND.
ASSOCIATED(act_elem, tmp_elem) .AND. &
1015 ready_for_update_acc_prob(elem=tmp_parent_elem))
THEN
1018 elem_new=act_elem, &
1019 e_classical_diff=0.0_dp, &
1020 rnd_nr=tmp_pt_ptr%gt_elem%rnd_nr, &
1021 beta=1.0_dp/(kb*(tmc_env%params%Temp(tmp_pt_ptr%gt_elem%mv_conf) - &
1022 tmc_env%params%Temp(tmp_pt_ptr%gt_elem%mv_conf + 1))), &
1023 tmc_params=tmc_env%params)
1025 tmp_pt_ptr => tmp_pt_ptr%next
1026 cycle reference_loop
1030 IF (ready_for_update_acc_prob(parent_elem))
THEN
1032 elem_new=act_elem, &
1033 e_classical_diff=act_elem%e_pot_approx - parent_elem%e_pot_approx, &
1034 rnd_nr=tmp_pt_ptr%gt_elem%rnd_nr, &
1035 beta=1.0_dp/(kb*tmc_env%params%Temp(tmp_pt_ptr%gt_elem%mv_conf)), &
1036 tmc_params=tmc_env%params)
1040 IF (tmp_prob >= 0.0_dp)
THEN
1041 tmp_pt_ptr%gt_elem%prob_acc = tmp_prob
1043 IF (tmc_env%params%SPECULATIVE_CANCELING)
THEN
1045 prob=tmp_pt_ptr%gt_elem%prob_acc, tmc_env=tmc_env)
1050 tmp_pt_ptr => tmp_pt_ptr%next
1051 END DO reference_loop
1054 CALL timestop(handle)
1055 END SUBROUTINE update_prob_gt_node_list
various routines to log and control the output. The idea is that decisions about where to log should ...
Defines the basic variable types.
integer, parameter, public dp
An array-based list which grows on demand. When the internal array is full, a new array of twice the ...
Definition of physical constants:
real(kind=dp), parameter, public boltzmann
real(kind=dp), parameter, public joule
calculation section for TreeMonteCarlo
real(kind=dp) function, public compute_estimated_prob(elem_old, elem_new, e_classical_diff, rnd_nr, beta, tmc_params)
extimates the probability of acceptance considering the intermetiate step energies
subroutine, public get_scaled_cell(cell, box_scale, scaled_hmat, scaled_cell, vol, abc, vec)
handles properties and calculations of a scaled cell
module for printing tree structures in GraphViz dot files for visualizing the trees
subroutine, public create_global_tree_dot_color(gt_tree_element, tmc_params)
interfaces the change of color for global tree node on the basis of the element status
subroutine, public create_dot_color(tree_element, tmc_params)
interfaces the change of color for subtree elements on the basis of the element status
writing and printing the files, trajectory (pos, cell, dipoles) as well as restart files
subroutine, public write_result_list_element(result_list, result_count, conf_updated, accepted, tmc_params)
select the correct configuration to print out the (coordinates, forces, cell ...)
acceptance ratio handling of the different Monte Carlo Moves types For each move type and each temper...
subroutine, public prob_update(move_types, pt_el, elem, acc, subbox, prob_opt)
adaptation of acceptance probability of every kind of change/move and the overall acc prob,...
tree nodes creation, searching, deallocation, references etc.
integer, parameter, public mv_type_volume_move
integer, parameter, public mv_type_md
tree nodes creation, searching, deallocation, references etc.
integer, parameter, public task_type_gaussian_adaptation
tree nodes acceptance code is separated in 3 parts, first the acceptance criteria,...
subroutine, public tree_update(tmc_env, result_acc, something_updated)
searching tree nodes to check for Markov Chain, elements are marked and stored in lists ....
subroutine, public check_acceptance_of_depending_subtree_nodes(tree_elem, tmc_env)
check acceptance of energy calculated element and related childs, when ready
subroutine, public check_elements_for_acc_prob_update(tree_elem, tmc_env)
updates the subtree acceptance probability the swap probabilities are handled within the certain chec...
subroutine, public acceptance_check(tree_element, parent_element, tmc_params, temperature, diff_pot_check, accept, rnd_nr, approx_ener)
standard Monte Carlo and 2 potential acceptance check acceptance check of move from old(last accepted...
tree nodes creation, deallocation, references etc.
recursive subroutine, public remove_unused_g_tree(begin_ptr, end_ptr, removed, tmc_env)
deletes the no more used global tree nodes beside the result nodes from begin_ptr to end_ptr
recursive type(tree_type) function, pointer, public search_parent_element(current)
searching the parent element (last accepted configuration before)
recursive subroutine, public search_canceling_elements(pt_elem_in, prob, tmc_env)
searches in all branches down below the entered global tree element for elements to cancel,...
subroutine, public get_subtree_elements_to_check(gt_act_elem, elem1, elem2)
get the changed element of the actual global tree element and its related last accepted parent
recursive subroutine, public search_next_gt_element_to_check(ptr, found)
search the next global element in the Markov Chain to check
module handles definition of the tree nodes for the global and the subtrees binary tree parent elemen...
integer, parameter, public status_deleted
integer, parameter, public status_accepted
integer, parameter, public status_calculate_energy
integer, parameter, public status_calculate_md
subroutine, public add_to_list(elem, list, temp_ind, nr)
add a certain element to the specified element list at the beginning
integer, parameter, public status_canceled_ener
integer, parameter, public status_calculated
integer, parameter, public status_cancel_ener
integer, parameter, public status_cancel_nmc
integer, parameter, public status_canceled_nmc
integer, parameter, public status_calc_approx_ener
integer, parameter, public status_rejected
integer, parameter, public status_calculate_nmc_steps
integer, parameter, public status_accepted_result
integer, parameter, public status_deleted_result
integer, parameter, public status_created
integer, parameter, public status_rejected_result
module handles definition of the tree nodes for the global and the subtrees binary tree parent elemen...