C $Header: /u/gcmpack/MITgcm/pkg/exf/exf_getclim.F,v 1.28 2017/03/03 00:57:00 jmc Exp $
C $Name: $
#include "EXF_OPTIONS.h"
#ifdef ALLOW_CTRL
# include "CTRL_OPTIONS.h"
#endif
#ifdef ALLOW_ECCO
# include "ECCO_OPTIONS.h"
#endif
SUBROUTINE EXF_GETCLIM(
I myTime, myIter, myThid )
c ==================================================================
c SUBROUTINE exf_getclim
c ==================================================================
c
c o Get the climatogy fields for the current time step. The switches
c for the inclusion of the individual forcing components have to
c be set in EXF_OPTIONS.h .
c
c A note on surface fluxes:
c
c The MITgcm-UV vertical coordinate z is positive upward.
c This implies that a positive flux is out of the ocean
c model. However, the wind stress forcing is not treated
c this way. A positive zonal wind stress accelerates the
c model ocean towards the east.
c
c started: Ralf.Giering@FastOpt.de 25-Mai-2000
c
c ==================================================================
c SUBROUTINE exf_getclim
c ==================================================================
IMPLICIT NONE
c == global variables ==
#include "EEPARAMS.h"
#include "SIZE.h"
#include "GRID.h"
#ifdef ALLOW_BULK_OFFLINE
# include "PARAMS.h"
# include "DYNVARS.h"
#endif
#include "EXF_PARAM.h"
#include "EXF_CONSTANTS.h"
#include "EXF_FIELDS.h"
#if (defined (ALLOW_CTRL) defined (ECCO_CTRL_DEPRECATED))
# include "CTRL_SIZE.h"
# include "ctrl.h"
# include "ctrl_dummy.h"
# ifdef ALLOW_ECCO
# include "ecco_cost.h"
# endif
#endif
c == routine arguments ==
c myThid - thread number for this instance of the routine.
_RL myTime
INTEGER myIter
INTEGER myThid
c == local variables ==
INTEGER bi, bj, i, j
c == end of interface ==
#ifdef ALLOW_CLIMSST_RELAXATION
c Get values of climatological sst fields.
CALL EXF_SET_FLD(
I 'climsst', climsstfile, climsstmask,
I climsstStartTime, climsstperiod, climsstRepCycle,
I exf_inscal_climsst,
I climsst_exfremo_intercept, climsst_exfremo_slope,
U climsst, climsst0, climsst1,
#ifdef USE_EXF_INTERPOLATION
I climsst_lon0, climsst_lon_inc, climsst_lat0, climsst_lat_inc,
I climsst_nlon, climsst_nlat, xC, yC, climsst_interpMethod,
#endif
I myTime, myIter, myThid )
DO bj = myByLo(myThid),myByHi(myThid)
DO bi = myBxLo(myThid),mybxhi(myThid)
DO j = 1,sNy
DO i = 1,sNx
IF (climsst(i,j,bi,bj) .LT. climtempfreeze) THEN
climsst(i,j,bi,bj) = climtempfreeze
ENDIF
ENDDO
ENDDO
ENDDO
ENDDO
c-- Update the tile edges.
_EXCH_XY_RL(climsst, myThid)
#endif
#if (defined (ALLOW_CTRL) defined (ECCO_CTRL_DEPRECATED))
# ifdef ALLOW_SST_CONTROL
CALL CTRL_GET_GEN (
& xx_sst_file, xx_sststartdate, xx_sstperiod,
& maskc, climsst, xx_sst0, xx_sst1, xx_sst_dummy,
& xx_sst_remo_intercept, xx_sst_remo_slope,
& wsst, myTime, myIter, myThid )
# endif
#endif
#ifdef ALLOW_CLIMSSS_RELAXATION
c Get values of climatological sss fields.
CALL EXF_SET_FLD(
I 'climsss', climsssfile, climsssmask,
I climsssStartTime, climsssperiod, climsssRepCycle,
I exf_inscal_climsss,
I climsss_exfremo_intercept, climsss_exfremo_slope,
U climsss, climsss0, climsss1,
#ifdef USE_EXF_INTERPOLATION
I climsss_lon0, climsss_lon_inc, climsss_lat0, climsss_lat_inc,
I climsss_nlon, climsss_nlat, xC, yC, climsss_interpMethod,
#endif
I myTime, myIter, myThid )
c-- Update the tile edges.
_EXCH_XY_RL(climsss, myThid)
#endif
#if (defined (ALLOW_CTRL) defined (ECCO_CTRL_DEPRECATED))
# ifdef ALLOW_SSS_CONTROL
CALL CTRL_GET_GEN (
& xx_sss_file, xx_sssstartdate, xx_sssperiod,
& maskc, climsss, xx_sss0, xx_sss1, xx_sss_dummy,
& xx_sss_remo_intercept, xx_sss_remo_slope,
& wsss, myTime, myIter, myThid )
# endif
#endif
#ifdef ALLOW_CLIMSTRESS_RELAXATION
c Get values of climatological ustr fields.
CALL EXF_SET_UV (
I 'climustr', climustrfile, climustrmask,
I climustrStartTime, climustrperiod, climustrRepCycle,
I exf_inscal_climustr,
I climustr_exfremo_intercept, climustr_exfremo_slope,
U climustr, climustr0, climustr1,
I 'climvstr', climvstrfile, climvstrmask,
I climvstrStartTime, climvstrperiod, climvstrRepCycle,
I exf_inscal_climvstr,
I climvstr_exfremo_intercept, climvstr_exfremo_slope,
U climvstr, climvstr0, climvstr1,
#ifdef USE_EXF_INTERPOLATION
I climustr_lon0, climustr_lon_inc,
I climustr_lat0, climustr_lat_inc,
I climustr_nlon, climustr_nlat, climustr_interpMethod,
I climvstr_lon0, climvstr_lon_inc,
I climvstr_lat0, climvstr_lat_inc,
I climvstr_nlon, climvstr_nlat, climvstr_interpMethod,
I uvInterp_climstr,
#endif
I myTime, myIter, myThid )
CALL EXCH_UV_XY_RL( climustr, climvstr, .TRUE., myThid )
#endif /* CLIMSTRESS_RELAXATION */
#ifdef ALLOW_BULK_OFFLINE
DO bj=myByLo(myThid),myByHi(myThid)
DO bi=myBxLo(myThid),myBxHi(myThid)
DO j=1-OLy,sNy+OLy
DO i=1-OLx,sNx+OLx
# ifdef ALLOW_CLIMSST_RELAXATION
IF ( climsstfile .NE. ' ' .AND.
& climsstperiod .NE. 0. )
& theta(i,j,1,bi,bj) = climsst(i,j,bi,bj)
# endif
# ifdef ALLOW_CLIMSSS_RELAXATION
IF ( climsssfile .NE. ' ' .AND.
& climsssperiod .NE. 0. )
& salt(i,j,1,bi,bj) = climsss(i,j,bi,bj)
# endif
# ifdef ALLOW_CLIMSTRESS_RELAXATION
IF ( climustrfile .NE. ' ' .AND.
& climustrperiod .NE. 0. )
& uvel(i,j,1,bi,bj) = climustr(i,j,bi,bj)
IF ( climvstrfile .NE. ' ' .AND.
& climvstrperiod .NE. 0. )
& vvel(i,j,1,bi,bj) = climvstr(i,j,bi,bj)
# endif
IF ( myIter .EQ. niter0 ) THEN
IF ( maskC(i,j,1,bi,bj) .NE. 0. .AND.
& theta(i,j,1,bi,bj) .EQ. 0. ) THEN
print *, 'ph-warn-exf-clim ', i, j, theta(i,j,1,bi,bj)
cph STOP 'in exf_getclim'
ENDIF
ENDIF
ENDDO
ENDDO
ENDDO
ENDDO
#endif /* ALLOW_BULK_OFFLINE */
RETURN
END