!  SVN:$Id: ice_age.F90 1304 2015-11-12 19:28:14Z afrobert@nps.edu $
!=======================================================================
!
! authors Elizabeth Hunke

      module ice_age

      use ice_kinds_mod
      use ice_constants

      implicit none

      private
      public :: init_age, increment_age, write_restart_age, read_restart_age

      logical (kind=log_kind), public :: & 
         restart_age      ! if .true., read age tracer restart file

!=======================================================================

      contains

!=======================================================================

!  Initialize ice age tracer (call prior to reading restart data)

      subroutine init_age(nx_block, ny_block, ncat, iage)

      integer(kind=int_kind), intent(in) :: &
             nx_block , &
             ny_block , &
             ncat

      real(kind=dbl_kind), dimension(nx_block,ny_block,ncat), &
             intent(out) :: iage

      iage(:,:,:) = c0

      end subroutine init_age

!=======================================================================

!  Increase ice age tracer by timestep length.

      subroutine increment_age (nx_block, ny_block, &
                                dt,       icells,   &
                                indxi,    indxj,    &
                                iage)

      integer (kind=int_kind), intent(in) :: &
         nx_block, ny_block, & ! block dimensions
         icells                ! number of cells with ice present

      integer (kind=int_kind), dimension (nx_block*ny_block), &
         intent(in) :: &
         indxi, indxj     ! compressed indices for cells with ice

      real (kind=dbl_kind), intent(in) :: &
         dt                    ! time step

      real (kind=dbl_kind), dimension(nx_block,ny_block), &
         intent(inout) :: &
         iage

      !  local variables

      integer (kind=int_kind) :: i, j, ij

      do ij = 1, icells
         i = indxi(ij)
         j = indxj(ij)
         iage(i,j) = iage(i,j) + dt 
      enddo

      end subroutine increment_age

!=======================================================================

! Dumps all values needed for restarting
! author Elizabeth C. Hunke, LANL

      subroutine write_restart_age()

      use ice_communicate, only: my_task, master_task
      use ice_domain_size, only: ncat
      use ice_fileunits, only: nu_diag, nu_dump_age
      use ice_state, only: trcrn, nt_iage
      use ice_restart,only: write_restart_field

      ! local variables

      logical (kind=log_kind) :: diag

      diag = .true.

      !-----------------------------------------------------------------

      call write_restart_field(nu_dump_age,0,trcrn(:,:,nt_iage,:,:),'ruf8', &
                               'iage',ncat,diag)

      end subroutine write_restart_age

!=======================================================================

! Reads all values needed for an ice age restart
! author Elizabeth C. Hunke, LANL

      subroutine read_restart_age()

      use ice_communicate, only: my_task, master_task
      use ice_domain_size, only: ncat
      use ice_fileunits, only: nu_diag, nu_restart_age
      use ice_state, only: trcrn, nt_iage
      use ice_restart,only: read_restart_field

      ! local variables

      logical (kind=log_kind) :: &
         diag

      diag = .true.

      if (my_task == master_task) write(nu_diag,*) 'min/max age (s)'

      call read_restart_field(nu_restart_age,0,trcrn(:,:,nt_iage,:,:),'ruf8', &
                       'iage',ncat,diag,field_loc_center,field_type_scalar)

      end subroutine read_restart_age

!=======================================================================

      end module ice_age

!=======================================================================
