73 #include "../base/base_uses.f90"
79 CHARACTER(len=*),
PARAMETER,
PRIVATE :: moduleN =
'tmc_tree_build'
98 SUBROUTINE allocate_new_global_tree_node(next_el, nr_temp)
99 TYPE(global_tree_type),
POINTER :: next_el
102 CHARACTER(LEN=*),
PARAMETER :: routineN =
'allocate_new_global_tree_node'
104 INTEGER :: handle, itmp
106 cpassert(.NOT.
ASSOCIATED(next_el))
109 CALL timeset(routinen, handle)
113 ALLOCATE (next_el%conf(nr_temp))
114 ALLOCATE (next_el%conf_n_acc(nr_temp))
115 next_el%rnd_nr = -1.0_dp
118 NULLIFY (next_el%conf(itmp)%elem)
119 next_el%conf_n_acc(itmp) = .false.
122 next_el%swaped = .false.
124 CALL timestop(handle)
125 END SUBROUTINE allocate_new_global_tree_node
132 SUBROUTINE deallocate_global_tree_node(gt_elem)
133 TYPE(global_tree_type),
POINTER :: gt_elem
135 CHARACTER(LEN=*),
PARAMETER :: routineN =
'deallocate_global_tree_node'
139 cpassert(
ASSOCIATED(gt_elem))
142 CALL timeset(routinen, handle)
145 DEALLOCATE (gt_elem%conf_n_acc)
146 DEALLOCATE (gt_elem%conf)
149 CALL timestop(handle)
150 END SUBROUTINE deallocate_global_tree_node
160 TYPE(tmc_param_type),
POINTER :: tmc_params
161 TYPE(tree_type),
POINTER :: next_el
164 CHARACTER(LEN=*),
PARAMETER :: routinen =
'allocate_new_sub_tree_node'
168 cpassert(.NOT.
ASSOCIATED(next_el))
171 CALL timeset(routinen, handle)
174 NULLIFY (next_el%subbox_center, next_el%pos, next_el%mol, next_el%vel, &
175 next_el%frc, next_el%dipole, next_el%elem_stat, &
176 next_el%gt_nodes_references)
178 next_el%scf_energies(:) = huge(next_el%scf_energies)
179 next_el%scf_energies_count = 0
180 ALLOCATE (next_el%pos(nr_dim))
181 ALLOCATE (next_el%mol(nr_dim/tmc_params%dim_per_elem))
182 ALLOCATE (next_el%vel(nr_dim))
183 IF (tmc_params%print_dipole)
ALLOCATE (next_el%dipole(tmc_params%dim_per_elem))
184 ALLOCATE (next_el%elem_stat(nr_dim))
186 ALLOCATE (next_el%subbox_center(tmc_params%dim_per_elem))
189 ALLOCATE (next_el%frc(nr_dim*nr_dim))
191 ALLOCATE (next_el%frc(nr_dim))
195 ALLOCATE (next_el%box_scale(3))
196 next_el%pos(:) = -1.0_dp
198 next_el%box_scale(:) = 1.0_dp
199 next_el%scf_energies(:) = 0.0_dp
200 next_el%e_pot_approx = 0.0_dp
201 next_el%potential = 76543.0_dp
203 next_el%ekin = 0.0_dp
204 next_el%ekin_before_md = 0.0_dp
205 next_el%sub_tree_nr = 0
207 next_el%rng_seed(:, :, :) = -1.0
211 CALL timestop(handle)
220 TYPE(tree_type),
POINTER :: tree_elem
222 CHARACTER(LEN=*),
PARAMETER :: routinen =
'deallocate_sub_tree_node'
226 cpassert(
ASSOCIATED(tree_elem))
229 CALL timeset(routinen, handle)
236 IF (
ASSOCIATED(tree_elem%box_scale))
DEALLOCATE (tree_elem%box_scale)
237 IF (
ASSOCIATED(tree_elem%frc))
DEALLOCATE (tree_elem%frc)
238 IF (
ASSOCIATED(tree_elem%subbox_center))
DEALLOCATE (tree_elem%subbox_center)
239 IF (
ASSOCIATED(tree_elem%elem_stat))
DEALLOCATE (tree_elem%elem_stat)
240 IF (
ASSOCIATED(tree_elem%dipole))
DEALLOCATE (tree_elem%dipole)
241 IF (
ASSOCIATED(tree_elem%vel))
DEALLOCATE (tree_elem%vel)
242 IF (
ASSOCIATED(tree_elem%mol))
DEALLOCATE (tree_elem%mol)
243 IF (
ASSOCIATED(tree_elem%pos))
DEALLOCATE (tree_elem%pos)
245 DEALLOCATE (tree_elem)
247 CALL timestop(handle)
263 TYPE(tree_type),
POINTER :: start_elem
264 TYPE(tmc_env_type),
POINTER :: tmc_env
265 INTEGER,
DIMENSION(:) :: job_counts
266 REAL(kind=
dp),
DIMENSION(4) :: worker_timings
268 CHARACTER(LEN=*),
PARAMETER :: routinen =
'init_tree_mod'
271 TYPE(global_tree_type),
POINTER :: global_tree
273 NULLIFY (global_tree)
275 cpassert(
ASSOCIATED(start_elem))
276 cpassert(
ASSOCIATED(tmc_env))
277 cpassert(
ASSOCIATED(tmc_env%m_env))
280 CALL timeset(routinen, handle)
283 CALL allocate_new_global_tree_node(next_el=tmc_env%m_env%gt_act, &
284 nr_temp=tmc_env%params%nr_temp)
287 CALL tmc_env%rng_stream%get( &
288 bg=tmc_env%m_env%gt_act%rng_seed(:, :, 1), &
289 cg=tmc_env%m_env%gt_act%rng_seed(:, :, 2), &
290 ig=tmc_env%m_env%gt_act%rng_seed(:, :, 3))
292 global_tree => tmc_env%m_env%gt_act
293 tmc_env%m_env%gt_head => tmc_env%m_env%gt_act
296 CALL tmc_env%rng_stream%set(bg=global_tree%rng_seed(:, :, 1), &
297 cg=global_tree%rng_seed(:, :, 2), &
298 ig=global_tree%rng_seed(:, :, 3))
299 global_tree%rnd_nr = tmc_env%rng_stream%next()
302 DO i = 1,
SIZE(global_tree%conf)
304 nr_dim=
SIZE(start_elem%pos))
305 global_tree%conf(i)%elem%move_type = 0
306 global_tree%conf(i)%elem%next_elem_nr => tmc_env%m_env%tree_node_count(i)
307 global_tree%conf(i)%elem%parent => null()
308 global_tree%conf(i)%elem%nr = global_tree%conf(i)%elem%next_elem_nr
309 global_tree%conf(i)%elem%sub_tree_nr = i
310 global_tree%conf(i)%elem%elem_stat =
status_ok
311 global_tree%conf(i)%elem%pos = start_elem%pos
312 global_tree%conf(i)%elem%mol = start_elem%mol
313 global_tree%conf(i)%elem%e_pot_approx = start_elem%e_pot_approx
314 global_tree%conf(i)%elem%temp_created = i
318 global_tree%conf(i)%elem%vel(:) = start_elem%vel(:)
319 global_tree%conf(i)%elem%frc(:) = start_elem%frc(:)
320 global_tree%conf(i)%elem%potential = start_elem%potential
321 global_tree%conf(i)%elem%ekin = start_elem%ekin
322 global_tree%conf(i)%elem%ekin_before_md = start_elem%ekin_before_md
326 CALL tmc_env%rng_stream%reset_to_next_substream()
327 CALL tmc_env%rng_stream%get(bg=global_tree%conf(i)%elem%rng_seed(:, :, 1), &
328 cg=global_tree%conf(i)%elem%rng_seed(:, :, 2), &
329 ig=global_tree%conf(i)%elem%rng_seed(:, :, 3))
334 IF (tmc_env%params%move_types%mv_weight(
mv_type_md) .GT. 0.0_dp)
THEN
335 CALL init_vel(vel=global_tree%conf(i)%elem%vel, atoms=tmc_env%params%atoms, &
336 temerature=tmc_env%params%Temp(i), &
337 rng_stream=tmc_env%rng_stream, &
338 rnd_seed=global_tree%conf(i)%elem%rng_seed)
339 global_tree%conf(i)%elem%ekin =
calc_e_kin(vel=global_tree%conf(i)%elem%vel, &
340 atoms=tmc_env%params%atoms)
346 tmc_env%m_env%st_heads(i)%elem => global_tree%conf(i)%elem
347 tmc_env%m_env%st_clean_ends(i)%elem => global_tree%conf(i)%elem
349 tmc_env%m_env%result_list(i)%elem => global_tree%conf(i)%elem
351 tmc_env%m_env%tree_node_count(:) = 0
354 tmc_env%m_env%gt_head => global_tree
355 tmc_env%m_env%gt_clean_end => global_tree
357 global_tree%swaped = .false.
358 global_tree%mv_conf = 1
359 global_tree%mv_next_conf =
modulo(global_tree%mv_conf,
SIZE(global_tree%conf)) + 1
360 global_tree%conf_n_acc = .true.
363 global_tree%prob_acc = 1.0_dp
366 global_tree%Temp = tmc_env%params%Temp(1)
367 IF (tmc_env%params%nr_temp .NE. 1 .AND. tmc_env%m_env%temp_decrease .NE. 1.0_dp) &
368 CALL cp_abort(__location__, &
369 "there is no parallel tempering implementation for simulated annealing implemented "// &
370 "(just one Temp per global tree element.")
373 IF (tmc_env%m_env%restart_in_file_name .NE.
"")
THEN
376 file_name=tmc_env%m_env%restart_in_file_name)
378 tmc_env%m_env%tree_node_count(0) = global_tree%nr
380 DO i = 1,
SIZE(tmc_env%m_env%result_list(:))
381 tmc_env%m_env%tree_node_count(i) = tmc_env%m_env%result_list(i)%elem%nr
384 global_tree%prob_acc = 1.0_dp
385 WRITE (tmc_env%m_env%io_unit, *)
"TMC| restarting at Markov Chain element(s): ", &
386 tmc_env%m_env%result_count
393 ELSE IF (tmc_env%params%NMC_inp_file .NE.
"")
THEN
403 IF (tmc_env%params%DRAW_TREE)
THEN
405 tmc_params=tmc_env%params)
407 tmc_params=tmc_env%params)
411 CALL timestop(handle)
423 TYPE(global_tree_type),
POINTER :: gt_tree_ptr
424 TYPE(tmc_env_type),
POINTER :: tmc_env
426 CHARACTER(LEN=*),
PARAMETER :: routinen =
'finalize_init'
430 cpassert(
ASSOCIATED(gt_tree_ptr))
431 cpassert(.NOT.
ASSOCIATED(gt_tree_ptr%parent))
432 cpassert(
ASSOCIATED(tmc_env))
433 cpassert(
ASSOCIATED(tmc_env%m_env))
434 cpassert(
ASSOCIATED(tmc_env%params))
437 CALL timeset(routinen, handle)
441 DO i = 1,
SIZE(gt_tree_ptr%conf)
443 IF (
ASSOCIATED(gt_tree_ptr%conf(1)%elem%dipole)) &
444 gt_tree_ptr%conf(i)%elem%dipole = gt_tree_ptr%conf(1)%elem%dipole
445 IF (tmc_env%m_env%restart_in_file_name .EQ.
"") &
446 gt_tree_ptr%conf(i)%elem%potential = gt_tree_ptr%conf(1)%elem%potential
449 IF (tmc_env%m_env%restart_in_file_name .EQ.
"")
THEN
450 tmc_env%m_env%result_count(:) = tmc_env%m_env%result_count(:) + 1
451 tmc_env%m_env%result_list(:) = gt_tree_ptr%conf(:)
453 DO i = 1,
SIZE(tmc_env%m_env%result_list)
455 result_count=tmc_env%m_env%result_count, &
456 conf_updated=i, accepted=.true., &
457 tmc_params=tmc_env%params)
459 IF (tmc_env%tmc_comp_set%para_env_m_ana%num_pe .GT. 1)
THEN
460 CALL add_to_list(elem=tmc_env%m_env%result_list(i)%elem, &
461 list=tmc_env%m_env%analysis_list, &
462 nr=tmc_env%m_env%result_count(i), &
472 CALL timestop(handle)
487 reactivation_cc_count)
488 TYPE(tmc_env_type),
POINTER :: tmc_env
489 INTEGER,
INTENT(OUT) :: stat
490 TYPE(global_tree_type),
INTENT(OUT),
POINTER :: new_elem
491 INTEGER :: reactivation_cc_count
493 CHARACTER(LEN=*),
PARAMETER :: routinen =
'create_new_gt_tree_node'
495 INTEGER :: handle, swap_conf
496 LOGICAL :: keep_on, n_acc
497 REAL(kind=
dp) :: prob, rnd, rnd2
498 TYPE(global_tree_type),
POINTER :: tmp_elem
499 TYPE(tree_type),
POINTER :: tree_elem
501 NULLIFY (tmp_elem, tree_elem, new_elem)
503 cpassert(
ASSOCIATED(tmc_env))
504 cpassert(
ASSOCIATED(tmc_env%params))
505 cpassert(
ASSOCIATED(tmc_env%m_env))
506 cpassert(
ASSOCIATED(tmc_env%m_env%gt_act))
509 CALL timeset(routinen, handle)
513 tmp_elem => tmc_env%m_env%gt_act
517 CALL most_prob_end(global_tree_elem=tmp_elem, prob=prob, n_acc=n_acc)
520 IF (
ASSOCIATED(tmp_elem) .AND. (exp(prob) .LT. 1.0e-10))
THEN
527 ELSE IF (.NOT.
ASSOCIATED(tmp_elem))
THEN
537 IF ((n_acc .AND.
ASSOCIATED(tmp_elem%acc)) .OR. &
538 ((.NOT. n_acc) .AND.
ASSOCIATED(tmp_elem%nacc)))
THEN
542 new_elem => tmp_elem%acc
544 new_elem => tmp_elem%nacc
547 cpassert(
ASSOCIATED(new_elem%conf(new_elem%mv_conf)%elem))
548 SELECT CASE (new_elem%conf(new_elem%mv_conf)%elem%stat)
554 reactivation_cc_count = reactivation_cc_count + 1
556 CALL cp_abort(__location__, &
557 "global tree node creation using existing sub tree element, "// &
558 "but is not a canceled one, gt elem "// &
559 cp_to_string(new_elem%nr)//
" st elem "// &
560 cp_to_string(new_elem%conf(new_elem%mv_conf)%elem%nr)// &
562 cp_to_string(new_elem%conf(new_elem%mv_conf)%elem%stat))
569 SELECT CASE (new_elem%conf(new_elem%mv_conf)%elem%move_type)
574 CALL cp_warn(__location__, &
575 "reactivating tree element with wrong status"// &
576 cp_to_string(new_elem%conf(new_elem%mv_conf)%elem%stat))
584 CALL cp_abort(__location__, &
585 "reactivated st element has no NMC or MD move type, "// &
586 "but seems to be canceled. Move type"// &
587 cp_to_string(new_elem%conf(new_elem%mv_conf)%elem%move_type))
589 cpabort(
"Unknown move type while reactivating subtree element.")
594 CALL allocate_new_global_tree_node(next_el=new_elem, &
595 nr_temp=tmc_env%params%nr_temp)
596 tmc_env%m_env%tree_node_count(0) = tmc_env%m_env%tree_node_count(0) + 1
597 new_elem%nr = tmc_env%m_env%tree_node_count(0)
602 IF (
ASSOCIATED(tmp_elem%acc)) &
603 cpabort(
"creating new subtree element on an occupied acc branch")
604 tmp_elem%acc => new_elem
606 IF (
ASSOCIATED(tmp_elem%nacc)) &
607 cpabort(
"creating new subtree element on an occupied nacc branch")
608 tmp_elem%nacc => new_elem
610 new_elem%parent => tmp_elem
613 new_elem%conf_n_acc(:) = new_elem%parent%conf_n_acc
616 IF (.NOT. new_elem%parent%swaped)
THEN
619 new_elem%conf_n_acc(new_elem%parent%conf( &
620 new_elem%parent%mv_conf)%elem%sub_tree_nr) = n_acc
625 IF (.NOT. n_acc)
THEN
627 IF (.NOT.
ASSOCIATED(tmp_elem%parent))
EXIT
628 IF (
ASSOCIATED(tmp_elem%parent%acc, tmp_elem))
THEN
629 tmp_elem => tmp_elem%parent
632 tmp_elem => tmp_elem%parent
633 IF (.NOT. tmp_elem%swaped)
EXIT
639 new_elem%conf(:) = tmp_elem%conf(:)
642 CALL tmc_env%rng_stream%set( &
643 bg=new_elem%parent%rng_seed(:, :, 1), &
644 cg=new_elem%parent%rng_seed(:, :, 2), &
645 ig=new_elem%parent%rng_seed(:, :, 3))
646 CALL tmc_env%rng_stream%reset_to_next_substream()
648 new_elem%rnd_nr = tmc_env%rng_stream%next()
654 new_elem%mv_conf = new_elem%parent%mv_next_conf
655 new_elem%mv_next_conf =
modulo(new_elem%mv_conf,
SIZE(new_elem%conf)) + 1
658 new_elem%Temp = tmp_elem%Temp
659 IF (n_acc) new_elem%Temp = tmp_elem%Temp*(1 - tmc_env%m_env%temp_decrease)
662 rnd = tmc_env%rng_stream%next()
663 rnd2 = tmc_env%rng_stream%next()
664 CALL tmc_env%rng_stream%get(bg=new_elem%rng_seed(:, :, 1), &
665 cg=new_elem%rng_seed(:, :, 2), &
666 ig=new_elem%rng_seed(:, :, 3))
674 new_elem%mv_next_conf = new_elem%mv_conf
676 swap_conf = 1 + int((tmc_env%params%nr_temp - 1)*rnd2)
677 new_elem%mv_conf = swap_conf
680 tree_elem => new_elem%conf(new_elem%mv_conf)%elem
681 new_elem%conf(new_elem%mv_conf)%elem => &
682 new_elem%conf(new_elem%mv_conf + 1)%elem
683 new_elem%conf(new_elem%mv_conf + 1)%elem => tree_elem
686 new_elem%swaped = .true.
687 new_elem%prob_acc = tmc_env%params%move_types%acc_prob( &
690 IF (tmc_env%params%DRAW_TREE) &
692 tmc_params=tmc_env%params)
703 IF (new_elem%conf_n_acc(new_elem%conf(new_elem%mv_conf)%elem%sub_tree_nr))
THEN
705 IF (
ASSOCIATED(new_elem%conf(new_elem%mv_conf)%elem%acc))
THEN
706 new_elem%conf(new_elem%mv_conf)%elem => &
707 new_elem%conf(new_elem%mv_conf)%elem%acc
711 CALL create_new_subtree_node(act_gt_el=new_elem, &
713 IF (tmc_env%params%DRAW_TREE) &
714 CALL create_dot(new_element=new_elem%conf(new_elem%mv_conf)%elem, &
715 conf=new_elem%conf(new_elem%mv_conf)%elem%sub_tree_nr, &
716 tmc_params=tmc_env%params)
720 IF (
ASSOCIATED(new_elem%conf(new_elem%mv_conf)%elem%nacc))
THEN
721 new_elem%conf(new_elem%mv_conf)%elem => &
722 new_elem%conf(new_elem%mv_conf)%elem%nacc
726 CALL create_new_subtree_node(act_gt_el=new_elem, &
728 IF (tmc_env%params%DRAW_TREE) &
729 CALL create_dot(new_element=new_elem%conf(new_elem%mv_conf)%elem, &
730 conf=new_elem%conf(new_elem%mv_conf)%elem%sub_tree_nr, &
731 tmc_params=tmc_env%params)
737 new_elem%prob_acc = tmc_env%params%move_types%acc_prob( &
738 new_elem%conf(new_elem%mv_conf)%elem%move_type, new_elem%mv_conf)
741 IF (tmc_env%params%DRAW_TREE) &
743 tmc_params=tmc_env%params)
753 cpabort(
"selected existing RESULT gt node")
755 SELECT CASE (new_elem%conf(new_elem%mv_conf)%elem%stat)
760 stat = new_elem%conf(new_elem%mv_conf)%elem%stat
761 IF (tmc_env%params%DRAW_TREE) &
763 tmc_params=tmc_env%params)
765 new_elem%stat = new_elem%conf(new_elem%mv_conf)%elem%stat
767 stat = new_elem%conf(new_elem%mv_conf)%elem%stat
768 IF (tmc_env%params%DRAW_TREE) &
770 tmc_params=tmc_env%params)
775 new_elem%stat = new_elem%conf(new_elem%mv_conf)%elem%stat
777 stat = new_elem%conf(new_elem%mv_conf)%elem%stat
778 IF (tmc_env%params%DRAW_TREE) &
780 tmc_params=tmc_env%params)
790 IF (tmc_env%params%DRAW_TREE) &
792 tmc_params=tmc_env%params)
795 new_elem%conf(new_elem%mv_conf)%elem%stat = &
798 stat = new_elem%conf(new_elem%mv_conf)%elem%stat
799 reactivation_cc_count = reactivation_cc_count + 1
800 IF (tmc_env%params%DRAW_TREE) &
802 tmc_params=tmc_env%params)
804 CALL cp_abort(__location__, &
806 cp_to_string(new_elem%conf(new_elem%mv_conf)%elem%stat)// &
807 "of subtree element "// &
808 "for creating new gt element")
817 CALL timestop(handle)
827 SUBROUTINE create_new_subtree_node(act_gt_el, tmc_env)
828 TYPE(global_tree_type),
POINTER :: act_gt_el
829 TYPE(tmc_env_type),
POINTER :: tmc_env
831 CHARACTER(LEN=*),
PARAMETER :: routinen =
'create_new_subtree_node'
833 INTEGER :: conf, handle, itmp
834 LOGICAL :: mv_rejected, new_subbox
836 TYPE(tree_type),
POINTER :: new_elem, parent_elem
838 NULLIFY (new_elem, parent_elem)
840 cpassert(
ASSOCIATED(act_gt_el))
841 cpassert(
ASSOCIATED(act_gt_el%conf(act_gt_el%mv_conf)%elem))
842 cpassert(
ASSOCIATED(tmc_env))
843 cpassert(
ASSOCIATED(tmc_env%params))
846 CALL timeset(routinen, handle)
848 conf = act_gt_el%mv_conf
850 next_el=new_elem, nr_dim=
SIZE(act_gt_el%parent%conf(conf)%elem%pos))
853 parent_elem => act_gt_el%conf(conf)%elem
854 new_elem%parent => parent_elem
857 parent_elem%next_elem_nr = parent_elem%next_elem_nr + 1
858 new_elem%nr = parent_elem%next_elem_nr
859 new_elem%rng_seed = parent_elem%rng_seed
862 IF (act_gt_el%conf_n_acc(act_gt_el%conf(act_gt_el%mv_conf)%elem%sub_tree_nr))
THEN
863 parent_elem%acc => new_elem
865 parent_elem%nacc => new_elem
871 new_elem%pos(:) = parent_elem%pos(:)
872 new_elem%mol(:) = parent_elem%mol(:)
873 new_elem%vel(:) = parent_elem%vel(:)
874 new_elem%ekin = parent_elem%ekin
875 new_elem%e_pot_approx = parent_elem%e_pot_approx
876 new_elem%next_elem_nr => parent_elem%next_elem_nr
877 new_elem%sub_tree_nr = parent_elem%sub_tree_nr
878 new_elem%box_scale = parent_elem%box_scale
880 new_elem%frc(:) = parent_elem%frc(:)
881 new_elem%potential = parent_elem%potential
882 new_elem%ekin_before_md = parent_elem%ekin_before_md
884 new_elem%potential = 97589.0_dp
888 CALL tmc_env%rng_stream%set( &
889 bg=new_elem%rng_seed(:, :, 1), &
890 cg=new_elem%rng_seed(:, :, 2), &
891 ig=new_elem%rng_seed(:, :, 3))
892 CALL tmc_env%rng_stream%reset_to_next_substream()
895 rnd = tmc_env%rng_stream%next()
896 IF (tmc_env%params%NMC_inp_file .NE.
"")
THEN
897 new_elem%temp_created = int(tmc_env%params%nr_temp*rnd) + 1
899 new_elem%temp_created = act_gt_el%mv_conf
903 rnd = tmc_env%rng_stream%next()
906 move_types=tmc_env%params%move_types, &
908 CALL tmc_env%rng_stream%get( &
909 bg=new_elem%rng_seed(:, :, 1), &
910 cg=new_elem%rng_seed(:, :, 2), &
911 ig=new_elem%rng_seed(:, :, 3))
917 SELECT CASE (new_elem%move_type)
923 new_elem%temp_created = act_gt_el%mv_conf
926 rng_stream=tmc_env%rng_stream, elem=new_elem, &
927 nr_of_sub_box_elements=itmp)
933 rng_stream=tmc_env%rng_stream, elem=new_elem, &
934 nr_of_sub_box_elements=itmp)
946 move_types=tmc_env%params%move_types, &
947 rng_stream=tmc_env%rng_stream, elem=new_elem, &
948 mv_conf=conf, new_subbox=new_subbox, &
949 move_rejected=mv_rejected)
950 IF (mv_rejected)
THEN
951 new_elem%potential = huge(new_elem%potential)
952 new_elem%e_pot_approx = huge(new_elem%e_pot_approx)
956 IF (tmc_env%params%NMC_inp_file .NE.
"") &
962 CALL cp_abort(__location__, &
963 "unknown move type ("//cp_to_string(new_elem%move_type)// &
964 "), while creating subtree element.")
966 act_gt_el%conf(act_gt_el%mv_conf)%elem => new_elem
969 CALL timestop(handle)
970 cpassert(
ASSOCIATED(act_gt_el%conf(act_gt_el%mv_conf)%elem))
971 END SUBROUTINE create_new_subtree_node
984 SUBROUTINE remove_gt_elem(gt_ptr, draw, tmc_env)
985 TYPE(global_tree_type),
POINTER :: gt_ptr
986 LOGICAL,
OPTIONAL :: draw
987 TYPE(tmc_env_type),
POINTER :: tmc_env
989 CHARACTER(LEN=*),
PARAMETER :: routinen =
'remove_gt_elem'
993 cpassert(
ASSOCIATED(gt_ptr))
994 cpassert(
ASSOCIATED(tmc_env))
997 CALL timeset(routinen, handle)
1007 IF (tmc_env%params%DRAW_TREE .AND.
PRESENT(draw)) &
1011 IF (
ASSOCIATED(gt_ptr%parent))
THEN
1012 IF (
ASSOCIATED(gt_ptr%parent%acc, gt_ptr))
THEN
1013 gt_ptr%parent%acc => null()
1015 IF (
ASSOCIATED(gt_ptr%parent%nacc, gt_ptr))
THEN
1016 gt_ptr%parent%nacc => null()
1021 IF (
ASSOCIATED(gt_ptr%acc))
THEN
1022 gt_ptr%acc%parent => null()
1025 IF (
ASSOCIATED(gt_ptr%nacc))
THEN
1026 gt_ptr%nacc%parent => null()
1029 CALL deallocate_global_tree_node(gt_elem=gt_ptr)
1031 CALL timestop(handle)
1033 cpassert(.NOT.
ASSOCIATED(gt_ptr))
1034 END SUBROUTINE remove_gt_elem
1044 SUBROUTINE remove_st_elem(ptr, draw, tmc_env)
1045 TYPE(tree_type),
POINTER :: ptr
1046 LOGICAL,
OPTIONAL :: draw
1047 TYPE(tmc_env_type),
POINTER :: tmc_env
1049 CHARACTER(LEN=*),
PARAMETER :: routinen =
'remove_st_elem'
1055 cpassert(
ASSOCIATED(ptr))
1056 cpassert(
ASSOCIATED(tmc_env))
1059 CALL timeset(routinen, handle)
1062 IF (
ASSOCIATED(ptr%gt_nodes_references))
THEN
1063 IF (
ASSOCIATED(ptr%parent)) &
1064 CALL cp_warn(__location__, &
1065 "try to deallocate subtree element"// &
1066 cp_to_string(ptr%sub_tree_nr)//cp_to_string(ptr%nr)// &
1067 " still with global tree element references e.g."// &
1068 cp_to_string(ptr%gt_nodes_references%gt_elem%nr))
1069 cpassert(
ASSOCIATED(ptr%gt_nodes_references%gt_elem))
1071 SELECT CASE (ptr%stat)
1077 cpassert(tmc_env%params%SPECULATIVE_CANCELING)
1080 IF (
PRESENT(draw)) ready = .false.
1085 IF (
ASSOCIATED(ptr%parent) .AND. &
1086 (
ASSOCIATED(ptr%acc) .OR.
ASSOCIATED(ptr%nacc)))
THEN
1098 IF (tmc_env%params%DRAW_TREE .AND.
PRESENT(draw)) &
1102 IF (
ASSOCIATED(ptr%parent))
THEN
1103 IF (
ASSOCIATED(ptr%parent%acc, ptr)) ptr%parent%acc => null()
1104 IF (
ASSOCIATED(ptr%parent%nacc, ptr)) ptr%parent%nacc => null()
1108 IF (
ASSOCIATED(ptr%acc)) ptr%acc%parent => null()
1109 IF (
ASSOCIATED(ptr%nacc)) ptr%nacc%parent => null()
1116 CALL timestop(handle)
1117 END SUBROUTINE remove_st_elem
1129 TYPE(global_tree_type),
POINTER :: begin_ptr, end_ptr
1131 TYPE(tmc_env_type),
POINTER :: tmc_env
1133 CHARACTER(LEN=*),
PARAMETER :: routinen =
'remove_unused_g_tree'
1136 LOGICAL :: acc_removed, nacc_removed
1137 TYPE(global_tree_type),
POINTER :: acc_ptr, nacc_ptr, tmp_ptr
1139 NULLIFY (acc_ptr, nacc_ptr, tmp_ptr)
1141 cpassert(
ASSOCIATED(begin_ptr))
1142 cpassert(
ASSOCIATED(end_ptr))
1143 cpassert(
ASSOCIATED(tmc_env))
1146 CALL timeset(routinen, handle)
1149 acc_removed = .false.
1150 nacc_removed = .false.
1152 IF (.NOT.
ASSOCIATED(begin_ptr, end_ptr))
THEN
1155 IF (
ASSOCIATED(begin_ptr%acc))
THEN
1156 acc_ptr => begin_ptr%acc
1159 acc_removed = .true.
1161 IF (
ASSOCIATED(begin_ptr%nacc))
THEN
1162 nacc_ptr => begin_ptr%nacc
1165 nacc_removed = .true.
1169 IF (acc_removed .AND. nacc_removed)
THEN
1170 SELECT CASE (begin_ptr%stat)
1175 tmp_ptr => begin_ptr
1177 CALL remove_gt_elem(gt_ptr=tmp_ptr, draw=.true., tmc_env=tmc_env)
1178 IF (.NOT.
ASSOCIATED(tmp_ptr)) removed = .true.
1181 CALL cp_abort(__location__, &
1182 "try to dealloc unused tree element with status of begin element" &
1183 //cp_to_string(begin_ptr%stat))
1188 CALL timestop(handle)
1189 cpassert(
ASSOCIATED(end_ptr))
1202 RECURSIVE SUBROUTINE remove_unused_s_tree(begin_ptr, end_ptr, working_elem_list, &
1204 TYPE(tree_type),
POINTER :: begin_ptr
1205 TYPE(tree_type),
INTENT(IN),
POINTER :: end_ptr
1206 TYPE(elem_array_type),
DIMENSION(:),
POINTER :: working_elem_list
1208 TYPE(tmc_env_type),
POINTER :: tmc_env
1210 CHARACTER(LEN=*),
PARAMETER :: routinen =
'remove_unused_s_tree'
1212 INTEGER :: handle, i
1213 LOGICAL :: acc_removed, nacc_removed, remove_this
1214 TYPE(tree_type),
POINTER :: acc_ptr, nacc_ptr, tmp_ptr
1216 NULLIFY (acc_ptr, nacc_ptr, tmp_ptr)
1217 remove_this = .false.
1219 acc_removed = .false.
1220 nacc_removed = .false.
1223 CALL timeset(routinen, handle)
1225 cpassert(
ASSOCIATED(begin_ptr))
1226 cpassert(
ASSOCIATED(end_ptr))
1227 cpassert(
ASSOCIATED(working_elem_list))
1228 cpassert(
ASSOCIATED(tmc_env))
1231 IF (.NOT.
ASSOCIATED(begin_ptr, end_ptr))
THEN
1234 IF (
ASSOCIATED(begin_ptr%acc))
THEN
1235 acc_ptr => begin_ptr%acc
1236 CALL remove_unused_s_tree(acc_ptr, end_ptr, working_elem_list, &
1237 acc_removed, tmc_env)
1239 acc_removed = .true.
1241 IF (
ASSOCIATED(begin_ptr%nacc))
THEN
1242 nacc_ptr => begin_ptr%nacc
1243 CALL remove_unused_s_tree(nacc_ptr, end_ptr, working_elem_list, &
1244 nacc_removed, tmc_env)
1246 nacc_removed = .true.
1254 IF (acc_removed .AND. nacc_removed)
THEN
1255 SELECT CASE (begin_ptr%stat)
1257 remove_this = .true.
1260 remove_this = .true.
1265 remove_this = .false.
1269 CALL cp_abort(__location__, &
1270 "unknown status "//cp_to_string(begin_ptr%stat)// &
1271 "of sub tree element "// &
1272 cp_to_string(begin_ptr%sub_tree_nr)//
" "// &
1273 cp_to_string(begin_ptr%nr))
1277 IF (remove_this)
THEN
1279 IF (.NOT.
ASSOCIATED(begin_ptr%parent)) &
1280 CALL cp_abort(__location__, &
1281 "try to remove unused subtree element "// &
1282 cp_to_string(begin_ptr%sub_tree_nr)//
" "// &
1283 cp_to_string(begin_ptr%nr)// &
1284 " but parent does not exist")
1285 tmp_ptr => begin_ptr
1288 DO i = 1,
SIZE(working_elem_list(:))
1289 IF (
ASSOCIATED(working_elem_list(i)%elem))
THEN
1290 IF (
ASSOCIATED(working_elem_list(i)%elem, tmp_ptr)) &
1297 CALL remove_st_elem(ptr=tmp_ptr, draw=.true., tmc_env=tmc_env)
1298 IF (.NOT.
ASSOCIATED(tmp_ptr))
THEN
1308 CALL timestop(handle)
1309 END SUBROUTINE remove_unused_s_tree
1319 RECURSIVE SUBROUTINE remove_result_g_tree(end_of_clean_tree, actual_ptr, &
1321 TYPE(global_tree_type),
POINTER :: end_of_clean_tree, actual_ptr
1322 TYPE(tmc_env_type),
POINTER :: tmc_env
1324 CHARACTER(LEN=*),
PARAMETER :: routinen =
'remove_result_g_tree'
1327 TYPE(global_tree_type),
POINTER :: tmp_ptr
1329 cpassert(
ASSOCIATED(end_of_clean_tree))
1330 cpassert(
ASSOCIATED(actual_ptr))
1333 CALL timeset(routinen, handle)
1336 IF (
ASSOCIATED(actual_ptr%parent)) &
1337 CALL remove_result_g_tree(end_of_clean_tree=end_of_clean_tree, &
1338 actual_ptr=actual_ptr%parent, &
1341 IF (.NOT.
ASSOCIATED(actual_ptr, end_of_clean_tree))
THEN
1344 tmp_ptr => actual_ptr
1345 CALL remove_gt_elem(gt_ptr=tmp_ptr, draw=.true., tmc_env=tmc_env)
1346 actual_ptr => tmp_ptr
1349 CALL timestop(handle)
1350 END SUBROUTINE remove_result_g_tree
1361 RECURSIVE SUBROUTINE remove_result_s_tree(end_of_clean_tree, actual_ptr, &
1363 TYPE(tree_type),
POINTER :: end_of_clean_tree, actual_ptr
1364 TYPE(tmc_env_type),
POINTER :: tmc_env
1366 CHARACTER(LEN=*),
PARAMETER :: routinen =
'remove_result_s_tree'
1369 TYPE(tree_type),
POINTER :: tmp_ptr
1371 cpassert(
ASSOCIATED(end_of_clean_tree))
1372 cpassert(
ASSOCIATED(actual_ptr))
1373 cpassert(
ASSOCIATED(tmc_env))
1376 CALL timeset(routinen, handle)
1379 IF (
ASSOCIATED(actual_ptr%parent)) &
1380 CALL remove_result_s_tree(end_of_clean_tree, actual_ptr%parent, &
1384 IF (.NOT.
ASSOCIATED(actual_ptr, end_of_clean_tree))
THEN
1386 IF (
ASSOCIATED(actual_ptr%acc) .AND.
ASSOCIATED(actual_ptr%nacc))
THEN
1391 IF (.NOT.
ASSOCIATED(actual_ptr%parent))
THEN
1393 tmp_ptr => actual_ptr
1394 CALL remove_st_elem(ptr=tmp_ptr, draw=.true., tmc_env=tmc_env)
1395 actual_ptr => tmp_ptr
1399 CALL timestop(handle)
1400 END SUBROUTINE remove_result_s_tree
1411 TYPE(elem_array_type),
DIMENSION(:),
POINTER :: working_elem_list
1412 TYPE(tmc_env_type),
POINTER :: tmc_env
1414 CHARACTER(LEN=*),
PARAMETER :: routinen =
'remove_all_trees'
1416 INTEGER :: handle, i, tree
1417 LOGICAL :: change_trajec, flag
1418 TYPE(global_tree_type),
POINTER :: tmp_gt_ptr
1419 TYPE(tree_type),
POINTER :: last_acc_st_elem, tmp_ptr
1421 NULLIFY (last_acc_st_elem, tmp_ptr, tmp_gt_ptr)
1423 cpassert(
ASSOCIATED(working_elem_list))
1424 cpassert(
ASSOCIATED(tmc_env))
1425 cpassert(
ASSOCIATED(tmc_env%m_env))
1426 cpassert(
ASSOCIATED(tmc_env%m_env%gt_act))
1427 cpassert(
ASSOCIATED(tmc_env%m_env%gt_clean_end))
1428 cpassert(
ASSOCIATED(tmc_env%m_env%result_list))
1429 cpassert(
ASSOCIATED(tmc_env%m_env%st_clean_ends))
1432 change_trajec = .false.
1435 CALL timeset(routinen, handle)
1439 end_ptr=tmc_env%m_env%gt_act, removed=flag, &
1441 tmp_gt_ptr => tmc_env%m_env%gt_clean_end
1443 tree_ptr=tmp_gt_ptr)
1445 IF (tmc_env%params%USE_REDUCED_TREE)
THEN
1446 tmp_gt_ptr => tmc_env%m_env%gt_clean_end
1447 CALL remove_result_g_tree(end_of_clean_tree=tmc_env%m_env%gt_clean_end, &
1448 actual_ptr=tmp_gt_ptr, tmc_env=tmc_env)
1451 IF (.NOT.
ASSOCIATED(tmc_env%m_env%gt_head, tmc_env%m_env%gt_clean_end)) &
1452 change_trajec = .true.
1453 tmc_env%m_env%gt_head => tmc_env%m_env%gt_clean_end
1454 cpassert(.NOT.
ASSOCIATED(tmc_env%m_env%gt_head%parent))
1460 DO tree = 1, tmc_env%params%nr_temp
1462 conf_loop:
DO i = 1,
SIZE(tmc_env%m_env%result_list)
1463 last_acc_st_elem => tmc_env%m_env%result_list(i)%elem
1464 IF (last_acc_st_elem%sub_tree_nr .EQ. tree) &
1467 cpassert(last_acc_st_elem%sub_tree_nr .EQ. tree)
1468 CALL remove_unused_s_tree(begin_ptr=tmc_env%m_env%st_clean_ends(tree)%elem, &
1469 end_ptr=last_acc_st_elem, working_elem_list=working_elem_list, &
1470 removed=flag, tmc_env=tmc_env)
1472 last_acc=last_acc_st_elem)
1475 IF (tmc_env%params%USE_REDUCED_TREE .AND. change_trajec)
THEN
1476 DO tree = 1, tmc_env%params%nr_temp
1477 tmp_ptr => tmc_env%m_env%st_clean_ends(tree)%elem
1478 cpassert(tmp_ptr%sub_tree_nr .EQ. tree)
1479 CALL remove_result_s_tree(end_of_clean_tree=tmc_env%m_env%st_clean_ends(tree)%elem, &
1480 actual_ptr=tmp_ptr, tmc_env=tmc_env)
1481 tmc_env%m_env%st_heads(tree)%elem => tmc_env%m_env%st_clean_ends(tree)%elem
1489 CALL timestop(handle)
1490 cpassert(
ASSOCIATED(tmc_env%m_env%gt_act))
1491 cpassert(
ASSOCIATED(tmc_env%m_env%gt_clean_end))
1501 RECURSIVE SUBROUTINE dealloc_whole_g_tree(begin_ptr, removed, tmc_env)
1502 TYPE(global_tree_type),
POINTER :: begin_ptr
1504 TYPE(tmc_env_type),
POINTER :: tmc_env
1506 LOGICAL :: acc_removed, nacc_removed
1507 TYPE(global_tree_type),
POINTER :: acc_ptr, nacc_ptr, tmp_ptr
1509 cpassert(
ASSOCIATED(begin_ptr))
1510 cpassert(
ASSOCIATED(tmc_env))
1512 IF (
ASSOCIATED(begin_ptr%acc))
THEN
1513 acc_ptr => begin_ptr%acc
1514 CALL dealloc_whole_g_tree(acc_ptr, acc_removed, tmc_env)
1516 acc_removed = .true.
1518 IF (
ASSOCIATED(begin_ptr%nacc))
THEN
1519 nacc_ptr => begin_ptr%nacc
1520 CALL dealloc_whole_g_tree(nacc_ptr, nacc_removed, tmc_env)
1522 nacc_removed = .true.
1526 IF (acc_removed .AND. nacc_removed)
THEN
1528 elem=begin_ptr%conf(begin_ptr%mv_conf)%elem, tmc_env=tmc_env)
1529 tmp_ptr => begin_ptr
1530 CALL remove_gt_elem(gt_ptr=tmp_ptr, draw=.false., tmc_env=tmc_env)
1534 END SUBROUTINE dealloc_whole_g_tree
1542 RECURSIVE SUBROUTINE dealloc_whole_subtree(begin_ptr, removed, tmc_params)
1543 TYPE(tree_type),
POINTER :: begin_ptr
1545 TYPE(tmc_param_type),
POINTER :: tmc_params
1547 LOGICAL :: acc_removed, nacc_removed
1548 TYPE(tree_type),
POINTER :: acc_ptr, nacc_ptr, tmp_ptr
1550 cpassert(
ASSOCIATED(begin_ptr))
1551 cpassert(
ASSOCIATED(tmc_params))
1553 IF (
ASSOCIATED(begin_ptr%acc))
THEN
1554 acc_ptr => begin_ptr%acc
1555 CALL dealloc_whole_subtree(acc_ptr, acc_removed, tmc_params)
1557 acc_removed = .true.
1559 IF (
ASSOCIATED(begin_ptr%nacc))
THEN
1560 nacc_ptr => begin_ptr%nacc
1561 CALL dealloc_whole_subtree(nacc_ptr, nacc_removed, tmc_params)
1563 nacc_removed = .true.
1567 IF (acc_removed .AND. nacc_removed)
THEN
1568 tmp_ptr => begin_ptr
1572 END SUBROUTINE dealloc_whole_subtree
1583 TYPE(tmc_env_type),
POINTER :: tmc_env
1587 TYPE(global_tree_type),
POINTER :: global_tree
1589 cpassert(
ASSOCIATED(tmc_env))
1590 cpassert(
ASSOCIATED(tmc_env%m_env))
1592 global_tree => tmc_env%m_env%gt_act
1595 DO WHILE (
ASSOCIATED(global_tree%parent))
1596 global_tree => global_tree%parent
1598 CALL dealloc_whole_g_tree(begin_ptr=global_tree, removed=flag, &
1602 trees_loop:
DO i = 1,
SIZE(tmc_env%m_env%st_clean_ends(:))
1603 DO WHILE (
ASSOCIATED(tmc_env%m_env%st_clean_ends(i)%elem%parent))
1604 tmc_env%m_env%st_clean_ends(i)%elem => &
1605 tmc_env%m_env%st_clean_ends(i)%elem%parent
1607 CALL dealloc_whole_subtree(begin_ptr=tmc_env%m_env%st_clean_ends(i)%elem, &
1608 removed=flag, tmc_params=tmc_env%params)
1610 DEALLOCATE (tmc_env%params%atoms)
static GRID_HOST_DEVICE int modulo(int a, int m)
Equivalent of Fortran's MODULO, which always return a positive number. https://gcc....
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 ...
Timing routines for accounting.
calculation section for TreeMonteCarlo
subroutine, public init_vel(vel, atoms, temerature, rng_stream, rnd_seed)
routine sets initial velocity, using the Box-Muller Method for Normal (Gaussian) Deviates
real(kind=dp) function, public calc_e_kin(vel, atoms)
routine calculates the kinetic energy, using the velocities and atom mass, both in atomic units
module for printing tree structures in GraphViz dot files for visualizing the trees
subroutine, public create_dot(new_element, conf, tmc_params)
interfaces the creating of a branch for subtree elements
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_global_tree_dot(new_element, tmc_params)
creates new dot and arrow from element one level up (for subtree) additional handling of nodes with s...
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 ...)
subroutine, public read_restart_file(tmc_env, job_counts, timings, file_name)
reads the TMC restart file with all last configurations and counters etc.
acceptance ratio handling of the different Monte Carlo Moves types For each move type and each temper...
integer function, public select_random_move_type(move_types, rnd)
selects a move type related to the weighings and the entered rnd nr
tree nodes creation, searching, deallocation, references etc.
integer, parameter, public mv_type_mol_rot
integer, parameter, public mv_type_volume_move
integer, parameter, public mv_type_proton_reorder
integer, parameter, public mv_type_swap_conf
integer, parameter, public mv_type_md
integer, parameter, public mv_type_mol_trans
integer, parameter, public mv_type_atom_swap
integer, parameter, public mv_type_gausian_adapt
integer, parameter, public mv_type_atom_trans
integer, parameter, public mv_type_nmc_moves
integer, parameter, public mv_type_none
different move types are applied
subroutine, public elements_in_new_subbox(tmc_params, rng_stream, elem, nr_of_sub_box_elements)
set a new random sub box center and counte the number of atoms in it
subroutine, public change_pos(tmc_params, move_types, rng_stream, elem, mv_conf, new_subbox, move_rejected)
applying the preselected move type
tree nodes creation, searching, deallocation, references etc.
integer, parameter, public tmc_status_failed
integer, parameter, public task_type_gaussian_adaptation
integer, parameter, public tmc_status_wait_for_new_task
integer, parameter, public task_type_mc
tree nodes creation, deallocation, references etc.
subroutine, public init_tree_mod(start_elem, tmc_env, job_counts, worker_timings)
routine initiate the global and subtrees with the first elements
subroutine, public deallocate_sub_tree_node(tree_elem)
deallocates an elements of the subtree element structure
subroutine, public create_new_gt_tree_node(tmc_env, stat, new_elem, reactivation_cc_count)
creates new global tree element and if needed new subtree element
subroutine, public finalize_init(gt_tree_ptr, tmc_env)
distributes the initial energy to all subtree (if no restart) and call analysis for this element (wri...
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
subroutine, public remove_all_trees(working_elem_list, tmc_env)
deallocates the no more used tree nodes beside the result nodes from begin_ptr to end_ptr in global a...
subroutine, public finalize_trees(tmc_env)
deallocating every tree node of every trees (clean up)
subroutine, public allocate_new_sub_tree_node(tmc_params, next_el, nr_dim)
allocates an elements of the subtree element structure
subroutine, public search_and_remove_reference_in_list(gt_ptr, elem, tmc_env)
removes the global tree references of this actual global tree element from all related sub tree eleme...
subroutine, public add_to_references(gt_elem)
adds global tree reference to the modified sub tree element(s)
subroutine, public remove_subtree_element_of_all_references(ptr)
removes the pointers to a certain subtree element from every related global tree element
subroutine, public remove_gt_references(gt_ptr, tmc_env)
removes the global tree references of this actual global tree element from all related sub tree eleme...
recursive subroutine, public search_end_of_clean_g_tree(last_acc, tree_ptr)
searches last element on trajectory, until where the sides of the tree are deleted (of global tree) a...
recursive type(tree_type) function, pointer, public search_parent_element(current)
searching the parent element (last accepted configuration before)
recursive subroutine, public most_prob_end(global_tree_elem, prob, n_acc, search_energy_node)
search most probable end in global tree to create a new tree node using the acceptance probabilities ...
recursive subroutine, public search_end_of_clean_tree(tree_ptr, last_acc)
searches last element on trajectory, until where the sides of the tree are deleted (in sub tree) also...
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_ok
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...