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