Abstract Hamiltonian class

This abstract class does not contains any real data or computational terms, but rather defines the abstract interface, which is inherited by the specific Hamiltonian classes, and some information, which is common to all systems, such as whether the Hamiltonian is Hermitian, and some variables describing the spectral range.

  type, abstract :: hamiltonian_abst_t
    !> Spectral range
    FLOAT :: spectral_middle_point
    FLOAT :: spectral_half_span

  contains
    procedure(is_hermitian),              deferred :: is_hermitian
    procedure(hamiltonian_update_span),   deferred :: update_span
    procedure(dhamiltonian_apply),        deferred :: dapply
    procedure(zhamiltonian_apply),        deferred :: zapply
    procedure(dhamiltonian_magnus_apply), deferred :: dmagnus_apply
    procedure(zhamiltonian_magnus_apply), deferred :: zmagnus_apply
  end type hamiltonian_abst_t

This abstract class is then specialized for the various systems: