(git:98357aa)
Loading...
Searching...
No Matches
tmc_tree_acceptance.F
Go to the documentation of this file.
1!--------------------------------------------------------------------------------------------------!
2! CP2K: A general program to perform molecular dynamics simulations !
3! Copyright 2000-2026 CP2K developers group <https://cp2k.org> !
4! !
5! SPDX-License-Identifier: GPL-2.0-or-later !
6!--------------------------------------------------------------------------------------------------!
7
8! **************************************************************************************************
9!> \brief tree nodes acceptance
10!> code is separated in 3 parts, first the acceptance criteria,
11!> second the tree node acceptance handling, searching etc. and
12!> than the acceptance probability handling
13!> \par History
14!> 11.2012 created [Mandes Schoenherr]
15!> \author Mandes
16! **************************************************************************************************
17
20 USE kinds, ONLY: dp
21 USE physcon, ONLY: boltzmann,&
22 joule
29 USE tmc_move_types, ONLY: mv_type_md,&
37 USE tmc_tree_types, ONLY: &
43 USE tmc_types, ONLY: tmc_env_type,&
45#include "../base/base_uses.f90"
46
47 IMPLICIT NONE
48
49 PRIVATE
50
51 CHARACTER(len=*), PARAMETER, PRIVATE :: moduleN = 'tmc_tree_acceptance'
52
53 PUBLIC :: acceptance_check
56 PUBLIC :: tree_update
57
58 INTEGER, PARAMETER :: DEBUG = 0
59
60CONTAINS
61
62 !============================================================================
63 ! acceptance criteria calculations
64 !============================================================================
65! **************************************************************************************************
66!> \brief standard Monte Carlo and 2 potential acceptance check
67!> acceptance check of move from old(last accepted) to new configuration
68!> the sum of kinetic and potential energy is used
69!> acc(o->n)=min(1,exp( -beta*(H(n)-H(o)) ))
70!> \param tree_element new/actual configuration
71!> \param parent_element last accepted configuration
72!> \param tmc_params TMC global parameters
73!> \param temperature actual temperature configuration should be checked with
74!> \param diff_pot_check 2potential check or not?
75!> \param accept result (configuration accepted of rejected)
76!> \param rnd_nr random number for acceptance check
77!> \param approx_ener for NMC the approximated energies schould be used
78!> \author Mandes 12.2012
79! **************************************************************************************************
80 SUBROUTINE acceptance_check(tree_element, parent_element, tmc_params, &
81 temperature, diff_pot_check, accept, rnd_nr, &
82 approx_ener)
83 TYPE(tree_type), POINTER :: tree_element, parent_element
84 TYPE(tmc_param_type), POINTER :: tmc_params
85 REAL(kind=dp) :: temperature
86 LOGICAL :: diff_pot_check, accept
87 REAL(kind=dp) :: rnd_nr
88 LOGICAL, OPTIONAL :: approx_ener
89
90 CHARACTER(LEN=*), PARAMETER :: routinen = 'acceptance_check'
91
92 INTEGER :: handle
93 REAL(kind=dp) :: ekin_last_acc, elem_ener, kb, parent_ener
94
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)
100
101 kb = boltzmann/joule
102
103 ! start the timing
104 CALL timeset(routinen, handle)
105
106 IF (tmc_params%task_type == task_type_gaussian_adaptation) THEN
107 cpabort("task_type_gaussian_adaptation not yet implemented")
108!TODO CALL acc_check_gauss_adapt(f=tree_element%potential, ct=tree_element%ekin_before_md, acc=accept)
109!DO NOT DO RETURN
110 END IF
111
112 !-- using 2 different potentials, the energy difference between these potentials
113 ! and the two configurations have to be regarded.
114 ! The ensamble should be in equilibrium state of the approximate potential
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)
119 ELSE
120 !for different potentials we have to regard the differences in energy
121 ! min(1,e^{-\beta*[(E_{exact}(n)-E_{approx}(n))-(E_{exact}(o)-E_{approx}(o))]})
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
125 END IF
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
129
130 !-- always accepted if new energy is smaller than old energy
131 IF (elem_ener <= parent_ener) THEN
132 accept = .true.
133 ELSE
134 !-- gaussian distributed acceptance if new energy is greater than old energy
135 IF (rnd_nr < &
136 exp(-(elem_ener - parent_ener))) THEN
137 accept = .true.
138 ELSE
139 accept = .false.
140 END IF
141 END IF
142 ELSE
143 !-- standard MC check, but also using the kinetic energy for Hybrid Monte Carlo
144 IF (tree_element%move_type == mv_type_md) THEN
145 ekin_last_acc = tree_element%ekin_before_md
146 ! using the kinetic energy before velocity change
147 ELSE
148 ekin_last_acc = parent_element%ekin
149 END IF
150 ! comparing aproximated energies
151 IF (PRESENT(approx_ener)) THEN
152 elem_ener = tree_element%e_pot_approx &
153 + tree_element%ekin
154 parent_ener = parent_element%e_pot_approx &
155 + ekin_last_acc
156 ELSE
157 elem_ener = tree_element%potential &
158 + tree_element%ekin
159 parent_ener = parent_element%potential &
160 + ekin_last_acc
161 END IF
162
163 !-- always accepted if new energy is smaller than old energy
164 IF (elem_ener <= parent_ener) THEN
165 accept = .true.
166 ELSE
167 !-- gaussian distributed acceptance if new energy is greater than old energy
168 IF (rnd_nr < &
169 exp(-1.0_dp/(kb*temperature)*(elem_ener - parent_ener))) THEN
170 accept = .true.
171 ELSE
172 accept = .false.
173 END IF
174 END IF
175 END IF
176
177 ! update the estimated energy acceptance probability distribution
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)
185 END IF
186
187 ! end the timing
188 CALL timestop(handle)
189 END SUBROUTINE acceptance_check
190
191! **************************************************************************************************
192!> \brief parallel tempering swap acceptance check,
193!> check swapped configurations of different temperatures
194!> using sum of potential and kinetic energy
195!> always accepted if energy of configuration with higher temperature
196!> is smaller than energy of configuration with lower temperature
197!> acc(o->n)=min(1,exp((beta_i-beta_j)*(U_i-U_j)))
198!> \param tree_elem actual global tree element
199!> \param conf1 sub tree element of lower temperature
200!> \param conf2 sub tree element of higher temperature
201!> \param tmc_params TMC environment parameters
202!> \param accept acceptance of configurational change
203!> \author Mandes 12.2012
204! **************************************************************************************************
205 SUBROUTINE swap_acceptance_check(tree_elem, conf1, conf2, tmc_params, accept)
206 TYPE(global_tree_type), POINTER :: tree_elem
207 TYPE(tree_type), POINTER :: conf1, conf2
208 TYPE(tmc_param_type), POINTER :: tmc_params
209 LOGICAL :: accept
210
211 CHARACTER(LEN=*), PARAMETER :: routinen = 'swap_acceptance_check'
212
213 INTEGER :: handle
214 REAL(kind=dp) :: delta, elem1_ener, elem2_ener, kb, vol1, &
215 vol2
216
217 kb = boltzmann/joule
218
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))
224
225 ! start the timing
226 CALL timeset(routinen, handle)
227
228 IF (tmc_params%pressure > 0.0_dp) THEN
229 ! pt-NVT
230 elem1_ener = conf1%potential &
231 + conf1%ekin
232 elem2_ener = conf2%potential &
233 + conf2%ekin
234 ! the swap is done with prob: exp((\beta_i-\beta_j)(U_i-U_j)),
235 ! BUT because they are already swaped we exchange the energies.
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
239 accept = .true.
240 ELSE
241 accept = .false.
242 END IF
243 ELSE
244 ! pt-NpT (parallel Tempering with constant pressure, temperature and num. particle)
245 CALL get_scaled_cell(cell=tmc_params%cell, box_scale=conf1%box_scale, &
246 vol=vol1)
247 CALL get_scaled_cell(cell=tmc_params%cell, box_scale=conf2%box_scale, &
248 vol=vol2)
249 ! delta= (beta_m-beta_n)(U_n-U_m) + (beta_m*P_m-beta_n*P_n)(V_n-V_m)
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)* &
255 (vol2 - vol1)
256 IF (tree_elem%rnd_nr < exp(delta)) THEN
257 accept = .true.
258 ELSE
259 accept = .false.
260 END IF
261 END IF
262 ! end the timing
263 CALL timestop(handle)
264 END SUBROUTINE swap_acceptance_check
265
266! **************************************************************************************************
267!> \brief volume move acceptance check
268!> sampling NPT, we need to do volume moves. Their acceptance are
269!> checked regarding the old and new energy, the volume difference
270!> and the constant pressure
271!> \param parent_elem old tree element with old box size
272!> \param new_elem actual tree element with new box size
273!> \param temperature actual temperature
274!> \param rnd_nr random number to check with
275!> \param tmc_params TMC environment parameters
276!> \param accept Monte Carlo move acceptance (result)
277!> \author Mandes 12.2012
278! **************************************************************************************************
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
283 TYPE(tmc_param_type), POINTER :: tmc_params
284 LOGICAL :: accept
285
286 CHARACTER(LEN=*), PARAMETER :: routinen = 'volume_acceptance_check'
287
288 INTEGER :: handle
289 REAL(kind=dp) :: d_enthalpy, kb, n_vol, p_vol
290
291 kb = boltzmann/joule
292
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)
299
300 ! start the timing
301 CALL timeset(routinen, handle)
302
303 CALL get_scaled_cell(cell=tmc_params%cell, box_scale=parent_elem%box_scale, &
304 vol=p_vol)
305 CALL get_scaled_cell(cell=tmc_params%cell, box_scale=new_elem%box_scale, &
306 vol=n_vol)
307 ! H=enthalpy, U=energy, P=pressure, V=volume, kB=Boltzmann constant, T=temperature, N=amount particle
308 ! delta_H = delta_U + P*delta_V - kB*T*N*ln(V_n/V_p)
309 IF (.false.) THEN
310 ! the volume move in volume space (dV)
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)* &
315 log(n_vol/p_vol)
316 ELSE
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))* &
322 log(n_vol/p_vol)
323 ELSE
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)* &
328 log(n_vol/p_vol)
329 END IF
330 END IF
331 ! acc(o->n) = min(1, exp(-beta*delta_H))
332 IF (d_enthalpy <= 0.0_dp) THEN
333 accept = .true.
334 ELSE
335 IF (rnd_nr < exp(-1.0_dp/(kb*temperature)*d_enthalpy)) THEN
336 accept = .true.
337 ELSE
338 accept = .false.
339 END IF
340 END IF
341 ! end the timing
342 CALL timestop(handle)
343 END SUBROUTINE volume_acceptance_check
344
345 !============================================================================
346 ! tree node acceptance
347 !============================================================================
348! **************************************************************************************************
349!> \brief check acceptance of energy calculated element and related childs,
350!> when ready
351!> \param tree_elem actual tree element with calculated energy
352!> \param tmc_env TMC environment parameters
353!> \author Mandes 12.2012
354! **************************************************************************************************
355 SUBROUTINE check_acceptance_of_depending_subtree_nodes(tree_elem, tmc_env)
356 TYPE(tree_type), POINTER :: tree_elem
357 TYPE(tmc_env_type), POINTER :: tmc_env
358
359 CHARACTER(LEN=*), PARAMETER :: routinen = 'check_acceptance_of_depending_subtree_nodes'
360
361 INTEGER :: handle
362 LOGICAL :: parent_ready
363 TYPE(tree_type), POINTER :: act_elem, parent_elem
364
365 NULLIFY (parent_elem, act_elem)
366
367 cpassert(ASSOCIATED(tmc_env))
368 cpassert(ASSOCIATED(tree_elem))
369 cpassert(tree_elem%stat == status_calculated)
370 cpassert(ASSOCIATED(tree_elem%parent))
371
372 ! start the timing
373 CALL timeset(routinen, handle)
374
375 act_elem => tree_elem
376
377 ! ------------------------------------------------------
378 ! check this element
379 parent_elem => search_parent_element(act_elem)
380 cpassert(.NOT. ASSOCIATED(act_elem, parent_elem))
381
382 ! check status of parent element
383 SELECT CASE (parent_elem%stat)
387 parent_ready = .false.
390 parent_ready = .true.
391 CASE DEFAULT
392 cpabort("unknown parent element status"//cp_to_string(parent_elem%stat))
393 END SELECT
394
395 ! ready ?
396 IF (parent_ready) THEN
397 ! acceptance check
398 CALL check_and_change_status_of_subtree_elem(act_elem=act_elem, &
399 parent_elem=parent_elem, tmc_env=tmc_env)
400 END IF
401 !------------------------------------------------------
402 ! check acc child
403 parent_elem => tree_elem
404 IF (ASSOCIATED(tree_elem%acc)) THEN
405 act_elem => tree_elem%acc
406 IF (act_elem%stat == status_calculated) THEN
407 CALL check_and_change_status_of_subtree_elem(act_elem=act_elem, &
408 parent_elem=parent_elem, tmc_env=tmc_env)
409 END IF
410 !------------------------------------------------------
411 ! check all nacc childs
412 nacc_loop: DO
413 IF (.NOT. ASSOCIATED(act_elem%nacc)) EXIT nacc_loop
414 act_elem => act_elem%nacc
415 IF (act_elem%stat == status_calculated) THEN
416 CALL check_and_change_status_of_subtree_elem(act_elem=act_elem, &
417 parent_elem=parent_elem, tmc_env=tmc_env)
418 END IF
419 END DO nacc_loop
420 END IF
421
422 ! end the timing
423 CALL timestop(handle)
425
426! **************************************************************************************************
427!> \brief checking the elements and change the status
428!> \param act_elem actual tree element (new configuration)
429!> \param parent_elem parent tree element (old configuration)
430!> \param tmc_env TMC environment parameters
431!> \author Mandes 12.2012
432! **************************************************************************************************
433 SUBROUTINE check_and_change_status_of_subtree_elem(act_elem, parent_elem, tmc_env)
434 TYPE(tree_type), POINTER :: act_elem, parent_elem
435 TYPE(tmc_env_type), POINTER :: tmc_env
436
437 CHARACTER(LEN=*), PARAMETER :: routinen = 'check_and_change_status_of_subtree_elem'
438
439 INTEGER :: handle
440 LOGICAL :: flag, result_acc
441 TYPE(global_tree_type), POINTER :: tmp_gt_ptr
442 TYPE(gt_elem_list_type), POINTER :: tmp_gt_list_ptr
443
444 NULLIFY (tmp_gt_list_ptr, tmp_gt_ptr)
445
446 ! start the timing
447 CALL timeset(routinen, handle)
448
449 cpassert(ASSOCIATED(tmc_env))
450 cpassert(ASSOCIATED(tmc_env%params))
451 cpassert(ASSOCIATED(act_elem))
452 cpassert(ASSOCIATED(parent_elem))
453 cpassert(act_elem%stat == status_calculated)
454 mark_used(parent_elem)
455
456 flag = .false.
457
458 tmp_gt_list_ptr => act_elem%gt_nodes_references
459 ! check for all global tree elements referring to this subtree element
460 ! same subtree element can be accepted at a certain temperature and rejected at another one
461 DO WHILE (ASSOCIATED(tmp_gt_list_ptr))
462 cpassert(tmp_gt_list_ptr%gt_elem%stat /= status_accepted_result)
463 cpassert(tmp_gt_list_ptr%gt_elem%stat /= status_rejected_result)
464
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)
467 IF (flag) THEN
468 ! probability update
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)
471
472 ! change status
473 ! accepted case: delete (and cancel) not accepted branch
474 IF (result_acc .EQV. .true.) THEN
475 tmp_gt_list_ptr%gt_elem%stat = status_accepted
476 IF (ASSOCIATED(tmp_gt_list_ptr%gt_elem%nacc)) THEN
477 tmp_gt_ptr => tmp_gt_list_ptr%gt_elem%nacc
478 CALL remove_unused_g_tree(begin_ptr=tmp_gt_ptr, &
479 end_ptr=tmp_gt_list_ptr%gt_elem, removed=flag, &
480 tmc_env=tmc_env)
481 END IF
482 ELSE
483 ! not accepted case: delete (and cancel) accepted branch
484 tmp_gt_list_ptr%gt_elem%stat = status_rejected
485 IF (ASSOCIATED(tmp_gt_list_ptr%gt_elem%acc)) THEN
486 tmp_gt_ptr => tmp_gt_list_ptr%gt_elem%acc
487 CALL remove_unused_g_tree(begin_ptr=tmp_gt_ptr, &
488 end_ptr=tmp_gt_list_ptr%gt_elem, removed=flag, &
489 tmc_env=tmc_env)
490 END IF
491 END IF
492
493 IF (tmc_env%params%DRAW_TREE) THEN
494 CALL create_global_tree_dot_color(gt_tree_element=tmp_gt_list_ptr%gt_elem, &
495 tmc_params=tmc_env%params)
496 END IF
497 END IF
498 tmp_gt_list_ptr => tmp_gt_list_ptr%next
499 END DO
500 ! end the timing
501 CALL timestop(handle)
502 END SUBROUTINE check_and_change_status_of_subtree_elem
503
504! **************************************************************************************************
505!> \brief change status flag of all subtree elements
506!> most important to draw the right subtrees
507!> \param gt_ptr global tree pointer, the related/changed sub tree element
508!> should change status
509!> \param stat the status of the global tree element
510!> \param tmc_params TMC emvironment parameters for drawing
511!> \author Mandes 12.2012
512! **************************************************************************************************
513 SUBROUTINE subtree_configuration_stat_change(gt_ptr, stat, tmc_params)
514 TYPE(global_tree_type), POINTER :: gt_ptr
515 INTEGER :: stat
516 TYPE(tmc_param_type), POINTER :: tmc_params
517
518 CHARACTER(LEN=*), PARAMETER :: routinen = 'subtree_configuration_stat_change'
519
520 INTEGER :: handle
521 TYPE(tree_type), POINTER :: ptr
522
523 NULLIFY (ptr)
524
525 cpassert(ASSOCIATED(gt_ptr))
526 cpassert(ASSOCIATED(tmc_params))
527
528 ! start the timing
529 CALL timeset(routinen, handle)
530
531 ! don't respect swaped nodes (subtree nodes are already in the list,
532 ! and we dont want them in marked in subtrees)
533 IF (.NOT. gt_ptr%swaped) THEN
534 ptr => gt_ptr%conf(gt_ptr%mv_conf)%elem
535 ! dependent on the status (don't map each status 1:1,
536 ! e.g. not the result ones)
537 SELECT CASE (stat)
539 ptr%stat = status_accepted
541 ptr%stat = status_rejected
543 ptr%stat = stat
544 CASE DEFAULT
545 CALL cp_abort(__location__, &
546 "unknown global tree status"// &
547 cp_to_string(stat))
548 END SELECT
549
550 IF (tmc_params%DRAW_TREE) THEN
551 CALL create_dot_color(tree_element=ptr, tmc_params=tmc_params)
552 END IF
553 END IF
554
555 ! end the timing
556 CALL timestop(handle)
557 END SUBROUTINE subtree_configuration_stat_change
558
559! **************************************************************************************************
560!> \brief checks if the element is ready for an acceptance check
561!> \param elem sub tree element
562!> \param ready return value
563!> \author Mandes 12.2012
564! **************************************************************************************************
565 SUBROUTINE elem_ready_to_check(elem, ready)
566 TYPE(tree_type), POINTER :: elem
567 LOGICAL :: ready
568
569 CHARACTER(LEN=*), PARAMETER :: routinen = 'elem_ready_to_check'
570
571 INTEGER :: handle
572
573 cpassert(ASSOCIATED(elem))
574
575 ! start the timing
576 CALL timeset(routinen, handle)
577
578 ready = .false.
579
580 SELECT CASE (elem%stat)
584 ready = .false.
586 ready = .true.
587 CASE DEFAULT
588 CALL cp_abort(__location__, &
589 "status of actual tree node is unknown" &
590 //cp_to_string(elem%stat))
591 END SELECT
592 ! end the timing
593 CALL timestop(handle)
594 END SUBROUTINE elem_ready_to_check
595
596! **************************************************************************************************
597!> \brief checking the elements (find element and do acceptance check)
598!> \param gt_act_elem actual global tree element
599!> \param tmc_env TMC environment
600!> \param check_done successful checked? (result)
601!> \param result_acc checked configuration accepted? (result)
602!> \author Mandes 12.2012
603! **************************************************************************************************
604 SUBROUTINE check_elements(gt_act_elem, tmc_env, check_done, result_acc)
605 TYPE(global_tree_type), POINTER :: gt_act_elem
606 TYPE(tmc_env_type), POINTER :: tmc_env
607 LOGICAL :: check_done, result_acc
608
609 CHARACTER(LEN=*), PARAMETER :: routinen = 'check_elements'
610
611 INTEGER :: handle
612 LOGICAL :: act_ready, tmp_ready
613 TYPE(tree_type), POINTER :: act_element, tmp_element
614
615 NULLIFY (act_element, tmp_element)
616 check_done = .false.
617
618 cpassert(ASSOCIATED(gt_act_elem))
619 cpassert(ASSOCIATED(tmc_env))
620 cpassert(ASSOCIATED(tmc_env%m_env))
621
622 ! start the timing
623 CALL timeset(routinen, handle)
624
625 !====================================================================================
626 ! check if global tree element is already checked
627 SELECT CASE (gt_act_elem%stat)
629 check_done = .true.
630 IF (gt_act_elem%stat == status_accepted) THEN
631 result_acc = .true.
632 ELSE IF (gt_act_elem%stat == status_rejected) THEN
633 result_acc = .false.
634 ELSE
635 CALL cp_abort(__location__, &
636 "undefinite status of already checked elements:" &
637 //cp_to_string(gt_act_elem%stat))
638 END IF
639 CASE DEFAULT
640 END SELECT
641
642 IF (.NOT. check_done) THEN
643 !====================================================================================
644 ! get elements related to global tree element to check
645 CALL get_subtree_elements_to_check(gt_act_elem=gt_act_elem, elem1=act_element, &
646 elem2=tmp_element)
647 cpassert(ASSOCIATED(act_element))
648 cpassert(ASSOCIATED(tmp_element))
649
650 ! check status of both elements (if they are already calculated and hence ready to check)
651 CALL elem_ready_to_check(elem=act_element, ready=act_ready)
652 CALL elem_ready_to_check(elem=tmp_element, ready=tmp_ready)
653
654 ! both ready ? check
655 IF (act_ready .AND. tmp_ready) THEN
656 ! 2 temperature (swap) check
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, &
660 accept=result_acc)
661 ! volume move check
662 ELSE IF (act_element%move_type == mv_type_volume_move) THEN
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)
667 ELSE
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)
673 ELSE
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)
679 END IF
680 END IF
681 check_done = .true.
682 ELSE
683 ! if element is not ready, update status of global tree element
684 !TODO maybe update this part (how much status we need in global tree from sub tree??)
685 SELECT CASE (gt_act_elem%stat)
686 !-- check if at least the MD move is already done
687 !-- hence new configurations can be created on basis of this configuration
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
692 END IF
693 CASE (status_calculated)
694 CASE DEFAULT
695 CALL cp_abort(__location__, &
696 "status of actual checked node is unknown" &
697 //cp_to_string(gt_act_elem%stat))
698 END SELECT
699 END IF
700 END IF
701 ! end the timing
702 CALL timestop(handle)
703 END SUBROUTINE check_elements
704
705! **************************************************************************************************
706!> \brief searching tree nodes to check for Markov Chain, elements are marked
707!> and stored in lists ... (main entry point)
708!> \param tmc_env TMC environment
709!> \param result_acc checked configuration accepted? (result)
710!> \param something_updated ...
711!> \param
712!> \param
713!> \author Mandes 12.2012
714! **************************************************************************************************
715 SUBROUTINE tree_update(tmc_env, result_acc, something_updated)
716 TYPE(tmc_env_type), POINTER :: tmc_env
717 LOGICAL :: result_acc, something_updated
718
719 CHARACTER(LEN=*), PARAMETER :: routinen = 'tree_update'
720
721 INTEGER :: handle, itmp
722 LOGICAL :: found
723 TYPE(global_tree_type), POINTER :: gt_act_elem
724 TYPE(tree_type), POINTER :: act_element, tmp_element
725
726 NULLIFY (gt_act_elem, tmp_element, act_element)
727
728 cpassert(ASSOCIATED(tmc_env))
729
730 ! start the timing
731 CALL timeset(routinen, handle)
732
733 result_acc = .false.
734 something_updated = .false.
735
736 gt_act_elem => tmc_env%m_env%gt_act
737 search_calculated_element_loop: DO
738 NULLIFY (act_element, tmp_element)
739 ! search for element to check
740 CALL search_next_gt_element_to_check(ptr=gt_act_elem, found=found)
741 IF (.NOT. found) EXIT search_calculated_element_loop
742
743 ! check the elements status end, if possible, do acceptance check
744 CALL check_elements(gt_act_elem=gt_act_elem, tmc_env=tmc_env, &
745 check_done=found, result_acc=result_acc)
746 ! if check was not possible, update the status of the global tree element and return
747 IF (.NOT. found) EXIT search_calculated_element_loop
748
749 ! get elements related to global tree element, which were checked
750 CALL get_subtree_elements_to_check(gt_act_elem=gt_act_elem, &
751 elem1=act_element, elem2=tmp_element)
752
753 !========================================================================
754 !-- set result counters
755 ! counter for certain temperature
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
758 ! in case of swapped also count the result for
759 ! the other swapped temperature
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
763 END IF
764 ! count also for global tree Markov Chain
765 tmc_env%m_env%result_count(0) = tmc_env%m_env%result_count(0) + 1
766
767 ! flag for doing tree cleaning with canceling and deallocation
768 something_updated = .true.
769
770 !IF((.NOT.gt_act_elem%swaped) .AND. act_element%temp_created/=0 .AND. &
771 ! act_element%temp_created/=gt_act_elem%mv_conf)&
772 ! count_wrong_temp_move(gt_act_elem%mv_conf) = &
773 ! count_wrong_temp_move(gt_act_elem%mv_conf)+1
774
775 !========================================================================
776 !-- sort element in lists
777 !-- case NOT ACCEPTED
778 IF (.NOT. result_acc) THEN !result NOT accepted
779 IF (gt_act_elem%prob_acc > 0.0_dp) THEN
780 IF (gt_act_elem%prob_acc >= 0.5_dp) THEN
781 ! wrong estimate (estimated accepted)
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
785 ELSE
786 tmc_env%m_env%estim_corr_wrong(3) = tmc_env%m_env%estim_corr_wrong(3) + 1
787 END IF
788 END IF
789 gt_act_elem%stat = status_rejected_result
790 gt_act_elem%prob_acc = 0.0_dp
791 itmp = gt_act_elem%conf(gt_act_elem%mv_conf)%elem%sub_tree_nr
792
793 !-- case ACCEPTED
794 ELSE
795 IF (gt_act_elem%prob_acc > 0.0_dp) THEN
796 IF (gt_act_elem%prob_acc <= 0.5_dp) THEN
797 ! wrong estimate (estimated NOT accepted)
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
801 ELSE
802 tmc_env%m_env%estim_corr_wrong(1) = tmc_env%m_env%estim_corr_wrong(1) + 1
803 END IF
804 END IF
805 gt_act_elem%stat = status_accepted_result
806 gt_act_elem%prob_acc = 1.0_dp
807
808 ! save result in the result list
809 IF (.NOT. gt_act_elem%swaped) THEN
810 !-- saving moved/changed configuration of result node
811 tmc_env%m_env%result_list(gt_act_elem%mv_conf)%elem => &
812 gt_act_elem%conf(gt_act_elem%mv_conf)%elem
813 ELSE
814 ! ATTENTION: act_element != gt_act_elem%conf(gt_act_elem%mv_conf),
815 ! because we take the last accepted conf
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
818 END IF
819 tmc_env%m_env%gt_act => gt_act_elem
820 END IF ! result acceptance check
821 !======================================================================
822 !-- set status accepted or rejected of certain subtree elements
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)
827 END IF
828
829 IF (tmc_env%params%DRAW_TREE) THEN
830 CALL create_global_tree_dot_color(gt_tree_element=gt_act_elem, &
831 tmc_params=tmc_env%params)
832 END IF
833
834 ! probability update
835 CALL prob_update(move_types=tmc_env%params%move_types, &
836 pt_el=gt_act_elem, &
837 prob_opt=tmc_env%params%esimate_acc_prob)
838
839 !writes only different configurations with repetition file if possible
840 CALL write_result_list_element(result_list=tmc_env%m_env%result_list, &
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
845 CALL write_result_list_element(result_list=tmc_env%m_env%result_list, &
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)
849 END IF
850
851 ! save for analysis
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))
862 END IF
863 END IF
864 END DO search_calculated_element_loop
865
866 ! end the timing
867 CALL timestop(handle)
868
869 END SUBROUTINE tree_update
870
871 !============================================================================
872 ! tree node acceptance probability
873 !============================================================================
874! **************************************************************************************************
875!> \brief checks if element is ready for accaptance probability update
876!> checks status and the amount of already received intermediate energies
877!> \param elem sub tree element to update
878!> \return return value
879!> \author Mandes 12.2012
880! **************************************************************************************************
881 FUNCTION ready_for_update_acc_prob(elem) RESULT(ready)
882 TYPE(tree_type), POINTER :: elem
883 LOGICAL :: ready
884
885 cpassert(ASSOCIATED(elem))
886 ready = .false.
887 IF ((elem%scf_energies_count >= 4) &
888 .AND. (elem%stat /= status_deleted) .AND. (elem%stat /= status_deleted_result) &
889 .AND. (elem%stat /= status_canceled_ener)) THEN
890 ready = .true.
891 END IF
892 END FUNCTION ready_for_update_acc_prob
893
894! **************************************************************************************************
895!> \brief updates the subtree acceptance probability
896!> the swap probabilities are handled within the certain checks of the
897!> global tree elements (pt references)
898!> \param tree_elem sub tree element to update
899!> \param tmc_env TMC environment
900!> \author Mandes 12.2012
901! **************************************************************************************************
902 SUBROUTINE check_elements_for_acc_prob_update(tree_elem, tmc_env)
903 TYPE(tree_type), POINTER :: tree_elem
904 TYPE(tmc_env_type), POINTER :: tmc_env
905
906 CHARACTER(LEN=*), PARAMETER :: routinen = 'check_elements_for_acc_prob_update'
907
908 INTEGER :: handle
909 TYPE(tree_type), POINTER :: act_elem, parent_elem
910
911 NULLIFY (parent_elem, act_elem)
912
913 cpassert(ASSOCIATED(tree_elem))
914 cpassert(ASSOCIATED(tmc_env))
915
916 ! start the timing
917 CALL timeset(routinen, handle)
918
919 act_elem => tree_elem
920 !-- nothing to do if option is disabled or element not ready
921 IF (tmc_env%params%esimate_acc_prob .AND. &
922 ready_for_update_acc_prob(act_elem)) THEN
923 ! ------------------------------------------------------
924 ! check this element
925 ! for usual moves and swapping
926 ! get parent subtree elment for case of not swapped configurations
927 parent_elem => search_parent_element(act_elem)
928 ! update the prob of accaptance
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., &
931 tmc_env=tmc_env)
932
933 !------------------------------------------------------
934 ! check the childs of this element
935 parent_elem => tree_elem
936
937 ! check ACC child (parent element is the entered/updated element)
938 IF (ASSOCIATED(tree_elem%acc)) THEN
939 act_elem => tree_elem%acc
940 ! update the prob of accaptance
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., &
943 tmc_env=tmc_env)
944 END IF
945
946 ! check all NACC childs of next accepted one
947 nacc_loop: DO
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., &
952 tmc_env=tmc_env)
953 END DO nacc_loop
954 END IF
955 ! end the timing
956 CALL timestop(handle)
958
959! **************************************************************************************************
960!> \brief search all pt nodes in reference list and update the estimated
961!> acceptance probabilities
962!> \param reference_list list of global tree element referring to the updated
963!> subtree element
964!> \param act_elem actual sub tree element updated or child of the updated one
965!> \param parent_elem parent or the actual updated subtree element
966!> \param act_parent flag if updated element is the actual (TRUE) or
967!> the parent (FALSE) element
968!> \param tmc_env TMC environment
969!> \author Mandes 12.2012
970! **************************************************************************************************
971 SUBROUTINE update_prob_gt_node_list(reference_list, act_elem, parent_elem, act_parent, tmc_env)
972 TYPE(gt_elem_list_type), POINTER :: reference_list
973 TYPE(tree_type), POINTER :: act_elem, parent_elem
974 LOGICAL :: act_parent
975 TYPE(tmc_env_type), POINTER :: tmc_env
976
977 CHARACTER(LEN=*), PARAMETER :: routinen = 'update_prob_gt_node_list'
978
979 INTEGER :: handle, integration_steps
980 REAL(kind=dp) :: kb, tmp_prob
981 TYPE(gt_elem_list_type), POINTER :: tmp_pt_ptr
982 TYPE(tree_type), POINTER :: tmp_elem, tmp_parent_elem
983
984 kb = boltzmann/joule
985
986 NULLIFY (tmp_pt_ptr, tmp_elem, tmp_parent_elem)
987
988 IF (.NOT. ASSOCIATED(reference_list)) RETURN ! could be canceled already
989
990 cpassert(ASSOCIATED(reference_list%gt_elem))
991 cpassert(ASSOCIATED(act_elem))
992 cpassert(ASSOCIATED(parent_elem))
993
994 ! start the timing
995 CALL timeset(routinen, handle)
996
997 ! check if element is ready
998 IF (ready_for_update_acc_prob(act_elem)) THEN
999 ! set the number of integration steps used for 3 point approximation
1000 ! of the exact energy, using the sub step energies
1001 ! still fixed value
1002 integration_steps = 100
1003
1004 tmp_pt_ptr => reference_list
1005 ! do for all references using the updated subtree node
1006 reference_loop: DO WHILE (ASSOCIATED(tmp_pt_ptr))
1007 tmp_prob = -1.0_dp
1008 IF (tmp_pt_ptr%gt_elem%swaped) THEN
1009 NULLIFY (tmp_elem, tmp_parent_elem)
1010 ! in case of swap use the other swaped configuration as related one
1011 CALL get_subtree_elements_to_check(gt_act_elem=tmp_pt_ptr%gt_elem, &
1012 elem1=tmp_elem, elem2=tmp_parent_elem)
1013 ! NOT if parent is the updated one, and check for correct elements ready
1014 IF (act_parent .AND. ASSOCIATED(act_elem, tmp_elem) .AND. &
1015 ready_for_update_acc_prob(elem=tmp_parent_elem)) THEN
1016 ! using ln(rnd)/-(beta_i-beta_j) < U_j-U_i)
1017 tmp_prob = compute_estimated_prob(elem_old=tmp_parent_elem, &
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)
1024 ELSE
1025 tmp_pt_ptr => tmp_pt_ptr%next
1026 cycle reference_loop
1027 END IF
1028 ELSE
1029 ! if no swap, use the parent configuration as related one
1030 IF (ready_for_update_acc_prob(parent_elem)) THEN
1031 tmp_prob = compute_estimated_prob(elem_old=parent_elem, &
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)
1037 END IF
1038 END IF
1039 !successful probability update
1040 IF (tmp_prob >= 0.0_dp) THEN
1041 tmp_pt_ptr%gt_elem%prob_acc = tmp_prob
1042 !-- speculative canceling for the related direction
1043 IF (tmc_env%params%SPECULATIVE_CANCELING) THEN
1044 CALL search_canceling_elements(pt_elem_in=tmp_pt_ptr%gt_elem, &
1045 prob=tmp_pt_ptr%gt_elem%prob_acc, tmc_env=tmc_env)
1046 END IF
1047 END IF
1048
1049 ! get next related global tree pointer
1050 tmp_pt_ptr => tmp_pt_ptr%next
1051 END DO reference_loop ! global tree references of actual subtree element
1052 END IF
1053 ! end the timing
1054 CALL timestop(handle)
1055 END SUBROUTINE update_prob_gt_node_list
1056
1057END MODULE tmc_tree_acceptance
various routines to log and control the output. The idea is that decisions about where to log should ...
Defines the basic variable types.
Definition kinds.F:23
integer, parameter, public dp
Definition kinds.F:34
An array-based list which grows on demand. When the internal array is full, a new array of twice the ...
Definition list.F:24
Definition of physical constants:
Definition physcon.F:68
real(kind=dp), parameter, public boltzmann
Definition physcon.F:129
real(kind=dp), parameter, public joule
Definition physcon.F:159
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
Definition tmc_file_io.F:20
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.
Definition tmc_stati.F:15
integer, parameter, public task_type_gaussian_adaptation
Definition tmc_stati.F:47
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
tree nodes search etc.
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...
Definition tmc_types.F:32