3.2.2. Procedures

Procedures should follow this template, with a dotted line separating argument declarations from local variable declarations, and with dashed lines separating code and comment blocks::

!===============================================================================
!> Procedure description (picked up by doxygen)
!===============================================================================
SUBROUTINE updatet (self, aux)
  class(some_t):: self
  integer:: aux
  !..............................................................................
  integer:: local_variables, ...
  real(KindScalarVar), dimension(:,:,:), pointer:: d, ...
  real(KindScalarVar), dimension(:,:,:), allocatable:: w, ...
  !------------------------------------------------------------------------------
  call trace%begin('some_t%update)
  ...
  !------------------------------------------------------------------------------
  ! Comment block
  !------------------------------------------------------------------------------
  ...
  var = expression                                    ! in-line comment
  ...
  call trace%end ()
END SUBROUTINE update

or, if the procedures should be timed::

!===============================================================================
!> Procedure description ...
!===============================================================================
SUBROUTINE updatet (self, aux)
  class(some_t):: self
  integer:: aux
  !..............................................................................
  integer:: local_variables, ...
  real(KindScalarVar), dimension(:,:,:):: d, ...
  integer, save:: itimer
  !------------------------------------------------------------------------------
  call trace%begin('some_t%update, itimer=itimer)
  ...
  call trace%end (itimer)
END SUBROUTINE update