C $Header: /u/gcmpack/MITgcm/pkg/exf/exf_getffields.F,v 1.73 2017/10/06 00:03:56 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_GETFFIELDS( myTime, myIter, myThid ) C ================================================================== C SUBROUTINE exf_getffields C ================================================================== C C o Read-in atmospheric state and/or surface fluxes from files. C C heimbach@mit.edu, 23-May-2003 totally re-structured C 5-Aug-2003: added USE_EXF_INTERPOLATION for arbitrary input grid C C ================================================================== C SUBROUTINE exf_getffields C ================================================================== IMPLICIT NONE C == global variables == #include "EEPARAMS.h" #include "SIZE.h" #include "PARAMS.h" #include "DYNVARS.h" #include "GRID.h" #include "EXF_PARAM.h" #include "EXF_FIELDS.h" #include "EXF_CONSTANTS.h" #ifdef ALLOW_CTRL # include "CTRL_SIZE.h" # include "ctrl.h" # include "ctrl_dummy.h" # ifdef ALLOW_GENTIM2D_CONTROL # include "CTRL_GENARR.h" # endif #endif #if (defined (ALLOW_ECCO) defined (ECCO_CTRL_DEPRECATED)) # include "ecco_cost.h" #endif C == routine arguments == _RL myTime INTEGER myIter INTEGER myThid C == local variables == INTEGER i, j, bi, bj #ifdef ALLOW_ROTATE_UV_CONTROLS _RL tmpUE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RL tmpVN(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RL tmpUX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) _RL tmpVY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy) #endif #if (defined (ALLOW_CTRL) defined (ALLOW_GENTIM2D_CONTROL)) INTEGER iarr #endif C == end of interface == C-- read forcing fields from files and temporal interpolation C- Zonal and meridional wind stress. IF ( .NOT.useAtmWind ) THEN CALL EXF_SET_UV( I 'ustress', ustressfile, ustressmask, I ustressStartTime, ustressperiod, ustressRepCycle, I exf_inscal_ustress, I ustress_exfremo_intercept, ustress_exfremo_slope, U ustress, ustress0, ustress1, I 'vstress', vstressfile, vstressmask, I vstressStartTime, vstressperiod, vstressRepCycle, I exf_inscal_vstress, I vstress_exfremo_intercept, vstress_exfremo_slope, U vstress, vstress0, vstress1, #ifdef USE_EXF_INTERPOLATION I ustress_lon0, ustress_lon_inc, ustress_lat0, ustress_lat_inc, I ustress_nlon, ustress_nlat, ustress_interpMethod, I vstress_lon0, vstress_lon_inc, vstress_lat0, vstress_lat_inc, I vstress_nlon, vstress_nlat, vstress_interpMethod, I uvInterp_stress, #endif /* USE_EXF_INTERPOLATION */ I myTime, myIter, myThid ) ELSE DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),mybxhi(myThid) DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx ustress(i,j,bi,bj) = 0. _d 0 vstress(i,j,bi,bj) = 0. _d 0 ENDDO ENDDO ENDDO ENDDO ENDIF C- Wind speed CALL EXF_SET_FLD( I 'wspeed', wspeedfile, wspeedmask, I wspeedStartTime, wspeedperiod, wspeedRepCycle, I exf_inscal_wspeed, I wspeed_exfremo_intercept, wspeed_exfremo_slope, U wspeed, wspeed0, wspeed1, #ifdef USE_EXF_INTERPOLATION I wspeed_lon0, wspeed_lon_inc, I wspeed_lat0, wspeed_lat_inc, I wspeed_nlon, wspeed_nlat, xC, yC, wspeed_interpMethod, #endif I myTime, myIter, myThid ) C- Zonal and meridional wind. IF ( useAtmWind ) THEN CALL EXF_SET_UV( I 'uwind', uwindfile, uwindmask, I uwindStartTime, uwindperiod, uwindRepCycle, I exf_inscal_uwind, I uwind_exfremo_intercept, uwind_exfremo_slope, U uwind, uwind0, uwind1, I 'vwind', vwindfile, vwindmask, I vwindStartTime, vwindperiod, vwindRepCycle, I exf_inscal_vwind, I vwind_exfremo_intercept, vwind_exfremo_slope, U vwind, vwind0, vwind1, #ifdef USE_EXF_INTERPOLATION I uwind_lon0, uwind_lon_inc, uwind_lat0, uwind_lat_inc, I uwind_nlon, uwind_nlat, uwind_interpMethod, I vwind_lon0, vwind_lon_inc, vwind_lat0, vwind_lat_inc, I vwind_nlon, vwind_nlat, vwind_interpMethod, uvInterp_wind, #endif /* USE_EXF_INTERPOLATION */ I myTime, myIter, myThid ) IF (useRelativeWind) THEN C Subtract UVEL and VVEL from UWIND and VWIND. DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),mybxhi(myThid) DO j = 1,sNy DO i = 1,sNx uwind(i,j,bi,bj) = uwind(i,j,bi,bj) - 0.5 _d 0 & * (uVel(i,j,1,bi,bj)+uVel(i+1,j,1,bi,bj)) vwind(i,j,bi,bj) = vwind(i,j,bi,bj) - 0.5 _d 0 & * (vVel(i,j,1,bi,bj)+vVel(i,j+1,1,bi,bj)) ENDDO ENDDO ENDDO ENDDO ENDIF ELSE DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),mybxhi(myThid) DO j=1-OLy,sNy+OLy DO i=1-OLx,sNx+OLx uwind(i,j,bi,bj) = 0. _d 0 vwind(i,j,bi,bj) = 0. _d 0 ENDDO ENDDO ENDDO ENDDO ENDIF C- Atmospheric heat flux. CALL EXF_SET_FLD( I 'hflux', hfluxfile, hfluxmask, I hfluxStartTime, hfluxperiod, hfluxRepCycle, I exf_inscal_hflux, I hflux_exfremo_intercept, hflux_exfremo_slope, U hflux, hflux0, hflux1, #ifdef USE_EXF_INTERPOLATION I hflux_lon0, hflux_lon_inc, hflux_lat0, hflux_lat_inc, I hflux_nlon, hflux_nlat, xC, yC, hflux_interpMethod, #endif I myTime, myIter, myThid ) C- Freshwater flux. CALL EXF_SET_FLD( I 'sflux', sfluxfile, sfluxmask, I sfluxStartTime, sfluxperiod, sfluxRepCycle, I exf_inscal_sflux, I sflux_exfremo_intercept, sflux_exfremo_slope, U sflux, sflux0, sflux1, #ifdef USE_EXF_INTERPOLATION I sflux_lon0, sflux_lon_inc, sflux_lat0, sflux_lat_inc, I sflux_nlon, sflux_nlat, xC, yC, sflux_interpMethod, #endif I myTime, myIter, myThid ) #ifdef ALLOW_ATM_TEMP C- Atmospheric temperature. CALL EXF_SET_FLD( I 'atemp', atempfile, atempmask, I atempStartTime, atempperiod, atempRepCycle, I exf_inscal_atemp, I atemp_exfremo_intercept, atemp_exfremo_slope, U atemp, atemp0, atemp1, #ifdef USE_EXF_INTERPOLATION I atemp_lon0, atemp_lon_inc, atemp_lat0, atemp_lat_inc, I atemp_nlon, atemp_nlat, xC, yC, atemp_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 atemp(i,j,bi,bj) = atemp(i,j,bi,bj) + exf_offset_atemp ENDDO ENDDO ENDDO ENDDO C- Atmospheric humidity. CALL EXF_SET_FLD( I 'aqh', aqhfile, aqhmask, I aqhStartTime, aqhperiod, aqhRepCycle, I exf_inscal_aqh, I aqh_exfremo_intercept, aqh_exfremo_slope, U aqh, aqh0, aqh1, #ifdef USE_EXF_INTERPOLATION I aqh_lon0, aqh_lon_inc, aqh_lat0, aqh_lat_inc, I aqh_nlon, aqh_nlat, xC, yC, aqh_interpMethod, #endif I myTime, myIter, myThid ) # ifdef ALLOW_READ_TURBFLUXES C- Sensible Heat flux CALL EXF_SET_FLD( I 'hs', hs_file, hs_mask, I hs_StartTime, hs_period, hs_RepCycle, I exf_inscal_hs, I hs_exfremo_intercept, hs_exfremo_slope, U hs, hs0, hs1, # ifdef USE_EXF_INTERPOLATION I hs_lon0, hs_lon_inc, hs_lat0, hs_lat_inc, I hs_nlon, hs_nlat, xC, yC, hs_interpMethod, # endif I myTime, myIter, myThid ) C- Latent Heat flux CALL EXF_SET_FLD( I 'hl', hl_file, hl_mask, I hl_StartTime, hl_period, hl_RepCycle, I exf_inscal_hl, I hl_exfremo_intercept, hl_exfremo_slope, U hl, hl0, hl1, # ifdef USE_EXF_INTERPOLATION I hl_lon0, hl_lon_inc, hl_lat0, hl_lat_inc, I hl_nlon, hl_nlat, xC, yC, hl_interpMethod, # endif I myTime, myIter, myThid ) # endif /* ALLOW_READ_TURBFLUXES */ C- Net long wave radiative flux. CALL EXF_SET_FLD( I 'lwflux', lwfluxfile, lwfluxmask, I lwfluxStartTime, lwfluxperiod, lwfluxRepCycle, I exf_inscal_lwflux, I lwflux_exfremo_intercept, lwflux_exfremo_slope, U lwflux, lwflux0, lwflux1, #ifdef USE_EXF_INTERPOLATION I lwflux_lon0, lwflux_lon_inc, lwflux_lat0, lwflux_lat_inc, I lwflux_nlon, lwflux_nlat, xC, yC, lwflux_interpMethod, #endif I myTime, myIter, myThid ) #ifdef EXF_READ_EVAP C- Evaporation CALL EXF_SET_FLD( I 'evap', evapfile, evapmask, I evapStartTime, evapperiod, evapRepCycle, I exf_inscal_evap, I evap_exfremo_intercept, evap_exfremo_slope, U evap, evap0, evap1, #ifdef USE_EXF_INTERPOLATION I evap_lon0, evap_lon_inc, evap_lat0, evap_lat_inc, I evap_nlon, evap_nlat, xC, yC, evap_interpMethod, #endif I myTime, myIter, myThid ) #endif /* EXF_READ_EVAP */ C- Precipitation. CALL EXF_SET_FLD( I 'precip', precipfile, precipmask, I precipStartTime, precipperiod, precipRepCycle, I exf_inscal_precip, I precip_exfremo_intercept, precip_exfremo_slope, U precip, precip0, precip1, #ifdef USE_EXF_INTERPOLATION I precip_lon0, precip_lon_inc, precip_lat0, precip_lat_inc, I precip_nlon, precip_nlat, xC, yC, precip_interpMethod, #endif I myTime, myIter, myThid ) C- Snow. CALL EXF_SET_FLD( I 'snowprecip', snowprecipfile, snowprecipmask, I snowprecipStartTime, snowprecipperiod, snowprecipRepCycle, I exf_inscal_snowprecip, I snowprecip_exfremo_intercept, snowprecip_exfremo_slope, U snowprecip, snowprecip0, snowprecip1, #ifdef USE_EXF_INTERPOLATION I snowprecip_lon0, snowprecip_lon_inc, I snowprecip_lat0, snowprecip_lat_inc, I snowprecip_nlon, snowprecip_nlat, xC, yC, I snowprecip_interpMethod, #endif I myTime, myIter, myThid ) C Take care of case where total precip is not defined IF ( snowPrecipFile .NE. ' ' ) THEN DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),mybxhi(myThid) DO j = 1,sNy DO i = 1,sNx precip(i,j,bi,bj) = & MAX( precip(i,j,bi,bj), snowPrecip(i,j,bi,bj) ) ENDDO ENDDO ENDDO ENDDO ENDIF #endif /* ALLOW_ATM_TEMP */ #if defined(ALLOW_ATM_TEMP) defined(SHORTWAVE_HEATING) C- Net short wave radiative flux. CALL EXF_SET_FLD( I 'swflux', swfluxfile, swfluxmask, I swfluxStartTime, swfluxperiod, swfluxRepCycle, I exf_inscal_swflux, I swflux_exfremo_intercept, swflux_exfremo_slope, U swflux, swflux0, swflux1, #ifdef USE_EXF_INTERPOLATION I swflux_lon0, swflux_lon_inc, swflux_lat0, swflux_lat_inc, I swflux_nlon, swflux_nlat, xC, yC, swflux_interpMethod, #endif I myTime, myIter, myThid ) #endif #ifdef ALLOW_DOWNWARD_RADIATION C- Downward shortwave radiation. CALL EXF_SET_FLD( I 'swdown', swdownfile, swdownmask, I swdownStartTime, swdownperiod, swdownRepCycle, I exf_inscal_swdown, I swdown_exfremo_intercept, swdown_exfremo_slope, U swdown, swdown0, swdown1, #ifdef USE_EXF_INTERPOLATION I swdown_lon0, swdown_lon_inc, swdown_lat0, swdown_lat_inc, I swdown_nlon, swdown_nlat, xC, yC, swdown_interpMethod, #endif I myTime, myIter, myThid ) C- Downward longwave radiation. CALL EXF_SET_FLD( I 'lwdown', lwdownfile, lwdownmask, I lwdownStartTime, lwdownperiod, lwdownRepCycle, I exf_inscal_lwdown, I lwdown_exfremo_intercept, lwdown_exfremo_slope, U lwdown, lwdown0, lwdown1, #ifdef USE_EXF_INTERPOLATION I lwdown_lon0, lwdown_lon_inc, lwdown_lat0, lwdown_lat_inc, I lwdown_nlon, lwdown_nlat, xC, yC, lwdown_interpMethod, #endif I myTime, myIter, myThid ) #endif /* ALLOW_DOWNWARD_RADIATION */ #ifdef ATMOSPHERIC_LOADING C- Atmos. pressure forcing CALL EXF_SET_FLD( I 'apressure', apressurefile, apressuremask, I apressureStartTime, apressureperiod, apressureRepCycle, I exf_inscal_apressure, I apressure_exfremo_intercept, apressure_exfremo_slope, U apressure, apressure0, apressure1, #ifdef USE_EXF_INTERPOLATION I apressure_lon0, apressure_lon_inc, I apressure_lat0, apressure_lat_inc, I apressure_nlon,apressure_nlat,xC,yC, apressure_interpMethod, #endif I myTime, myIter, myThid ) #endif #ifdef EXF_ALLOW_TIDES C- Tidal geopotential CALL EXF_SET_FLD( I 'tidePot', tidePotFile, tidePotMask, I tidePotStartTime, tidePotPeriod, tidePotRepCycle, I exf_inscal_tidePot, I tidePot_exfremo_intercept, tidePot_exfremo_slope, U tidePot, tidePot0, tidePot1, #ifdef USE_EXF_INTERPOLATION I tidePot_lon0, tidePot_lon_inc, I tidePot_lat0, tidePot_lat_inc, I tidePot_nlon, tidePot_nlat, xC, yC, tidePot_interpMethod, #endif I myTime, myIter, myThid ) #endif /* EXF_ALLOW_TIDES */ #ifdef EXF_SEAICE_FRACTION C- fractional ice-covered area mask CALL EXF_SET_FLD( I 'areamask', areamaskfile, areamaskmask, I areamaskStartTime, areamaskperiod, areamaskRepCycle, I exf_inscal_areamask, I areamask_exfremo_intercept, areamask_exfremo_slope, U areamask, areamask0, areamask1, #ifdef USE_EXF_INTERPOLATION I areamask_lon0, areamask_lon_inc, I areamask_lat0, areamask_lat_inc, I areamask_nlon, areamask_nlat, xC, yC, areamask_interpMethod, #endif I myTime, myIter, myThid ) #endif #ifdef ALLOW_RUNOFF C- Runoff CALL EXF_SET_FLD( I 'runoff', runofffile, runoffmask, I runoffStartTime, runoffperiod, runoffRepCycle, I exf_inscal_runoff, I runoff_exfremo_intercept, runoff_exfremo_slope, U runoff, runoff0, runoff1, #ifdef USE_EXF_INTERPOLATION I runoff_lon0, runoff_lon_inc, runoff_lat0, runoff_lat_inc, I runoff_nlon, runoff_nlat, xC, yC, runoff_interpMethod, #endif I myTime, myIter, myThid ) #endif /* ALLOW_RUNOFF */ #ifdef ALLOW_RUNOFTEMP C- Runoff temperature CALL EXF_SET_FLD( I 'runoftemp', runoftempfile, runoffmask, I runoffStartTime, runoffperiod, runoffRepCycle, I exf_inscal_runoftemp, I runoftemp_exfremo_intercept, runoftemp_exfremo_slope, U runoftemp, runoftemp0, runoftemp1, #ifdef USE_EXF_INTERPOLATION I runoff_lon0, runoff_lon_inc, runoff_lat0, runoff_lat_inc, I runoff_nlon, runoff_nlat, xC, yC, runoff_interpMethod, #endif I myTime, myIter, myThid ) #endif /* ALLOW_RUNOFTEMP */ #ifdef ALLOW_SALTFLX C- Salt flux CALL EXF_SET_FLD( I 'saltflx', saltflxfile, saltflxmask, I saltflxStartTime, saltflxperiod, saltflxRepCycle, I exf_inscal_saltflx, I saltflx_exfremo_intercept, saltflx_exfremo_slope, U saltflx, saltflx0, saltflx1, #ifdef USE_EXF_INTERPOLATION I saltflx_lon0, saltflx_lon_inc, I saltflx_lat0, saltflx_lat_inc, I saltflx_nlon, saltflx_nlat, xC, yC, saltflx_interpMethod, #endif I myTime, myIter, myThid ) #endif #ifdef ALLOW_ROTATE_UV_CONTROLS IF ( useCTRL ) THEN DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),mybxhi(myThid) DO j = 1-OLy,sNy+OLy DO i = 1-OLx,sNx+OLx tmpUE(i,j,bi,bj) = 0. _d 0 tmpVN(i,j,bi,bj) = 0. _d 0 tmpUX(i,j,bi,bj) = 0. _d 0 tmpVY(i,j,bi,bj) = 0. _d 0 ENDDO ENDDO ENDDO ENDDO ENDIF #endif # if (!defined (ALLOW_ECCO) || defined (ECCO_CTRL_DEPRECATED)) C-- Control variables for atmos. state #ifdef ALLOW_CTRL IF (.NOT.ctrlUseGen) THEN #ifdef ALLOW_ATEMP_CONTROL CALL CTRL_GET_GEN ( & xx_atemp_file, xx_atempstartdate, xx_atempperiod, & maskc, atemp, xx_atemp0, xx_atemp1, xx_atemp_dummy, & xx_atemp_remo_intercept, xx_atemp_remo_slope, & watemp, myTime, myIter, myThid ) #endif #ifdef ALLOW_AQH_CONTROL CALL CTRL_GET_GEN ( & xx_aqh_file, xx_aqhstartdate, xx_aqhperiod, & maskc, aqh, xx_aqh0, xx_aqh1, xx_aqh_dummy, & xx_aqh_remo_intercept, xx_aqh_remo_slope, & waqh, myTime, myIter, myThid ) #endif #ifdef ALLOW_PRECIP_CONTROL CALL CTRL_GET_GEN ( & xx_precip_file, xx_precipstartdate, xx_precipperiod, & maskc, precip, xx_precip0, xx_precip1, xx_precip_dummy, & xx_precip_remo_intercept, xx_precip_remo_slope, & wprecip, myTime, myIter, myThid ) #endif #ifdef ALLOW_SWDOWN_CONTROL CALL CTRL_GET_GEN ( & xx_swdown_file, xx_swdownstartdate, xx_swdownperiod, & maskc, swdown, xx_swdown0, xx_swdown1, xx_swdown_dummy, & xx_swdown_remo_intercept, xx_swdown_remo_slope, & wswdown, myTime, myIter, myThid ) #endif #ifdef ALLOW_LWDOWN_CONTROL CALL CTRL_GET_GEN ( & xx_lwdown_file, xx_lwdownstartdate, xx_lwdownperiod, & maskc, lwdown, xx_lwdown0, xx_lwdown1, xx_lwdown_dummy, & xx_lwdown_remo_intercept, xx_lwdown_remo_slope, & wlwdown, myTime, myIter, myThid ) #endif ENDIF !if (.NOT.ctrlUseGen) then #ifdef ALLOW_SWFLUX_CONTROL CALL CTRL_GET_GEN ( & xx_swflux_file, xx_swfluxstartdate, xx_swfluxperiod, & maskc, swflux, xx_swflux0, xx_swflux1, xx_swflux_dummy, & xx_swflux_remo_intercept, xx_swflux_remo_slope, & wswflux, myTime, myIter, myThid ) #endif #ifdef ALLOW_LWFLUX_CONTROL CALL CTRL_GET_GEN ( & xx_lwflux_file, xx_lwfluxstartdate, xx_lwfluxperiod, & maskc, lwflux, xx_lwflux0, xx_lwflux1, xx_lwflux_dummy, & xx_lwflux_remo_intercept, xx_lwflux_remo_slope, & wswflux, myTime, myIter, myThid ) #endif #ifdef ALLOW_EVAP_CONTROL CALL CTRL_GET_GEN ( & xx_evap_file, xx_evapstartdate, xx_evapperiod, & maskc, evap, xx_evap0, xx_evap1, xx_evap_dummy, & xx_evap_remo_intercept, xx_evap_remo_slope, & wevap, myTime, myIter, myThid ) #endif #ifdef ALLOW_SNOWPRECIP_CONTROL CALL CTRL_GET_GEN ( & xx_snowprecip_file, xx_snowprecipstartdate, & xx_snowprecipperiod, & maskc, snowprecip, xx_snowprecip0, xx_snowprecip1, & xx_snowprecip_dummy, & xx_snowprecip_remo_intercept, xx_snowprecip_remo_slope, & wsnowprecip, myTime, myIter, myThid ) #endif #ifdef ALLOW_APRESSURE_CONTROL CALL CTRL_GET_GEN ( & xx_apressure_file, xx_apressurestartdate, & xx_apressureperiod, & maskc, apressure, xx_apressure0, xx_apressure1, & xx_apressure_dummy, & xx_apressure_remo_intercept, xx_apressure_remo_slope, & wapressure, myTime, myIter, myThid ) #endif IF ( useAtmWind ) THEN #ifndef ALLOW_ROTATE_UV_CONTROLS #ifdef ALLOW_UWIND_CONTROL CALL CTRL_GET_GEN ( & xx_uwind_file, xx_uwindstartdate, xx_uwindperiod, & maskc, uwind, xx_uwind0, xx_uwind1, xx_uwind_dummy, & xx_uwind_remo_intercept, xx_uwind_remo_slope, & wuwind, myTime, myIter, myThid ) #endif /* ALLOW_UWIND_CONTROL */ #ifdef ALLOW_VWIND_CONTROL CALL CTRL_GET_GEN ( & xx_vwind_file, xx_vwindstartdate, xx_vwindperiod, & maskc, vwind, xx_vwind0, xx_vwind1, xx_vwind_dummy, & xx_vwind_remo_intercept, xx_vwind_remo_slope, & wvwind, myTime, myIter, myThid ) #endif /* ALLOW_VWIND_CONTROL */ #else #if defined(ALLOW_UWIND_CONTROL) defined(ALLOW_VWIND_CONTROL) CALL CTRL_GET_GEN ( & xx_uwind_file, xx_uwindstartdate, xx_uwindperiod, & maskc, tmpUE, xx_uwind0, xx_uwind1, xx_uwind_dummy, & xx_uwind_remo_intercept, xx_uwind_remo_slope, & wuwind, myTime, myIter, myThid ) CALL CTRL_GET_GEN ( & xx_vwind_file, xx_vwindstartdate, xx_vwindperiod, & maskc, tmpVN, xx_vwind0, xx_vwind1, xx_vwind_dummy, & xx_vwind_remo_intercept, xx_vwind_remo_slope, & wvwind, myTime, myIter, myThid ) CALL ROTATE_UV2EN_RL(tmpUX,tmpVY,tmpUE,tmpVN, & .FALSE.,.FALSE.,.TRUE.,1,myThid) DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),mybxhi(myThid) DO j = 1,sNy DO i = 1,sNx uwind(i,j,bi,bj)=uwind(i,j,bi,bj)+tmpUX(i,j,bi,bj) vwind(i,j,bi,bj)=vwind(i,j,bi,bj)+tmpVY(i,j,bi,bj) ENDDO ENDDO ENDDO ENDDO #endif #endif /* ALLOW_ROTATE_UV_CONTROLS */ ENDIF #ifdef ALLOW_ATM_MEAN_CONTROL DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),mybxhi(myThid) DO j = 1,sNy DO i = 1,sNx # ifdef ALLOW_ATEMP_CONTROL atemp(i,j,bi,bj) =atemp(i,j,bi,bj) +xx_atemp_mean(i,j,bi,bj) # endif # ifdef ALLOW_AQH_CONTROL aqh(i,j,bi,bj) =aqh(i,j,bi,bj) +xx_aqh_mean(i,j,bi,bj) # endif # ifdef ALLOW_PRECIP_CONTROL precip(i,j,bi,bj)=precip(i,j,bi,bj)+xx_precip_mean(i,j,bi,bj) # endif # ifdef ALLOW_SWDOWN_CONTROL swdown(i,j,bi,bj)=swdown(i,j,bi,bj)+xx_swdown_mean(i,j,bi,bj) # endif # ifdef ALLOW_UWIND_CONTROL uwind(i,j,bi,bj) =uwind(i,j,bi,bj) +xx_uwind_mean(i,j,bi,bj) # endif # ifdef ALLOW_VWIND_CONTROL vwind(i,j,bi,bj) =vwind(i,j,bi,bj) +xx_vwind_mean(i,j,bi,bj) # endif ENDDO ENDDO ENDDO ENDDO #endif /* ALLOW_ATM_MEAN_CONTROL */ cdm transferred from exf_init_runoff.F cdm functionality needs to be checked before turning on cdm #ifdef ALLOW_RUNOFF_CONTROL cdm CALL CTRL_GET_GEN ( cdm & xx_runoff_file, xx_runoffstartdate, xx_runoffperiod, cdm & maskc, runoff, xx_runoff0, xx_runoff1, xx_runoff_dummy, cdm & xx_runoff_remo_intercept, xx_runoff_remo_slope, cdm & wrunoff, 0., 0., myThid ) cdm #endif #endif /* ALLOW_CTRL */ #endif /* undef ALLOW_ECCO) || def ECCO_CTRL_DEPRECATED */ #if (defined (ALLOW_CTRL) defined (ALLOW_GENTIM2D_CONTROL)) IF ( useCTRL.AND.ctrlUseGen ) THEN DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),mybxhi(myThid) DO j = 1,sNy DO i = 1,sNx DO iarr = 1, maxCtrlTim2D #ifdef ALLOW_ATM_TEMP IF (xx_gentim2d_file(iarr)(1:8).EQ.'xx_atemp') & atemp(i,j,bi,bj)=atemp(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) IF (xx_gentim2d_file(iarr)(1:6).EQ.'xx_aqh') & aqh(i,j,bi,bj)=aqh(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_precip') & precip(i,j,bi,bj)=precip(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_lwflux') & lwflux(i,j,bi,bj)=lwflux(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) #endif #if defined(ALLOW_ATM_TEMP) defined(SHORTWAVE_HEATING) IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_swflux') & swflux(i,j,bi,bj)=swflux(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) #endif #ifdef ALLOW_DOWNWARD_RADIATION IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_swdown') & swdown(i,j,bi,bj)=swdown(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_lwdown') & lwdown(i,j,bi,bj)=lwdown(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) #endif #ifdef ALLOW_RUNOFF IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_runoff') & runoff(i,j,bi,bj)=runoff(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) #endif #ifdef EXF_READ_EVAP IF (xx_gentim2d_file(iarr)(1:7).EQ.'xx_evap') & evap(i,j,bi,bj)=evap(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) #endif #ifdef ATMOSPHERIC_LOADING IF (xx_gentim2d_file(iarr)(1:12).EQ.'xx_apressure') & apressure(i,j,bi,bj)=apressure(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) #endif #ifdef EXF_SEAICE_FRACTION IF (xx_gentim2d_file(iarr)(1:11).EQ.'xx_areamask') & areamask(i,j,bi,bj)=areamask(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) #endif #ifndef ALLOW_ROTATE_UV_CONTROLS IF (xx_gentim2d_file(iarr)(1:8).EQ.'xx_uwind') & uwind(i,j,bi,bj)=uwind(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) IF (xx_gentim2d_file(iarr)(1:8).EQ.'xx_vwind') & vwind(i,j,bi,bj)=vwind(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) #else IF (xx_gentim2d_file(iarr)(1:8).EQ.'xx_uwind') & tmpUE(i,j,bi,bj)=tmpUE(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) IF (xx_gentim2d_file(iarr)(1:8).EQ.'xx_vwind') & tmpVN(i,j,bi,bj)=tmpVN(i,j,bi,bj)+ & xx_gentim2d(i,j,bi,bj,iarr) #endif ENDDO ENDDO ENDDO ENDDO ENDDO #ifdef ALLOW_ROTATE_UV_CONTROLS CALL ROTATE_UV2EN_RL(tmpUX,tmpVY,tmpUE,tmpVN, & .FALSE.,.FALSE.,.TRUE.,1,myThid) DO bj = myByLo(myThid),myByHi(myThid) DO bi = myBxLo(myThid),mybxhi(myThid) DO j = 1,sNy DO i = 1,sNx uwind(i,j,bi,bj)=uwind(i,j,bi,bj)+tmpUX(i,j,bi,bj) vwind(i,j,bi,bj)=vwind(i,j,bi,bj)+tmpVY(i,j,bi,bj) ENDDO ENDDO ENDDO ENDDO #endif /* ALLOW_ROTATE_UV_CONTROLS */ ENDIF !if (ctrlUseGen) then #endif RETURN END