
! Translation of tstep.c into Fortran 2003 (J. Overbey, 17 Sept 2011)
!************************************************************************
!									*
! Commonwealth Scientific and Industrial Research Organisation (CSIRO)	*
!	- Division of Information Technology	(DIT)			*
!	- Division of Atmospheric Research	(DAR)			*
!									*
! Shallow water weather model - Distributed Memory Version		*
!									*
! Finite difference model of shallow water equations based on :-	*
! "The dynamics of finite difference models of the shallow water	*
! equations" by R. Sadourney, JAS, 32, 1975.				*
! Code from:-								*
! "An introduction to three-dimensional climate modelling"		*
! by Washington and Parkinson						*
!									*
! Programmers	= David Abramson	(DIT) rcoda@koel.co.rmit.oz	*
!		= Paul Whiting		(DIT) rcopw@koel.co.rmit.oz	*
!		= Martin Dix		(DAR) mrd@koel.co.rmit.oz	*
! Language	= BSD c using Argonne NL macros				*
! O/S		= Unix System V						*
! H/W		= Encore Multimax 320					*
!									*
!************************************************************************

subroutine tstep(m,n,alpha,jstart,jend,cpold,cuold,cvold,cp,cu,cv,cpnew,cunew,cvnew,cdpdt,cdudt,cdvdt,firststep,tdt) bind(c)
  use, intrinsic :: ISO_C_BINDING
  implicit none

  integer(kind=C_INT), value :: m, n
  real(kind=C_FLOAT), value :: alpha
  integer(kind=C_INT), value :: jstart,jend
  type(C_PTR), value :: cpold; real(kind=C_FLOAT), pointer :: pold(:,:)
  type(C_PTR), value :: cuold; real(kind=C_FLOAT), pointer :: uold(:,:)
  type(C_PTR), value :: cvold; real(kind=C_FLOAT), pointer :: vold(:,:)
  type(C_PTR), value :: cp;    real(kind=C_FLOAT), pointer ::    p(:,:)
  type(C_PTR), value :: cu;    real(kind=C_FLOAT), pointer ::    u(:,:)
  type(C_PTR), value :: cv;    real(kind=C_FLOAT), pointer ::    v(:,:)
  type(C_PTR), value :: cpnew; real(kind=C_FLOAT), pointer :: pnew(:,:)
  type(C_PTR), value :: cunew; real(kind=C_FLOAT), pointer :: unew(:,:)
  type(C_PTR), value :: cvnew; real(kind=C_FLOAT), pointer :: vnew(:,:)
  type(C_PTR), value :: cdpdt; real(kind=C_FLOAT), pointer :: dpdt(:,:)
  type(C_PTR), value :: cdudt; real(kind=C_FLOAT), pointer :: dudt(:,:)
  type(C_PTR), value :: cdvdt; real(kind=C_FLOAT), pointer :: dvdt(:,:)
  integer(kind=C_INT), value :: firststep
  real(kind=C_FLOAT), value  :: tdt

  integer i,j

  call c_f_pointer(cpold, pold, shape=[m, n])
  call c_f_pointer(cuold, uold, shape=[m, n])
  call c_f_pointer(cvold, vold, shape=[m, n])
  call c_f_pointer(cp,    p,    shape=[m, n])
  call c_f_pointer(cu,    u,    shape=[m, n])
  call c_f_pointer(cv,    v,    shape=[m, n])
  call c_f_pointer(cpnew, pnew, shape=[m, n])
  call c_f_pointer(cunew, unew, shape=[m, n])
  call c_f_pointer(cvnew, vnew, shape=[m, n])
  call c_f_pointer(cdpdt, dpdt, shape=[m, n])
  call c_f_pointer(cdudt, dudt, shape=[m, n])
  call c_f_pointer(cdvdt, dvdt, shape=[m, n])

  do j = jstart+1, jend+1
    do i = 1, m
      pnew(i,j) = pold(i,j) + tdt*dpdt(i,j)
      unew(i,j) = uold(i,j) + tdt*dudt(i,j)
      vnew(i,j) = vold(i,j) + tdt*dvdt(i,j)
    end do
  end do

  ! Don't apply time filter on first step
  if ( firststep == 0 ) then
    do j = jstart+1, jend+1
      do i = 1, m
        pold(i,j) = p(i,j)+alpha*(pnew(i,j)-2._c_float*p(i,j)+pold(i,j))
        uold(i,j) = u(i,j)+alpha*(unew(i,j)-2._c_float*u(i,j)+uold(i,j))
        vold(i,j) = v(i,j)+alpha*(vnew(i,j)-2._c_float*v(i,j)+vold(i,j))
      end do
    end do
  end if

  do j = jstart+1, jend+1
    do i = 1, m
      p(i,j) = pnew(i,j)
      u(i,j) = unew(i,j)
      v(i,j) = vnew(i,j)
    end do
  end do
end subroutine
