47    class(system_t), 
pointer, 
public :: system
 
   49    type(algorithm_iterator_t) :: scf_start
 
   53    real(real64), 
public :: dt
 
   54    real(real64), 
public :: final_time = 
m_zero                     
   57    logical, 
public :: inside_scf = .false.                 
 
   58    logical, 
public :: predictor_corrector = .false.
 
   59    integer, 
public :: scf_count
 
   60    integer, 
public :: max_scf_count
 
   61    integer, 
public :: accumulated_loop_ticks
 
   62    real(real64), 
public   :: scf_tol
 
   74  character(len=ALGO_LABEL_LEN), 
public, 
parameter ::   &
 
   75    START_SCF_LOOP       = 
'START_SCF_LOOP',            &
 
   79  type(algorithmic_operation_t), 
public, 
parameter :: &
 
   91    class(propagator_t),           
intent(inout) :: this
 
   92    type(algorithmic_operation_t), 
intent(in)    :: operation
 
   96    select case (operation%id)
 
   99      this%accumulated_loop_ticks = this%accumulated_loop_ticks + 1
 
  102    case (start_scf_loop)
 
  103      assert(this%predictor_corrector)
 
  105      call this%save_scf_start()
 
  106      this%inside_scf = .
true.
 
  107      this%accumulated_loop_ticks = 0
 
  110        write(
message(1), 
'(a,i3,a)') 
"Debug: -- SCF iter ", this%scf_count, 
" for '" + trim(this%system%namespace%get()) + 
"'" 
  117      if (this%scf_count == this%max_scf_count) 
then 
  119          message(1) = 
"Debug: -- Max SCF Iter reached for '" + trim(this%system%namespace%get()) + 
"'" 
  122        this%inside_scf = .false.
 
  126        if (this%system%is_tolerance_reached(this%scf_tol)) 
then 
  128            message(1) = 
"Debug: -- SCF tolerance reached for '" + trim(this%system%namespace%get()) + 
"'" 
  131          this%inside_scf = .false.
 
  135          call this%rewind_scf_loop()
 
  138          call this%system%reset_iteration_counters(this%accumulated_loop_ticks)
 
  139          this%accumulated_loop_ticks = 0
 
  141            write(
message(1), 
'(a,i3,a,a)') 
"Debug: -- SCF iter ", this%scf_count, 
" for '" + trim(this%system%namespace%get()), 
"'" 
  161    clock_ = this%system%iteration + 1
 
  174    this%iteration = 
clock_t(time_step=this%dt/this%algo_steps)
 
  175    this%system%iteration = 
clock_t(time_step=this%dt)
 
  186    this%scf_start = this%iter
 
  201    this%iter = this%scf_start
 
  203    this%scf_count = this%scf_count + 1
 
This module implements the basic elements defining algorithms.
 
character(len=algo_label_len), parameter, public update_interactions
 
type(debug_t), save, public debug
 
real(real64), parameter, public m_zero
 
subroutine, public messages_info(no_lines, iunit, verbose_limit, stress, all_nodes, namespace)
 
character(len=256), dimension(max_lines), public message
to be output by fatal, warning
 
This module implements the basic propagator framework.
 
character(len=algo_label_len), parameter, public store_current_status
 
type(algorithmic_operation_t), parameter, public op_store_current_status
 
subroutine propagator_rewind_scf_loop(this)
Reset the iteration state to the beginning of the loop (START_SCF_LOOP) and move to next step.
 
subroutine propagator_save_scf_start(this)
Save the current iteration state (START_SCF_LOOP) and move to next step.
 
logical function propagator_do_operation(this, operation)
Try to perform one operation of the algorithm. Return .true. if sucessful.
 
logical function propagator_finished(this)
indicate whether a propagation has reached the final time
 
character(len=algo_label_len), parameter, public end_scf_loop
 
subroutine propagator_init_iteration_counters(this)
Initialize the propagator and system clocks.
 
type(algorithmic_operation_t), parameter, public op_end_scf_loop
 
This module implements the abstract system type.
 
An algorithm is a list of algorithmic operations executed sequentially.
 
Descriptor of one algorithmic operation.
 
This class implements the iteration counter used by the multisystem algorithms. As any iteration coun...
 
Abstract class implementing propagators.