Back to home page

MITgcm

 
 

    


File indexing completed on 2023-10-13 05:10:22 UTC

view on githubraw file Latest commit edcd27be on 2023-10-12 20:00:12 UTC
6d54cf9ca1 Ed H*0001 #include "EXF_OPTIONS.h"
3a255f48df Gael*0002 #ifdef ALLOW_CTRL
                0003 # include "CTRL_OPTIONS.h"
                0004 #endif
                0005 #ifdef ALLOW_ECCO
                0006 # include "ECCO_OPTIONS.h"
                0007 #endif
9c41af81f6 Timo*0008 #ifdef ALLOW_AUTODIFF
                0009 # include "AUTODIFF_OPTIONS.h"
                0010 #endif
7f861c1808 Patr*0011 
24da7525ba Jean*0012       SUBROUTINE EXF_GETFFIELDS( myTime, myIter, myThid )
7f861c1808 Patr*0013 
24da7525ba Jean*0014 C     ==================================================================
                0015 C     SUBROUTINE exf_getffields
                0016 C     ==================================================================
                0017 C
                0018 C     o Read-in atmospheric state and/or surface fluxes from files.
                0019 C
                0020 C       heimbach@mit.edu, 23-May-2003 totally re-structured
                0021 C       5-Aug-2003: added USE_EXF_INTERPOLATION for arbitrary input grid
                0022 C
                0023 C     ==================================================================
                0024 C     SUBROUTINE exf_getffields
                0025 C     ==================================================================
7f861c1808 Patr*0026 
24da7525ba Jean*0027       IMPLICIT NONE
7f861c1808 Patr*0028 
24da7525ba Jean*0029 C     == global variables ==
7f861c1808 Patr*0030 
                0031 #include "EEPARAMS.h"
                0032 #include "SIZE.h"
                0033 #include "PARAMS.h"
                0034 #include "DYNVARS.h"
                0035 #include "GRID.h"
                0036 
082e18c36c Jean*0037 #include "EXF_PARAM.h"
                0038 #include "EXF_CONSTANTS.h"
30fcb891cf Jean*0039 #include "EXF_INTERP_SIZE.h"
                0040 #include "EXF_INTERP_PARAM.h"
                0041 #include "EXF_FIELDS.h"
7f861c1808 Patr*0042 
1a70de03d3 Gael*0043 #ifdef ALLOW_CTRL
                0044 # include "CTRL_SIZE.h"
4d72283393 Mart*0045 # include "CTRL.h"
edcd27be69 Mart*0046 # include "CTRL_DUMMY.h"
1a70de03d3 Gael*0047 # ifdef ALLOW_GENTIM2D_CONTROL
                0048 #  include "CTRL_GENARR.h"
0aa9d3ca04 Gael*0049 # endif
7109a141b2 Patr*0050 #endif
9c41af81f6 Timo*0051 #ifdef ALLOW_AUTODIFF_TAMC
                0052 # include "tamc.h"
                0053 #endif
7109a141b2 Patr*0054 
24da7525ba Jean*0055 C     == routine arguments ==
                0056       _RL     myTime
                0057       INTEGER myIter
                0058       INTEGER myThid
8ac0e9b3ce Dimi*0059 
24da7525ba Jean*0060 C     == local variables ==
                0061       INTEGER i, j, bi, bj
