C $Header: /u/gcmpack/MITgcm/verification/fizhi-gridalt-hs/code/update_ocean_exports.F,v 1.5 2010/03/16 00:27:00 jmc Exp $
C $Name: $
#include "FIZHI_OPTIONS.h"
subroutine UPDATE_OCEAN_EXPORTS (myTime, myIter, myThid)
c----------------------------------------------------------------------
c Subroutine update_ocean_exports - 'Wrapper' routine to update
c the fields related to the ocean surface that are needed
c by fizhi (sst and sea ice extent).
c
c Call: getsst (Return the current sst field-read dataset if needed)
c getsice (Return the current sea ice field-read data if needed)
c-----------------------------------------------------------------------
implicit none
#include "SIZE.h"
#include "GRID.h"
#include "fizhi_ocean_coms.h"
#include "EEPARAMS.h"
#include "chronos.h"
integer myIter, myThid
_RL myTime
integer i, j, bi, bj, biglobal, bjglobal
integer im1, im2, jm1, jm2, idim1, idim2, jdim1, jdim2
integer nSxglobal, nSyglobal
_RL sstmin
parameter ( sstmin = 273.16 )
idim1 = 1-OLx
idim2 = sNx+OLx
jdim1 = 1-OLy
jdim2 = sNy+OLy
im1 = 1
im2 = sNx
jm1 = 1
jm2 = sNy
nSxglobal = nSx*nPx
nSyglobal = nSy*nPy
C***********************************************************************
DO BJ = myByLo(myThid),myByHi(myThid)
DO BI = myBxLo(myThid),myBxHi(myThid)
biglobal=bi+(myXGlobalLo-1)/im2
bjglobal=bj+(myYGlobalLo-1)/jm2
call GETSST(ksst,idim1,idim2,jdim1,jdim2,im1,im2,jm1,jm2,nSx,
. nSy,nSxglobal,nSyglobal,bi,bj,biglobal,bjglobal,nymd,nhms,sst)
call GETSICE(kice,idim1,idim2,jdim1,jdim2,im1,im2,jm1,jm2,nSx,
. nSy,nSxglobal,nSyglobal,bi,bj,biglobal,bjglobal,nymd,nhms,sice)
c Check for Minimum Open-Water SST
c --------------------------------
do j=jm1,jm2
do i=im1,im2
if(sice(i,j,bi,bj).eq.0.0 .and. sst(i,j,bi,bj).lt.sstmin)
. sst(i,j,bi,bj) = sstmin
enddo
enddo
ENDDO
ENDDO
return
end
subroutine GETSICE(iunit,idim1,idim2,jdim1,jdim2,im1,im2,jm1,jm2,
. nSumx,nSumy,nPgx,nPgy,bi,bj,biglobal,bjglobal,nymd,nhms,sice)
C************************************************************************
C
C!ROUTINE: GETSICE
C!DESCRIPTION: GETSICE returns the sea ice depth.
C! This routine is adaptable for any frequency
C! data upto a daily frequency.
C! note: for diurnal data ndmax should be increased.
C
C!INPUT PARAMETERS:
C! iunit Unit number assigned to the sice data file
C! idim1 Start dimension in x-direction
C! idim2 End dimension in x-direction
C! jdim1 Start dimension in y-direction
C! jdim2 End dimension in y-direction
C! im1 Begin of x-direction span for filling sice
C! im2 End of x-direction span for filling sice
C! jm1 Begin of y-direction span for filling sice
C! jm2 End of y-direction span for filling sice
C! nSumx Number of processors in x-direction (local processor)
C! nSumy Number of processors in y-direction (local processor)
C! nPgx Number of processors in x-direction (global)
C! nPgx Number of processors in y-direction (global)
C! bi Processor number in x-direction (local to processor)
C! bj Processor number in y-direction (local to processor)
C! biglobal Processor number in x-direction (global)
C! bjglobal Processor number in y-direction (global)
C! nymd YYMMDD of the current model timestep
C! nhms HHMMSS of the model time
C
C!OUTPUT PARAMETERS:
C! sice(idim1:idim2,jdim1:jdim2,nSumx,nSumy) Sea ice depth in meters
C
C!ROUTINES CALLED:
C
C! bcdata Reads the data for a given unit number
C! bcheader Reads the header info for a given unit number
C! interp_time Returns weights for linear interpolation
C
C--------------------------------------------------------------------------
implicit none
#include "SIZE.h"
integer iunit,idim1,idim2,jdim1,jdim2,im1,im2,jm1,jm2,nSumx,nSumy
integer nPgx,nPgy,bi,bj,biglobal,bjglobal,nymd,nhms
_RL sice(idim1:idim2,jdim1:jdim2,nSumx,nSumy)
integer i,j
do j = jm1,jm2
do i = im1,im2
sice(i,j,bi,bj) = 0.
enddo
enddo
return
end
subroutine GETSST(iunit,idim1,idim2,jdim1,jdim2,im1,im2,jm1,jm2,
. nSumx,nSumy,nPgx,nPgy,bi,bj,biglobal,bjglobal,nymd,nhms,sst)
C************************************************************************
C
C!ROUTINE: GETSST
C!DESCRIPTION: GETSST gets the SST data.
C! This routine is adaptable for any frequency
C! data upto a daily frequency.
C! note: for diurnal data ndmax should be increased.
C
C!INPUT PARAMETERS:
C! iunit Unit number assigned to the sice data file
C! idim1 Start dimension in x-direction
C! idim2 End dimension in x-direction
C! jdim1 Start dimension in y-direction
C! jdim2 End dimension in y-direction
C! im1 Begin of x-direction span for filling sice
C! im2 End of x-direction span for filling sice
C! jm1 Begin of y-direction span for filling sice
C! jm2 End of y-direction span for filling sice
C! nSumx Number of processors in x-direction (local processor)
C! nSumy Number of processors in y-direction (local processor)
C! nPgx Number of processors in x-direction (global)
C! nPgy Number of processors in y-direction (global)
C! bi Processor number in x-direction (local to processor)
C! bj Processor number in y-direction (local to processor)
C! biglobal Processor number in x-direction (global)
C! bjglobal Processor number in y-direction (global)
C! nymd YYMMDD of the current model timestep
C! nhms HHMMSS of the model time
C
C!OUTPUT PARAMETERS:
C! sst(idim1:idim2,jdim1:jdim2,nSumx,nSumy) Sea surface temperature (K)
C
C!ROUTINES CALLED:
C
C! bcdata Reads the data for a given unit number
C! bcheader Reads the header info for a given unit number
C! interp_time Returns weights for linear interpolation
C
C--------------------------------------------------------------------------
implicit none
#include "SIZE.h"
integer iunit,idim1,idim2,jdim1,jdim2,im1,im2,jm1,jm2,nSumx,nSumy
integer nPgx,nPgy,bi,bj,biglobal,bjglobal,nymd,nhms
_RL sst(idim1:idim2,jdim1:jdim2,nSumx,nSumy)
integer i,j
do j = jm1,jm2
do i = im1,im2
sst(i,j,bi,bj) = 280.
enddo
enddo
return
end