117  integer, 
parameter, 
public :: &
 
  133    type(iteration_counter_t)     :: iteration
 
  134    character(len=:), 
allocatable :: label
 
  135    logical                       :: intra_interaction
 
  138    real(real64)                  :: energy
 
  141    integer, 
allocatable :: system_quantities(:)
 
  144    class(interaction_partner_t), 
pointer     :: partner => null()
 
  145    integer,                      
allocatable :: couplings_from_partner(:)
 
  146    logical                                   :: partner_couplings_up_to_date = .false. 
 
  149    procedure(interaction_calculate), 
deferred :: calculate
 
  150    procedure(interaction_calculate_energy), 
deferred :: calculate_energy
 
  163      class(interaction_t),              
intent(inout) :: this
 
  171      class(interaction_t),              
intent(inout) :: this
 
  195    class(interaction_t),              
intent(inout) :: this
 
  196    class(iteration_counter_t),        
intent(in)    :: requested_iteration
 
  198    type(event_handle_t) :: debug_handle
 
  202    if (this%partner_couplings_up_to_date) 
then 
  208    if (.not. 
allocated(this%couplings_from_partner)) 
then 
  210      this%partner_couplings_up_to_date = .
true.
 
  217      requested_iteration = requested_iteration, &
 
  218      interaction_iteration = this%iteration)
 
  221    call this%partner%update_on_demand_quantities(this%couplings_from_partner, requested_iteration, &
 
  225    select case (this%partner%check_couplings_status(this%couplings_from_partner, requested_iteration))
 
  228      this%partner_couplings_up_to_date = .
true.
 
  229      call this%partner%copy_quantities_to_interaction(this)
 
  240      this%partner_couplings_up_to_date = .false.
 
  250      requested_iteration = requested_iteration, &
 
  251      interaction_iteration = this%iteration)
 
  268    assert(.not. (this%iteration == requested_iteration))
 
  271      extra=
"target: "//trim(this%label)//
"-"//trim(this%partner%namespace%get()), &
 
  272      interaction_iteration = this%iteration,      &
 
  273      requested_iteration = requested_iteration)
 
  275    call this%calculate()
 
  278    call this%iteration%set(requested_iteration)
 
  280      trim(this%label)//
"-"//trim(this%partner%namespace%get()), &
 
  281      this%iteration, 
"set"))
 
  285    this%partner_couplings_up_to_date = .false.
 
  288      interaction_iteration = this%iteration,  &
 
  289      requested_iteration = requested_iteration)
 
  300    if (
allocated(this%couplings_from_partner)) 
then 
  301      deallocate(this%couplings_from_partner)
 
  303    nullify(this%partner)
 
  305    if (
allocated(this%system_quantities)) 
then 
  306      deallocate(this%system_quantities)
 
  309    if (
allocated(this%label)) 
then 
  310      deallocate(this%label)
 
  339    call this%iteration%restart_write(
'restart_iteration_interaction_'//trim(this%label), namespace)
 
  351    call this%add_ptr(interaction)
 
  363    select type (ptr => this%get_next_ptr())
 
All interactions need to implement the following deferred method, which takes information form the in...
 
All interactions need to implement the following deferred method, which takes information form the in...
 
This module defines the abstract interaction_t class, and some auxiliary classes for interactions.
 
subroutine interaction_update_partner_couplings(this, requested_iteration)
Try to update all the couplings needed from the partner to update the interaction.
 
subroutine, public interaction_end(this)
 
subroutine interaction_update(this, requested_iteration)
Update the interaction to the requested_iteration.
 
logical function interaction_restart_read(this, namespace)
read restart information
 
class(interaction_t) function, pointer interaction_iterator_get_next(this)
 
integer, parameter, public timing_retarded
 
subroutine interaction_restart_write(this, namespace)
 
subroutine interaction_list_add_node(this, interaction)
 
This module defines classes and functions for interaction partners.
 
integer, parameter, public couplings_on_time
 
integer, parameter, public couplings_behind_in_time
 
integer, parameter, public couplings_ahead_in_time
 
integer, parameter, public couplings_undefined
 
This module implements fully polymorphic linked lists, and some specializations thereof.
 
This module implements the multisystem debug functionality.
 
subroutine, public multisystem_debug_write_marker(system_namespace, event)
 
type(event_handle_t) function, public multisystem_debug_write_event_in(system_namespace, event, extra, system_iteration, algo_iteration, interaction_iteration, partner_iteration, requested_iteration)
 
subroutine, public multisystem_debug_write_event_out(handle, extra, update, system_iteration, algo_iteration, interaction_iteration, partner_iteration, requested_iteration)
 
This module defines the quantity_t class and the IDs for quantities, which can be exposed by a system...
 
These class extend the list and list iterator to make an interaction list.
 
These classes extend the list and list iterator to make an interaction list.
 
abstract interaction class
 
surrogate interaction class to avoid circular dependencies between modules.
 
This class implements the iteration counter used by the multisystem algorithms. As any iteration coun...
 
This class implements an iterator for the polymorphic linked list.
 
This class implements a linked list of unlimited polymorphic values.
 
events marking a function call
 
handle to keep track of in- out- events
 
events marking an iteration update