d7c5a72ada Gael*0062 #ifdef ALLOW_ROTATE_UV_CONTROLS
8a0f942cd7 Jean*0063       _RL     tmpUE(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0064       _RL     tmpVN(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0065       _RL     tmpUX(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
                0066       _RL     tmpVY(1-OLx:sNx+OLx,1-OLy:sNy+OLy,nSx,nSy)
d7c5a72ada Gael*0067 #endif
5815be8c7f Gael*0068 #if (defined (ALLOW_CTRL) && \
                0069      defined (ALLOW_GENTIM2D_CONTROL))
                0070       INTEGER iarr
                0071 #endif
d7c5a72ada Gael*0072 
24da7525ba Jean*0073 C     == end of interface ==
7f861c1808 Patr*0074 
24da7525ba Jean*0075 C--   read forcing fields from files and temporal interpolation
7f861c1808 Patr*0076 
8a0f942cd7 Jean*0077 C-    Zonal and meridional wind stress.
358649780a Gael*0078       IF ( .NOT.useAtmWind ) THEN
c994dbe735 Jean*0079        CALL EXF_SET_UV(
8a0f942cd7 Jean*0080      I     'ustress', ustressfile, ustressmask,
d078fa0cf5 Jean*0081      I     ustressStartTime, ustressperiod, ustressRepCycle,
4aa4270510 Jean*0082      I     exf_inscal_ustress,
                0083      I     ustress_exfremo_intercept, ustress_exfremo_slope,
8a0f942cd7 Jean*0084      U     ustress, ustress0, ustress1,
                0085      I     'vstress', vstressfile, vstressmask,
d078fa0cf5 Jean*0086      I     vstressStartTime, vstressperiod, vstressRepCycle,
4aa4270510 Jean*0087      I     exf_inscal_vstress,
                0088      I     vstress_exfremo_intercept, vstress_exfremo_slope,
8a0f942cd7 Jean*0089      U     vstress, vstress0, vstress1,
4aa4270510 Jean*0090 #ifdef USE_EXF_INTERPOLATION
                0091      I     ustress_lon0, ustress_lon_inc, ustress_lat0, ustress_lat_inc,
                0092      I     ustress_nlon, ustress_nlat, ustress_interpMethod,
                0093      I     vstress_lon0, vstress_lon_inc, vstress_lat0, vstress_lat_inc,
                0094      I     vstress_nlon, vstress_nlat, vstress_interpMethod,
9fcf422891 Jean*0095      I     uvInterp_stress,
9918f74dda Dimi*0096 #endif /* USE_EXF_INTERPOLATION */
24da7525ba Jean*0097      I     myTime, myIter, myThid )
358649780a Gael*0098       ELSE
24da7525ba Jean*0099        DO bj = myByLo(myThid),myByHi(myThid)
edf9251fd4 Jean*0100         DO bi = myBxLo(myThid),myBxHi(myThid)
24da7525ba Jean*0101          DO j=1-OLy,sNy+OLy
                0102           DO i=1-OLx,sNx+OLx
358649780a Gael*0103            ustress(i,j,bi,bj) = 0. _d 0
                0104            vstress(i,j,bi,bj) = 0. _d 0
24da7525ba Jean*0105           ENDDO
                0106          ENDDO
                0107         ENDDO
                0108        ENDDO
358649780a Gael*0109       ENDIF
7f861c1808 Patr*0110 
8a0f942cd7 Jean*0111 C-    Wind speed
                0112       CALL EXF_SET_FLD(
                0113      I     'wspeed', wspeedfile, wspeedmask,
d078fa0cf5 Jean*0114      I     wspeedStartTime, wspeedperiod, wspeedRepCycle,
8a0f942cd7 Jean*0115      I     exf_inscal_wspeed,
                0116      I     wspeed_exfremo_intercept, wspeed_exfremo_slope,
                0117      U     wspeed, wspeed0, wspeed1,
3752238fd8 Patr*0118 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0119      I     wspeed_lon0, wspeed_lon_inc,
                0120      I     wspeed_lat0, wspeed_lat_inc,
                0121      I     wspeed_nlon, wspeed_nlat, xC, yC, wspeed_interpMethod,
3752238fd8 Patr*0122 #endif
8a0f942cd7 Jean*0123      I     myTime, myIter, myThid )
3752238fd8 Patr*0124 
8a0f942cd7 Jean*0125 C-    Zonal and meridional wind.
358649780a Gael*0126       IF ( useAtmWind ) THEN
c994dbe735 Jean*0127        CALL EXF_SET_UV(
8a0f942cd7 Jean*0128      I     'uwind', uwindfile, uwindmask,
d078fa0cf5 Jean*0129      I     uwindStartTime, uwindperiod, uwindRepCycle,
9fcf422891 Jean*0130      I     exf_inscal_uwind,
                0131      I     uwind_exfremo_intercept, uwind_exfremo_slope,
8a0f942cd7 Jean*0132      U     uwind, uwind0, uwind1,
                0133      I     'vwind', vwindfile, vwindmask,
d078fa0cf5 Jean*0134      I     vwindStartTime, vwindperiod, vwindRepCycle,
9fcf422891 Jean*0135      I     exf_inscal_vwind,
                0136      I     vwind_exfremo_intercept, vwind_exfremo_slope,
8a0f942cd7 Jean*0137      U     vwind, vwind0, vwind1,
4aa4270510 Jean*0138 #ifdef USE_EXF_INTERPOLATION
9fcf422891 Jean*0139      I     uwind_lon0, uwind_lon_inc, uwind_lat0, uwind_lat_inc,
                0140      I     uwind_nlon, uwind_nlat, uwind_interpMethod,
                0141      I     vwind_lon0, vwind_lon_inc, vwind_lat0, vwind_lat_inc,
                0142      I     vwind_nlon, vwind_nlat, vwind_interpMethod, uvInterp_wind,
8ac0e9b3ce Dimi*0143 #endif /* USE_EXF_INTERPOLATION */
24da7525ba Jean*0144      I     myTime, myIter, myThid )
7f861c1808 Patr*0145 
358649780a Gael*0146       ELSE
24da7525ba Jean*0147        DO bj = myByLo(myThid),myByHi(myThid)
edf9251fd4 Jean*0148         DO bi = myBxLo(myThid),myBxHi(myThid)
24da7525ba Jean*0149          DO j=1-OLy,sNy+OLy
                0150           DO i=1-OLx,sNx+OLx
358649780a Gael*0151            uwind(i,j,bi,bj) = 0. _d 0
                0152            vwind(i,j,bi,bj) = 0. _d 0
24da7525ba Jean*0153           ENDDO
                0154          ENDDO
                0155         ENDDO
                0156        ENDDO
358649780a Gael*0157       ENDIF
7f861c1808 Patr*0158 
8a0f942cd7 Jean*0159 C-    Atmospheric heat flux.
                0160       CALL EXF_SET_FLD(
                0161      I     'hflux', hfluxfile, hfluxmask,
d078fa0cf5 Jean*0162      I     hfluxStartTime, hfluxperiod, hfluxRepCycle,
8a0f942cd7 Jean*0163      I     exf_inscal_hflux,
                0164      I     hflux_exfremo_intercept, hflux_exfremo_slope,
                0165      U     hflux, hflux0, hflux1,
981f32514d Dimi*0166 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0167      I     hflux_lon0, hflux_lon_inc, hflux_lat0, hflux_lat_inc,
                0168      I     hflux_nlon, hflux_nlat, xC, yC, hflux_interpMethod,
9918f74dda Dimi*0169 #endif
8a0f942cd7 Jean*0170      I     myTime, myIter, myThid )
                0171 
                0172 C-    Freshwater flux.
                0173       CALL EXF_SET_FLD(
                0174      I     'sflux', sfluxfile, sfluxmask,
d078fa0cf5 Jean*0175      I     sfluxStartTime, sfluxperiod, sfluxRepCycle,
8a0f942cd7 Jean*0176      I     exf_inscal_sflux,
                0177      I     sflux_exfremo_intercept, sflux_exfremo_slope,
                0178      U     sflux, sflux0, sflux1,
9918f74dda Dimi*0179 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0180      I     sflux_lon0, sflux_lon_inc, sflux_lat0, sflux_lat_inc,
                0181      I     sflux_nlon, sflux_nlat, xC, yC, sflux_interpMethod,
9918f74dda Dimi*0182 #endif
8a0f942cd7 Jean*0183      I     myTime, myIter, myThid )
7f861c1808 Patr*0184 
6060ec2938 Dimi*0185 #ifdef ALLOW_ATM_TEMP
7f861c1808 Patr*0186 
8a0f942cd7 Jean*0187 C-    Atmospheric temperature.
                0188       CALL EXF_SET_FLD(
                0189      I     'atemp', atempfile, atempmask,
d078fa0cf5 Jean*0190      I     atempStartTime, atempperiod, atempRepCycle,
8a0f942cd7 Jean*0191      I     exf_inscal_atemp,
                0192      I     atemp_exfremo_intercept, atemp_exfremo_slope,
                0193      U     atemp, atemp0, atemp1,
981f32514d Dimi*0194 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0195      I     atemp_lon0, atemp_lon_inc, atemp_lat0, atemp_lat_inc,
                0196      I     atemp_nlon, atemp_nlat, xC, yC, atemp_interpMethod,
981f32514d Dimi*0197 #endif
8a0f942cd7 Jean*0198      I     myTime, myIter, myThid )
24da7525ba Jean*0199       DO bj = myByLo(myThid),myByHi(myThid)
edf9251fd4 Jean*0200        DO bi = myBxLo(myThid),myBxHi(myThid)
24da7525ba Jean*0201         DO j = 1,sNy
                0202          DO i = 1,sNx
4bf6063982 Patr*0203           atemp(i,j,bi,bj) = atemp(i,j,bi,bj) + exf_offset_atemp
24da7525ba Jean*0204          ENDDO
                0205         ENDDO
                0206        ENDDO
                0207       ENDDO
7f861c1808 Patr*0208 
8a0f942cd7 Jean*0209 C-    Atmospheric humidity.
                0210       CALL EXF_SET_FLD(
                0211      I     'aqh', aqhfile, aqhmask,
d078fa0cf5 Jean*0212      I     aqhStartTime, aqhperiod, aqhRepCycle,
8a0f942cd7 Jean*0213      I     exf_inscal_aqh,
                0214      I     aqh_exfremo_intercept, aqh_exfremo_slope,
                0215      U     aqh, aqh0, aqh1,
981f32514d Dimi*0216 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0217      I     aqh_lon0, aqh_lon_inc, aqh_lat0, aqh_lat_inc,
                0218      I     aqh_nlon, aqh_nlat, xC, yC, aqh_interpMethod,
981f32514d Dimi*0219 #endif
8a0f942cd7 Jean*0220      I     myTime, myIter, myThid )
7f861c1808 Patr*0221 
c994dbe735 Jean*0222 # ifdef ALLOW_READ_TURBFLUXES
                0223 
8a0f942cd7 Jean*0224 C-    Sensible Heat flux
                0225       CALL EXF_SET_FLD(
                0226      I     'hs', hs_file, hs_mask,
d078fa0cf5 Jean*0227      I     hs_StartTime, hs_period, hs_RepCycle,
8a0f942cd7 Jean*0228      I     exf_inscal_hs,
                0229      I     hs_exfremo_intercept, hs_exfremo_slope,
                0230      U     hs, hs0, hs1,
c994dbe735 Jean*0231 #  ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0232      I     hs_lon0, hs_lon_inc, hs_lat0, hs_lat_inc,
                0233      I     hs_nlon, hs_nlat, xC, yC, hs_interpMethod,
c994dbe735 Jean*0234 #  endif
8a0f942cd7 Jean*0235      I     myTime, myIter, myThid )
                0236 
                0237 C-    Latent Heat flux
                0238       CALL EXF_SET_FLD(
                0239      I     'hl', hl_file, hl_mask,
d078fa0cf5 Jean*0240      I     hl_StartTime, hl_period, hl_RepCycle,
8a0f942cd7 Jean*0241      I     exf_inscal_hl,
                0242      I     hl_exfremo_intercept, hl_exfremo_slope,
                0243      U     hl, hl0, hl1,
c994dbe735 Jean*0244 #  ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0245      I     hl_lon0, hl_lon_inc, hl_lat0, hl_lat_inc,
                0246      I     hl_nlon, hl_nlat, xC, yC, hl_interpMethod,
c994dbe735 Jean*0247 #  endif
8a0f942cd7 Jean*0248      I     myTime, myIter, myThid )
c994dbe735 Jean*0249 
                0250 # endif /* ALLOW_READ_TURBFLUXES */
                0251 
8a0f942cd7 Jean*0252 C-    Net long wave radiative flux.
                0253       CALL EXF_SET_FLD(
                0254      I     'lwflux', lwfluxfile, lwfluxmask,
d078fa0cf5 Jean*0255      I     lwfluxStartTime, lwfluxperiod, lwfluxRepCycle,
8a0f942cd7 Jean*0256      I     exf_inscal_lwflux,
                0257      I     lwflux_exfremo_intercept, lwflux_exfremo_slope,
                0258      U     lwflux, lwflux0, lwflux1,
981f32514d Dimi*0259 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0260      I     lwflux_lon0, lwflux_lon_inc, lwflux_lat0, lwflux_lat_inc,
                0261      I     lwflux_nlon, lwflux_nlat, xC, yC, lwflux_interpMethod,
981f32514d Dimi*0262 #endif
8a0f942cd7 Jean*0263      I     myTime, myIter, myThid )
87681ef93a Patr*0264 
26f6b8243e Jean*0265 #ifdef EXF_READ_EVAP
8a0f942cd7 Jean*0266 C-    Evaporation
                0267       CALL EXF_SET_FLD(
                0268      I     'evap', evapfile, evapmask,
d078fa0cf5 Jean*0269      I     evapStartTime, evapperiod, evapRepCycle,
8a0f942cd7 Jean*0270      I     exf_inscal_evap,
                0271      I     evap_exfremo_intercept, evap_exfremo_slope,
                0272      U     evap, evap0, evap1,
26f6b8243e Jean*0273 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0274      I     evap_lon0, evap_lon_inc, evap_lat0, evap_lat_inc,
                0275      I     evap_nlon, evap_nlat, xC, yC, evap_interpMethod,
26f6b8243e Jean*0276 #endif
8a0f942cd7 Jean*0277      I     myTime, myIter, myThid )
26f6b8243e Jean*0278 #endif /* EXF_READ_EVAP */
                0279 
8a0f942cd7 Jean*0280 C-    Precipitation.
                0281       CALL EXF_SET_FLD(
                0282      I     'precip', precipfile, precipmask,
d078fa0cf5 Jean*0283      I     precipStartTime, precipperiod, precipRepCycle,
8a0f942cd7 Jean*0284      I     exf_inscal_precip,
                0285      I     precip_exfremo_intercept, precip_exfremo_slope,
                0286      U     precip, precip0, precip1,
981f32514d Dimi*0287 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0288      I     precip_lon0, precip_lon_inc, precip_lat0, precip_lat_inc,
                0289      I     precip_nlon, precip_nlat, xC, yC, precip_interpMethod,
981f32514d Dimi*0290 #endif
8a0f942cd7 Jean*0291      I     myTime, myIter, myThid )
                0292 
                0293 C-    Snow.
                0294       CALL EXF_SET_FLD(
                0295      I     'snowprecip', snowprecipfile, snowprecipmask,
d078fa0cf5 Jean*0296      I     snowprecipStartTime, snowprecipperiod, snowprecipRepCycle,
8a0f942cd7 Jean*0297      I     exf_inscal_snowprecip,
                0298      I     snowprecip_exfremo_intercept, snowprecip_exfremo_slope,
                0299      U     snowprecip, snowprecip0, snowprecip1,
3752238fd8 Patr*0300 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0301      I     snowprecip_lon0, snowprecip_lon_inc,
                0302      I     snowprecip_lat0, snowprecip_lat_inc,
                0303      I     snowprecip_nlon, snowprecip_nlat, xC, yC,
                0304      I     snowprecip_interpMethod,
3752238fd8 Patr*0305 #endif
8a0f942cd7 Jean*0306      I     myTime, myIter, myThid )
24da7525ba Jean*0307 C     Take care of case where total precip is not defined
9c41af81f6 Timo*0308 #ifdef ALLOW_AUTODIFF_TAMC
                0309 # ifdef ALLOW_ATM_TEMP
                0310 CADJ STORE precip      = comlev1, key=ikey_dynamics, kind=isbyte
                0311 CADJ STORE snowprecip  = comlev1, key=ikey_dynamics, kind=isbyte
                0312 # endif
                0313 #endif
12e7259f06 Dimi*0314       IF ( snowPrecipFile .NE. ' ' ) THEN
24da7525ba Jean*0315        DO bj = myByLo(myThid),myByHi(myThid)
edf9251fd4 Jean*0316         DO bi = myBxLo(myThid),myBxHi(myThid)
24da7525ba Jean*0317          DO j = 1,sNy
                0318           DO i = 1,sNx
12e7259f06 Dimi*0319            precip(i,j,bi,bj) =
8a0f942cd7 Jean*0320      &          MAX( precip(i,j,bi,bj), snowPrecip(i,j,bi,bj) )
24da7525ba Jean*0321           ENDDO
                0322          ENDDO
                0323         ENDDO
                0324        ENDDO
12e7259f06 Dimi*0325       ENDIF
3752238fd8 Patr*0326 
9918f74dda Dimi*0327 #endif /* ALLOW_ATM_TEMP */
7f861c1808 Patr*0328 
6060ec2938 Dimi*0329 #if defined(ALLOW_ATM_TEMP) || defined(SHORTWAVE_HEATING)
8a0f942cd7 Jean*0330 C-    Net short wave radiative flux.
                0331       CALL EXF_SET_FLD(
                0332      I     'swflux', swfluxfile, swfluxmask,
d078fa0cf5 Jean*0333      I     swfluxStartTime, swfluxperiod, swfluxRepCycle,
8a0f942cd7 Jean*0334      I     exf_inscal_swflux,
                0335      I     swflux_exfremo_intercept, swflux_exfremo_slope,
                0336      U     swflux, swflux0, swflux1,
981f32514d Dimi*0337 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0338      I     swflux_lon0, swflux_lon_inc, swflux_lat0, swflux_lat_inc,
                0339      I     swflux_nlon, swflux_nlat, xC, yC, swflux_interpMethod,
981f32514d Dimi*0340 #endif
8a0f942cd7 Jean*0341      I     myTime, myIter, myThid )
87681ef93a Patr*0342 #endif
7f861c1808 Patr*0343 
6060ec2938 Dimi*0344 #ifdef ALLOW_DOWNWARD_RADIATION
                0345 
8a0f942cd7 Jean*0346 C-    Downward shortwave radiation.
                0347       CALL EXF_SET_FLD(
                0348      I     'swdown', swdownfile, swdownmask,
d078fa0cf5 Jean*0349      I     swdownStartTime, swdownperiod, swdownRepCycle,
8a0f942cd7 Jean*0350      I     exf_inscal_swdown,
                0351      I     swdown_exfremo_intercept, swdown_exfremo_slope,
                0352      U     swdown, swdown0, swdown1,
981f32514d Dimi*0353 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0354      I     swdown_lon0, swdown_lon_inc, swdown_lat0, swdown_lat_inc,
                0355      I     swdown_nlon, swdown_nlat, xC, yC, swdown_interpMethod,
981f32514d Dimi*0356 #endif
8a0f942cd7 Jean*0357      I     myTime, myIter, myThid )
                0358 
                0359 C-    Downward longwave radiation.
                0360       CALL EXF_SET_FLD(
                0361      I     'lwdown', lwdownfile, lwdownmask,
d078fa0cf5 Jean*0362      I     lwdownStartTime, lwdownperiod, lwdownRepCycle,
8a0f942cd7 Jean*0363      I     exf_inscal_lwdown,
                0364      I     lwdown_exfremo_intercept, lwdown_exfremo_slope,
                0365      U     lwdown, lwdown0, lwdown1,
981f32514d Dimi*0366 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0367      I     lwdown_lon0, lwdown_lon_inc, lwdown_lat0, lwdown_lat_inc,
                0368      I     lwdown_nlon, lwdown_nlat, xC, yC, lwdown_interpMethod,
981f32514d Dimi*0369 #endif
8a0f942cd7 Jean*0370      I     myTime, myIter, myThid )
6060ec2938 Dimi*0371 
c994dbe735 Jean*0372 #endif /* ALLOW_DOWNWARD_RADIATION */
6060ec2938 Dimi*0373 
bf75ed79ba Patr*0374 #ifdef ATMOSPHERIC_LOADING
8a0f942cd7 Jean*0375 C-    Atmos. pressure forcing
                0376       CALL EXF_SET_FLD(
                0377      I     'apressure', apressurefile, apressuremask,
d078fa0cf5 Jean*0378      I     apressureStartTime, apressureperiod, apressureRepCycle,
8a0f942cd7 Jean*0379      I     exf_inscal_apressure,
                0380      I     apressure_exfremo_intercept, apressure_exfremo_slope,
                0381      U     apressure, apressure0, apressure1,
981f32514d Dimi*0382 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0383      I     apressure_lon0, apressure_lon_inc,
                0384      I     apressure_lat0, apressure_lat_inc,
                0385      I     apressure_nlon,apressure_nlat,xC,yC, apressure_interpMethod,
981f32514d Dimi*0386 #endif
8a0f942cd7 Jean*0387      I     myTime, myIter, myThid )
190e1777cb Dimi*0388 #endif
                0389 
497d85062c Jean*0390 #ifdef EXF_ALLOW_TIDES
                0391 C-    Tidal geopotential
                0392       CALL EXF_SET_FLD(
                0393      I     'tidePot', tidePotFile, tidePotMask,
                0394      I     tidePotStartTime, tidePotPeriod, tidePotRepCycle,
                0395      I     exf_inscal_tidePot,
                0396      I     tidePot_exfremo_intercept, tidePot_exfremo_slope,
                0397      U     tidePot, tidePot0, tidePot1,
                0398 #ifdef USE_EXF_INTERPOLATION
                0399      I     tidePot_lon0, tidePot_lon_inc,
                0400      I     tidePot_lat0, tidePot_lat_inc,
                0401      I     tidePot_nlon, tidePot_nlat, xC, yC, tidePot_interpMethod,
                0402 #endif
                0403      I     myTime, myIter, myThid )
                0404 #endif /* EXF_ALLOW_TIDES */
                0405 
24da7525ba Jean*0406 #ifdef EXF_SEAICE_FRACTION
8a0f942cd7 Jean*0407 C-    fractional ice-covered area mask
                0408       CALL EXF_SET_FLD(
                0409      I     'areamask', areamaskfile, areamaskmask,
d078fa0cf5 Jean*0410      I     areamaskStartTime, areamaskperiod, areamaskRepCycle,
8a0f942cd7 Jean*0411      I     exf_inscal_areamask,
                0412      I     areamask_exfremo_intercept, areamask_exfremo_slope,
                0413      U     areamask, areamask0, areamask1,
8f277f2728 Gael*0414 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0415      I     areamask_lon0, areamask_lon_inc,
                0416      I     areamask_lat0, areamask_lat_inc,
                0417      I     areamask_nlon, areamask_nlat, xC, yC, areamask_interpMethod,
8f277f2728 Gael*0418 #endif
8a0f942cd7 Jean*0419      I     myTime, myIter, myThid )
8f277f2728 Gael*0420 #endif
                0421 
a0e99e946e Jean*0422 #ifdef ALLOW_RUNOFF
8a0f942cd7 Jean*0423 C-    Runoff
                0424       CALL EXF_SET_FLD(
                0425      I     'runoff', runofffile, runoffmask,
d078fa0cf5 Jean*0426      I     runoffStartTime, runoffperiod, runoffRepCycle,
8a0f942cd7 Jean*0427      I     exf_inscal_runoff,
                0428      I     runoff_exfremo_intercept, runoff_exfremo_slope,
                0429      U     runoff, runoff0, runoff1,
58d34f56b6 Dimi*0430 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0431      I     runoff_lon0, runoff_lon_inc, runoff_lat0, runoff_lat_inc,
                0432      I     runoff_nlon, runoff_nlat, xC, yC, runoff_interpMethod,
58d34f56b6 Dimi*0433 #endif
8a0f942cd7 Jean*0434      I     myTime, myIter, myThid )
4aa4270510 Jean*0435 #endif /* ALLOW_RUNOFF */
58d34f56b6 Dimi*0436 
e603dbf008 Dimi*0437 #ifdef ALLOW_RUNOFTEMP
8a0f942cd7 Jean*0438 C-    Runoff temperature
                0439       CALL EXF_SET_FLD(
                0440      I     'runoftemp', runoftempfile, runoffmask,
d078fa0cf5 Jean*0441      I     runoffStartTime, runoffperiod, runoffRepCycle,
8a0f942cd7 Jean*0442      I     exf_inscal_runoftemp,
                0443      I     runoftemp_exfremo_intercept, runoftemp_exfremo_slope,
                0444      U     runoftemp, runoftemp0, runoftemp1,
e603dbf008 Dimi*0445 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0446      I     runoff_lon0, runoff_lon_inc, runoff_lat0, runoff_lat_inc,
                0447      I     runoff_nlon, runoff_nlat, xC, yC, runoff_interpMethod,
e603dbf008 Dimi*0448 #endif
8a0f942cd7 Jean*0449      I     myTime, myIter, myThid )
e603dbf008 Dimi*0450 #endif /* ALLOW_RUNOFTEMP */
                0451 
a66aad0124 Gael*0452 #ifdef ALLOW_SALTFLX
8a0f942cd7 Jean*0453 C-    Salt flux
                0454       CALL EXF_SET_FLD(
                0455      I     'saltflx', saltflxfile, saltflxmask,
d078fa0cf5 Jean*0456      I     saltflxStartTime, saltflxperiod, saltflxRepCycle,
8a0f942cd7 Jean*0457      I     exf_inscal_saltflx,
                0458      I     saltflx_exfremo_intercept, saltflx_exfremo_slope,
                0459      U     saltflx, saltflx0, saltflx1,
a66aad0124 Gael*0460 #ifdef USE_EXF_INTERPOLATION
8a0f942cd7 Jean*0461      I     saltflx_lon0, saltflx_lon_inc,
                0462      I     saltflx_lat0, saltflx_lat_inc,
                0463      I     saltflx_nlon, saltflx_nlat, xC, yC, saltflx_interpMethod,
a66aad0124 Gael*0464 #endif
8a0f942cd7 Jean*0465      I     myTime, myIter, myThid )
a66aad0124 Gael*0466 #endif
                0467 
bd42b44f7b Gael*0468 #ifdef ALLOW_ROTATE_UV_CONTROLS
c994dbe735 Jean*0469       IF ( useCTRL ) THEN
bd42b44f7b Gael*0470         DO bj = myByLo(myThid),myByHi(myThid)
edf9251fd4 Jean*0471          DO bi = myBxLo(myThid),myBxHi(myThid)
bd42b44f7b Gael*0472           DO j = 1-OLy,sNy+OLy
                0473            DO i = 1-OLx,sNx+OLx
                0474              tmpUE(i,j,bi,bj) = 0. _d 0
                0475              tmpVN(i,j,bi,bj) = 0. _d 0
                0476              tmpUX(i,j,bi,bj) = 0. _d 0
                0477              tmpVY(i,j,bi,bj) = 0. _d 0
                0478            ENDDO
                0479           ENDDO
                0480          ENDDO
                0481         ENDDO
c994dbe735 Jean*0482       ENDIF
bd42b44f7b Gael*0483 #endif
                0484 
b533b6175f Gael*0485 #if (defined (ALLOW_CTRL) && defined (ALLOW_GENTIM2D_CONTROL))
cf705a6c8e Mart*0486       IF ( useCTRL ) THEN
c994dbe735 Jean*0487        DO bj = myByLo(myThid),myByHi(myThid)
edf9251fd4 Jean*0488        DO bi = myBxLo(myThid),myBxHi(myThid)
5815be8c7f Gael*0489         DO j = 1,sNy
                0490          DO i = 1,sNx
c994dbe735 Jean*0491           DO iarr = 1, maxCtrlTim2D
b939965590 Gael*0492 #ifdef ALLOW_ATM_TEMP
c994dbe735 Jean*0493            IF (xx_gentim2d_file(iarr)(1:8).EQ.'xx_atemp')
5815be8c7f Gael*0494      &       atemp(i,j,bi,bj)=atemp(i,j,bi,bj)+
                0495      &                         xx_gentim2d(i,j,bi,bj,iarr)
c994dbe735 Jean*0496            IF (xx_gentim2d_file(iarr)(1:6).EQ.'xx_aqh')
5815be8c7f Gael*0497      &       aqh(i,j,bi,bj)=aqh(i,j,bi,bj)+
                0498      &                         xx_gentim2d(i,j,bi,bj,iarr)
c994dbe735 Jean*0499            IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_precip')
b939965590 Gael*0500      &       precip(i,j,bi,bj)=precip(i,j,bi,bj)+
                0501      &                         xx_gentim2d(i,j,bi,bj,iarr)
11c3150c71 Mart*0502            IF (xx_gentim2d_file(iarr)(1:13).EQ.'xx_snowprecip')
                0503      &       snowprecip(i,j,bi,bj)=snowprecip(i,j,bi,bj)+
                0504      &                         xx_gentim2d(i,j,bi,bj,iarr)
c994dbe735 Jean*0505            IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_lwflux')
2ee8c2c785 Gael*0506      &       lwflux(i,j,bi,bj)=lwflux(i,j,bi,bj)+
                0507      &                         xx_gentim2d(i,j,bi,bj,iarr)
                0508 #endif
                0509 #if defined(ALLOW_ATM_TEMP) || defined(SHORTWAVE_HEATING)
c994dbe735 Jean*0510            IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_swflux')
2ee8c2c785 Gael*0511      &       swflux(i,j,bi,bj)=swflux(i,j,bi,bj)+
                0512      &                         xx_gentim2d(i,j,bi,bj,iarr)
b939965590 Gael*0513 #endif
                0514 #ifdef ALLOW_DOWNWARD_RADIATION
c994dbe735 Jean*0515            IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_swdown')
5815be8c7f Gael*0516      &       swdown(i,j,bi,bj)=swdown(i,j,bi,bj)+
                0517      &                         xx_gentim2d(i,j,bi,bj,iarr)
c994dbe735 Jean*0518            IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_lwdown')
5815be8c7f Gael*0519      &       lwdown(i,j,bi,bj)=lwdown(i,j,bi,bj)+
                0520      &                         xx_gentim2d(i,j,bi,bj,iarr)
b939965590 Gael*0521 #endif
2ee8c2c785 Gael*0522 #ifdef ALLOW_RUNOFF
c994dbe735 Jean*0523            IF (xx_gentim2d_file(iarr)(1:9).EQ.'xx_runoff')
5d131af478 An T*0524      &       runoff(i,j,bi,bj)=runoff(i,j,bi,bj)+
                0525      &                         xx_gentim2d(i,j,bi,bj,iarr)
2ee8c2c785 Gael*0526 #endif
                0527 #ifdef EXF_READ_EVAP
c994dbe735 Jean*0528            IF (xx_gentim2d_file(iarr)(1:7).EQ.'xx_evap')
2ee8c2c785 Gael*0529      &       evap(i,j,bi,bj)=evap(i,j,bi,bj)+
                0530      &                         xx_gentim2d(i,j,bi,bj,iarr)
                0531 #endif
                0532 #ifdef ATMOSPHERIC_LOADING
c994dbe735 Jean*0533            IF (xx_gentim2d_file(iarr)(1:12).EQ.'xx_apressure')
2ee8c2c785 Gael*0534      &       apressure(i,j,bi,bj)=apressure(i,j,bi,bj)+
                0535      &                         xx_gentim2d(i,j,bi,bj,iarr)
                0536 #endif
                0537 #ifdef EXF_SEAICE_FRACTION
c994dbe735 Jean*0538            IF (xx_gentim2d_file(iarr)(1:11).EQ.'xx_areamask')
2ee8c2c785 Gael*0539      &       areamask(i,j,bi,bj)=areamask(i,j,bi,bj)+
                0540      &                         xx_gentim2d(i,j,bi,bj,iarr)
                0541 #endif
bd42b44f7b Gael*0542 #ifndef ALLOW_ROTATE_UV_CONTROLS
c994dbe735 Jean*0543            IF (xx_gentim2d_file(iarr)(1:8).EQ.'xx_uwind')
bd42b44f7b Gael*0544      &       uwind(i,j,bi,bj)=uwind(i,j,bi,bj)+
                0545      &                         xx_gentim2d(i,j,bi,bj,iarr)
c994dbe735 Jean*0546            IF (xx_gentim2d_file(iarr)(1:8).EQ.'xx_vwind')
bd42b44f7b Gael*0547      &       vwind(i,j,bi,bj)=vwind(i,j,bi,bj)+
                0548      &                         xx_gentim2d(i,j,bi,bj,iarr)
                0549 #else
c994dbe735 Jean*0550            IF (xx_gentim2d_file(iarr)(1:8).EQ.'xx_uwind')
c4ea186aec Gael*0551      &       tmpUE(i,j,bi,bj)=tmpUE(i,j,bi,bj)+
bd42b44f7b Gael*0552      &                         xx_gentim2d(i,j,bi,bj,iarr)
c994dbe735 Jean*0553            IF (xx_gentim2d_file(iarr)(1:8).EQ.'xx_vwind')
c4ea186aec Gael*0554      &       tmpVN(i,j,bi,bj)=tmpVN(i,j,bi,bj)+
bd42b44f7b Gael*0555      &                         xx_gentim2d(i,j,bi,bj,iarr)
                0556 #endif
c994dbe735 Jean*0557           ENDDO
5815be8c7f Gael*0558          ENDDO
                0559         ENDDO
                0560        ENDDO
c994dbe735 Jean*0561        ENDDO
bd42b44f7b Gael*0562 #ifdef ALLOW_ROTATE_UV_CONTROLS
c994dbe735 Jean*0563        CALL ROTATE_UV2EN_RL(tmpUX,tmpVY,tmpUE,tmpVN,
                0564      &      .FALSE.,.FALSE.,.TRUE.,1,myThid)
bd42b44f7b Gael*0565 
                0566        DO bj = myByLo(myThid),myByHi(myThid)
edf9251fd4 Jean*0567          DO bi = myBxLo(myThid),myBxHi(myThid)
bd42b44f7b Gael*0568           DO j = 1,sNy
                0569            DO i = 1,sNx
                0570              uwind(i,j,bi,bj)=uwind(i,j,bi,bj)+tmpUX(i,j,bi,bj)
                0571              vwind(i,j,bi,bj)=vwind(i,j,bi,bj)+tmpVY(i,j,bi,bj)
                0572            ENDDO
                0573           ENDDO
                0574          ENDDO
                0575        ENDDO
                0576 #endif /* ALLOW_ROTATE_UV_CONTROLS */
                0577 
cf705a6c8e Mart*0578       ENDIF !if (useCTRL) then
5815be8c7f Gael*0579 #endif
                0580 
4aa4270510 Jean*0581       RETURN
                0582       END