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
 
  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)
 
 
  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)
 
 
  265      INTEGER, 
DIMENSION(:)                              :: job_counts
 
  266      REAL(kind=
dp), 
DIMENSION(4)                        :: worker_timings
 
  268      CHARACTER(LEN=*), 
PARAMETER                        :: routinen = 
'init_tree_mod' 
  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)
 
 
  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)
 
  489      INTEGER, 
INTENT(OUT)                               :: stat
 
  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
 
  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 "// &
 
  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)
 
  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)
 
  986      LOGICAL, 
OPTIONAL                                  :: draw
 
  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)
 
 1046      LOGICAL, 
OPTIONAL                                  :: draw
 
 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"// &
 
 1067                         " still with global tree element references e.g."// &
 
 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
 
 1133      CHARACTER(LEN=*), 
PARAMETER :: routinen = 
'remove_unused_g_tree' 
 1136      LOGICAL                                            :: acc_removed, nacc_removed
 
 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" &
 
 1188      CALL timestop(handle)
 
 1189      cpassert(
ASSOCIATED(end_ptr))
 
 
 1202   RECURSIVE SUBROUTINE remove_unused_s_tree(begin_ptr, end_ptr, working_elem_list, &
 
 1205      TYPE(
tree_type), 
INTENT(IN), 
POINTER               :: end_ptr
 
 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__, &
 
 1271                             "of sub tree element "// &
 
 1277            IF (remove_this) 
THEN 
 1279               IF (.NOT. 
ASSOCIATED(begin_ptr%parent)) &
 
 1280                  CALL cp_abort(__location__, &
 
 1281                                "try to remove unused subtree element "// &
 
 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, &
 
 1324      CHARACTER(LEN=*), 
PARAMETER :: routinen = 
'remove_result_g_tree' 
 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
 
 1366      CHARACTER(LEN=*), 
PARAMETER :: routinen = 
'remove_result_s_tree' 
 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
 
 1414      CHARACTER(LEN=*), 
PARAMETER                        :: routinen = 
'remove_all_trees' 
 1416      INTEGER                                            :: handle, i, tree
 
 1417      LOGICAL                                            :: change_trajec, flag
 
 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)
 
 1506      LOGICAL                                            :: acc_removed, nacc_removed
 
 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)
 
 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
 
 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...