64 integer,
parameter,
public :: ALGO_LABEL_LEN = 50
71 character(len=ALGO_LABEL_LEN) :: id
73 character(len=ALGO_LABEL_LEN) :: label
79 character(len=ALGO_LABEL_LEN),
public,
parameter :: &
86 type(algorithmic_operation_t),
public,
parameter :: &
109 type(algorithm_iterator_t),
public :: iter
110 type(algorithmic_operation_t) :: current_ops
112 type(algorithmic_operation_t),
public :: start_operation
116 type(algorithmic_operation_t),
public :: final_operation
120 integer,
public :: algo_steps
128 logical :: iteration_done
130 type(iteration_counter_t),
public :: iteration
131 real(real64) :: start_time =
m_zero
132 real(real64),
public :: elapsed_time =
m_zero
141 procedure(algorithm_finished),
deferred :: finished
142 procedure(algorithm_init_iteration_counters),
deferred :: init_iteration_counters
150 class(algorithm_t),
intent(in) :: this
172 call this%add_copy(operation)
195 class(algorithm_t),
intent(inout) :: this
199 this%elapsed_time =
loct_clock() - this%start_time
214 call this%iter%start(this)
229 this%current_ops = this%iter%get_next()
242 operation = this%current_ops
258 select type (ptr => this%get_next_ptr())
indicate whether the algorithm has finished one time step
initializes the algorithm and system iteration counters
This module implements the basic elements defining algorithms.
character(len=algo_label_len), parameter, public update_interactions
character(len=algo_label_len), parameter, public rewind_algorithm
type(algorithmic_operation_t), parameter, public op_iteration_done
character(len=algo_label_len), parameter, public update_couplings
type(algorithmic_operation_t), parameter, public op_rewind_algorithm
type(algorithmic_operation_t) function algorithm_get_current_operation(this)
return the current algorithmic operation.
subroutine algorithm_rewind(this)
Reset the algorithm to the first operation.
type(algorithmic_operation_t) function algorithm_iterator_get_next(this)
Get the next algorithmic operation from the iterator.
type(algorithmic_operation_t), parameter, public op_update_couplings
character(len=algo_label_len), parameter, public iteration_done
subroutine algorithm_add_operation(this, operation)
add an algorithmic operation to the list
subroutine algorithm_update_elapsed_time(this)
The elapsed time is used for the output of run time information.
subroutine algorithm_next(this)
move to the next algorithmic operation
logical function algorithm_do_operation(this, operation)
try to perform one operation of the algorithm. If successfull return .true.
type(algorithmic_operation_t), parameter, public op_update_interactions
real(real64), parameter, public m_zero
This module implements fully polymorphic linked lists, and some specializations thereof.
Iterator to loop over the algorithmic operations of an algorithm.
An algorithm is a list of algorithmic operations executed sequentially.
Descriptor of one algorithmic operation.
This class implements an iterator for the polymorphic linked list.
This class implements a linked list of unlimited polymorphic values.