Back to home page

MITgcm

 
 

    


File indexing completed on 2025-09-19 05:08:16 UTC

view on githubraw file Latest commit c3be0435 on 2025-09-18 18:40:16 UTC
0d7eb15592 Jean*0001 #include "AUTODIFF_OPTIONS.h"
bead363026 Jean*0002 #ifdef ALLOW_CTRL
                0003 # include "CTRL_OPTIONS.h"
                0004 #endif
5728d4a98b Patr*0005 #ifdef ALLOW_OBCS
                0006 # include "OBCS_OPTIONS.h"
                0007 #endif
                0008 #ifdef ALLOW_SEAICE
                0009 # include "SEAICE_OPTIONS.h"
                0010 #endif
bf759c6109 Gael*0011 #ifdef ALLOW_EXF
                0012 # include "EXF_OPTIONS.h"
                0013 #endif
5728d4a98b Patr*0014 
6fe4379e6f Jean*0015       SUBROUTINE AUTODIFF_RESTORE( myThid )
5728d4a98b Patr*0016 
cda1c18f72 Jean*0017 C     ==================================================================
                0018 C     SUBROUTINE autodiff_restore
                0019 C     ==================================================================
                0020 C
                0021 C     packing for checkpoint storage
                0022 C
                0023 C     started: Matt Mazloff mmazloff@mit.edu 03-May-2007
                0024 C
                0025 C     ==================================================================
                0026 C     SUBROUTINE autodiff_restore
                0027 C     ==================================================================
5728d4a98b Patr*0028 
7b94249161 Jean*0029       IMPLICIT NONE
5728d4a98b Patr*0030 
cda1c18f72 Jean*0031 C     == global variables ==
5728d4a98b Patr*0032 
                0033 #include "SIZE.h"
                0034 #include "EEPARAMS.h"
                0035 #include "PARAMS.h"
cda1c18f72 Jean*0036 C**************************************
                0037 C These includes are needed for
                0038 C AD-checkpointing.
                0039 C They provide the fields to be stored.
5728d4a98b Patr*0040 
56a89d1ef6 Mart*0041 #include "GRID.h"
                0042 #include "DYNVARS.h"
                0043 #include "FFIELDS.h"
                0044 #include "SURFACE.h"
5728d4a98b Patr*0045 
e28d7f2731 Gael*0046 #ifdef ALLOW_OBCS
af61e5eb16 Mart*0047 # include "OBCS_PARAMS.h"
e28d7f2731 Gael*0048 # include "OBCS_FIELDS.h"
                0049 # include "OBCS_SEAICE.h"
                0050 #endif
                0051 #ifdef ALLOW_EXF
                0052 # include "EXF_FIELDS.h"
                0053 # ifdef ALLOW_BULKFORMULAE
                0054 #  include "EXF_CONSTANTS.h"
5728d4a98b Patr*0055 # endif
e28d7f2731 Gael*0056 #endif /* ALLOW_EXF */
                0057 #ifdef ALLOW_SEAICE
                0058 # include "SEAICE_SIZE.h"
                0059 # include "SEAICE.h"
                0060 #endif
                0061 #ifdef ALLOW_CTRL
5cf4364659 Mart*0062 # include "CTRL_SIZE.h"
4d72283393 Mart*0063 # include "CTRL.h"
e28d7f2731 Gael*0064 # include "CTRL_OBCS.h"
                0065 #endif
cda1c18f72 Jean*0066 C     it is important that this file is included after SEAICE_SIZE.h
56a89d1ef6 Mart*0067 #include "AUTODIFF_STORE.h"
5728d4a98b Patr*0068 
cda1c18f72 Jean*0069 C     == routine arguments ==
                0070 C     myThid   :: my Thread Id number
6fe4379e6f Jean*0071       INTEGER myThid
5728d4a98b Patr*0072 
a47c7bbdd2 Mart*0073 #ifdef ALLOW_AUTODIFF_TAMC
cda1c18f72 Jean*0074 C     == local variables ==
                0075 #if ( defined AUTODIFF_USE_STORE_RESTORE || \
                0076      ( defined ALLOW_OBCS && defined AUTODIFF_USE_STORE_RESTORE_OBCS ))
                0077       INTEGER bi, bj
                0078       INTEGER I, J, K
                0079 #endif
                0080 C--   == end of interface ==
5728d4a98b Patr*0081 
b167b0379c Patr*0082 #ifdef ALLOW_DEBUG
862d160a2f Jean*0083       IF ( debugMode ) CALL DEBUG_ENTER('AUTODIFF_RESTORE',myThid)
5728d4a98b Patr*0084 #endif
0d7eb15592 Jean*0085 
3c775cbf98 Mart*0086 #ifdef AUTODIFF_USE_STORE_RESTORE
5728d4a98b Patr*0087 C--   Over all tiles
                0088       DO bj = myByLo(myThid), myByHi(myThid)
                0089        DO bi = myBxLo(myThid), myBxHi(myThid)
                0090 C-      2D arrays
e4f1c09db9 Jean*0091         DO J=1-OLy,sNy+OLy
                0092          DO I=1-OLx,sNx+OLx
f255f6c083 Jean*0093           etaN(I,J,bi,bj)  = StoreDynVars2D(I,J,bi,bj,1)
                0094           taux0(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,2)
                0095           taux1(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,3)
                0096           tauy0(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,4)
                0097           tauy1(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,5)
                0098           qnet0(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,6)
                0099           qnet1(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,7)
                0100           empmr0(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,8)
                0101           empmr1(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,9)
                0102           sst0(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,10)
                0103           sst1(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,11)
                0104           sss0(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,12)
                0105           sss1(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,13)
                0106           saltflux0(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,14)
                0107           saltflux1(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,15)
5728d4a98b Patr*0108 #ifdef SHORTWAVE_HEATING
f255f6c083 Jean*0109           qsw0(I,J,bi,bj)    = StoreDynVars2D(I,J,bi,bj,16)
                0110           qsw1(I,J,bi,bj)    = StoreDynVars2D(I,J,bi,bj,17)
5728d4a98b Patr*0111 #endif
                0112 #ifdef ATMOSPHERIC_LOADING
f255f6c083 Jean*0113           pload0(I,J,bi,bj)  = StoreDynVars2D(I,J,bi,bj,18)
                0114           pload1(I,J,bi,bj)  = StoreDynVars2D(I,J,bi,bj,19)
5728d4a98b Patr*0115 #endif
f255f6c083 Jean*0116           etaH(I,J,bi,bj)    = StoreDynVars2D(I,J,bi,bj,20)
                0117           dEtaHdt(I,J,bi,bj) = StoreDynVars2D(I,J,bi,bj,21)
                0118           PmEpR(I,J,bi,bj)   = StoreDynVars2D(I,J,bi,bj,22)
5728d4a98b Patr*0119          ENDDO
                0120         ENDDO
3c775cbf98 Mart*0121        ENDDO
                0122       ENDDO
c5c9d716eb Patr*0123 
3c775cbf98 Mart*0124 C--   Over all tiles
                0125       DO bj = myByLo(myThid), myByHi(myThid)
                0126        DO bi = myBxLo(myThid), myBxHi(myThid)
5728d4a98b Patr*0127 C-      3D arrays
                0128         DO K=1,Nr
e4f1c09db9 Jean*0129          DO J=1-OLy,sNy+OLy
                0130           DO I=1-OLx,sNx+OLx
507fbacc22 Gael*0131 #ifdef ALLOW_ADAMSBASHFORTH_3
e4f1c09db9 Jean*0132            gtNm(I,J,K,bi,bj,1)   = StoreDynVars3D(I,J,K,bi,bj,1)
                0133            gsNm(I,J,K,bi,bj,1)   = StoreDynVars3D(I,J,K,bi,bj,2)
                0134            guNm(I,J,K,bi,bj,1)   = StoreDynVars3D(I,J,K,bi,bj,3)
                0135            gvNm(I,J,K,bi,bj,1)   = StoreDynVars3D(I,J,K,bi,bj,4)
507fbacc22 Gael*0136 #else
e4f1c09db9 Jean*0137            gtNm1(I,J,K,bi,bj)    = StoreDynVars3D(I,J,K,bi,bj,1)
                0138            gsNm1(I,J,K,bi,bj)    = StoreDynVars3D(I,J,K,bi,bj,2)
                0139            guNm1(I,J,K,bi,bj)    = StoreDynVars3D(I,J,K,bi,bj,3)
                0140            gvNm1(I,J,K,bi,bj)    = StoreDynVars3D(I,J,K,bi,bj,4)
507fbacc22 Gael*0141 #endif
e4f1c09db9 Jean*0142            theta(I,J,K,bi,bj)    = StoreDynVars3D(I,J,K,bi,bj,5)
                0143            salt(I,J,K,bi,bj)     = StoreDynVars3D(I,J,K,bi,bj,6)
                0144            uVel(I,J,K,bi,bj)     = StoreDynVars3D(I,J,K,bi,bj,7)
                0145            vVel(I,J,K,bi,bj)     = StoreDynVars3D(I,J,K,bi,bj,8)
                0146            wVel(I,J,K,bi,bj)     = StoreDynVars3D(I,J,K,bi,bj,9)
                0147            totPhiHyd(I,J,K,bi,bj)= StoreDynVars3D(I,J,K,bi,bj,10)
507fbacc22 Gael*0148 #ifdef ALLOW_ADAMSBASHFORTH_3
e4f1c09db9 Jean*0149            gtNm(I,J,K,bi,bj,2)   = StoreDynVars3D(I,J,K,bi,bj,11)
                0150            gsNm(I,J,K,bi,bj,2)   = StoreDynVars3D(I,J,K,bi,bj,12)
                0151            guNm(I,J,K,bi,bj,2)   = StoreDynVars3D(I,J,K,bi,bj,13)
                0152            gvNm(I,J,K,bi,bj,2)   = StoreDynVars3D(I,J,K,bi,bj,14)
507fbacc22 Gael*0153 #endif
5728d4a98b Patr*0154           ENDDO
                0155          ENDDO
                0156         ENDDO
                0157        ENDDO
                0158       ENDDO
0d7eb15592 Jean*0159 
5728d4a98b Patr*0160 #ifdef ALLOW_EXF
                0161 C--   Over all tiles
                0162       DO bj = myByLo(myThid), myByHi(myThid)
                0163        DO bi = myBxLo(myThid), myBxHi(myThid)
                0164 C-      2D arrays
e4f1c09db9 Jean*0165          DO J=1-OLy,sNy+OLy
                0166           DO I=1-OLx,sNx+OLx
fc77a29eb0 Patr*0167           hflux0(I,J,bi,bj)            = StoreEXF1(I,J,bi,bj,1)
                0168           hflux1(I,J,bi,bj)            = StoreEXF1(I,J,bi,bj,2)
                0169           sflux0(I,J,bi,bj)            = StoreEXF1(I,J,bi,bj,3)
                0170           sflux1(I,J,bi,bj)            = StoreEXF1(I,J,bi,bj,4)
                0171           ustress0(I,J,bi,bj)          = StoreEXF1(I,J,bi,bj,5)
                0172           ustress1(I,J,bi,bj)          = StoreEXF1(I,J,bi,bj,6)
                0173           vstress0(I,J,bi,bj)          = StoreEXF1(I,J,bi,bj,7)
                0174           vstress1(I,J,bi,bj)          = StoreEXF1(I,J,bi,bj,8)
                0175           wspeed0(I,J,bi,bj)           = StoreEXF1(I,J,bi,bj,9)
                0176           wspeed1(I,J,bi,bj)           = StoreEXF1(I,J,bi,bj,10)
                0177 # ifdef SHORTWAVE_HEATING
                0178           swflux0(I,J,bi,bj)           = StoreEXF1(I,J,bi,bj,11)
                0179           swflux1(I,J,bi,bj)           = StoreEXF1(I,J,bi,bj,12)
                0180 # endif
                0181 # ifdef ALLOW_RUNOFF
                0182           runoff0(I,J,bi,bj)           = StoreEXF1(I,J,bi,bj,13)
                0183           runoff1(I,J,bi,bj)           = StoreEXF1(I,J,bi,bj,14)
                0184 # endif
                0185 # ifdef ATMOSPHERIC_LOADING
                0186           apressure0(I,J,bi,bj)        = StoreEXF1(I,J,bi,bj,15)
                0187           apressure1(I,J,bi,bj)        = StoreEXF1(I,J,bi,bj,16)
                0188           siceload(I,J,bi,bj)          = StoreEXF1(I,J,bi,bj,17)
                0189 # endif
                0190 # ifdef ALLOW_CLIMSSS_RELAXATION
                0191           climsss0(I,J,bi,bj)          = StoreEXF1(I,J,bi,bj,18)
                0192           climsss1(I,J,bi,bj)          = StoreEXF1(I,J,bi,bj,19)
                0193 # endif
                0194 # ifdef ALLOW_CLIMSST_RELAXATION
                0195           climsst0(I,J,bi,bj)          = StoreEXF1(I,J,bi,bj,20)
                0196           climsst1(I,J,bi,bj)          = StoreEXF1(I,J,bi,bj,21)
                0197 # endif
d217f7c14d Gael*0198 # ifdef ALLOW_SALTFLX
                0199           saltflx0(I,J,bi,bj)          = StoreEXF1(I,J,bi,bj,22)
                0200           saltflx1(I,J,bi,bj)          = StoreEXF1(I,J,bi,bj,23)
                0201 # endif
634ecb5dc5 Jean*0202          ENDDO
                0203         ENDDO
                0204        ENDDO
                0205       ENDDO
0d7eb15592 Jean*0206 
5728d4a98b Patr*0207 C--   Over all tiles
                0208       DO bj = myByLo(myThid), myByHi(myThid)
                0209        DO bi = myBxLo(myThid), myBxHi(myThid)
                0210 C-      2D arrays
e4f1c09db9 Jean*0211         DO J=1-OLy,sNy+OLy
                0212          DO I=1-OLx,sNx+OLx
6fe4379e6f Jean*0213 # ifdef ALLOW_ATM_TEMP
5728d4a98b Patr*0214           aqh0(I,J,bi,bj)            = StoreEXF2(I,J,bi,bj,1)
                0215           aqh1(I,J,bi,bj)            = StoreEXF2(I,J,bi,bj,2)
                0216           atemp0(I,J,bi,bj)          = StoreEXF2(I,J,bi,bj,3)
                0217           atemp1(I,J,bi,bj)          = StoreEXF2(I,J,bi,bj,4)
                0218           precip0(I,J,bi,bj)         = StoreEXF2(I,J,bi,bj,5)
                0219           precip1(I,J,bi,bj)         = StoreEXF2(I,J,bi,bj,6)
0d7eb15592 Jean*0220           lwflux0(I,J,bi,bj)         = StoreEXF2(I,J,bi,bj,7)
5728d4a98b Patr*0221           lwflux1(I,J,bi,bj)         = StoreEXF2(I,J,bi,bj,8)
fead278c20 Patr*0222           snowprecip0(I,J,bi,bj)     = StoreEXF2(I,J,bi,bj,9)
                0223           snowprecip1(I,J,bi,bj)     = StoreEXF2(I,J,bi,bj,10)
0e8df33a35 Jean*0224 #  ifdef ALLOW_READ_TURBFLUXES
                0225           hs0(I,J,bi,bj)             = StoreEXF2(I,J,bi,bj,11)
                0226           hs1(I,J,bi,bj)             = StoreEXF2(I,J,bi,bj,12)
                0227           hl0(I,J,bi,bj)             = StoreEXF2(I,J,bi,bj,13)
                0228           hl1(I,J,bi,bj)             = StoreEXF2(I,J,bi,bj,14)
                0229 #  endif /* ALLOW_READ_TURBFLUXES */
6fe4379e6f Jean*0230 #  ifdef EXF_READ_EVAP
0e8df33a35 Jean*0231           evap0(I,J,bi,bj)           = StoreEXF2(I,J,bi,bj,15)
                0232           evap1(I,J,bi,bj)           = StoreEXF2(I,J,bi,bj,16)
6fe4379e6f Jean*0233 #  else
0e8df33a35 Jean*0234           evap(I,J,bi,bj)            = StoreEXF2(I,J,bi,bj,15)
6fe4379e6f Jean*0235 #  endif /* EXF_READ_EVAP */
                0236 #  ifdef ALLOW_DOWNWARD_RADIATION
0e8df33a35 Jean*0237           swdown0(I,J,bi,bj)         = StoreEXF2(I,J,bi,bj,17)
                0238           swdown1(I,J,bi,bj)         = StoreEXF2(I,J,bi,bj,18)
                0239           lwdown0(I,J,bi,bj)         = StoreEXF2(I,J,bi,bj,19)
                0240           lwdown1(I,J,bi,bj)         = StoreEXF2(I,J,bi,bj,20)
6fe4379e6f Jean*0241 #  endif
                0242 # endif /* ALLOW_ATM_TEMP */
0e8df33a35 Jean*0243           uwind0(I,J,bi,bj)          = StoreEXF2(I,J,bi,bj,21)
                0244           uwind1(I,J,bi,bj)          = StoreEXF2(I,J,bi,bj,22)
                0245           vwind0(I,J,bi,bj)          = StoreEXF2(I,J,bi,bj,23)
                0246           vwind1(I,J,bi,bj)          = StoreEXF2(I,J,bi,bj,24)
634ecb5dc5 Jean*0247          ENDDO
                0248         ENDDO
                0249        ENDDO
                0250       ENDDO
5728d4a98b Patr*0251 #endif /* ALLOW_EXF */
                0252 
3c775cbf98 Mart*0253 #ifdef ALLOW_SEAICE
                0254 C--   Over all tiles
                0255       DO bj = myByLo(myThid), myByHi(myThid)
                0256        DO bi = myBxLo(myThid), myBxHi(myThid)
                0257 C-      2D arrays
                0258         DO J=1-OLy,sNy+OLy
                0259          DO I=1-OLx,sNx+OLx
                0260           AREA  (I,J,bi,bj)            = StoreSEAICE(I,J,bi,bj, 1)
                0261           HEFF  (I,J,bi,bj)            = StoreSEAICE(I,J,bi,bj, 2)
                0262           HSNOW (I,J,bi,bj)            = StoreSEAICE(I,J,bi,bj, 3)
                0263           RUNOFF(I,J,bi,bj)            = StoreSEAICE(I,J,bi,bj, 4)
                0264           UICE  (I,J,bi,bj)            = StoreSEAICE(I,J,bi,bj, 5)
                0265           VICE  (I,J,bi,bj)            = StoreSEAICE(I,J,bi,bj, 6)
                0266           ZETA  (I,J,bi,bj)            = StoreSEAICE(I,J,bi,bj, 7)
                0267           ETA   (I,J,bi,bj)            = StoreSEAICE(I,J,bi,bj, 8)
                0268 # ifdef SEAICE_CGRID
                0269           dwatn(I,J,bi,bj)             = StoreSEAICE(I,J,bi,bj, 9)
                0270 #  ifdef SEAICE_ALLOW_BOTTOMDRAG
                0271           cbotc(I,J,bi,bj)             = StoreSEAICE(I,J,bi,bj,10)
                0272 #  endif /* SEAICE_ALLOW_BOTTOMDRAG */
                0273           stressDivergenceX(I,J,bi,bj) = StoreSEAICE(I,J,bi,bj,11)
                0274           stressDivergenceY(I,J,bi,bj) = StoreSEAICE(I,J,bi,bj,12)
                0275 # endif /* SEAICE_CGRID */
                0276 # ifdef SEAICE_ALLOW_EVP
                0277           seaice_sigma1    (I,J,bi,bj) = StoreSEAICE(I,J,bi,bj,13)
                0278           seaice_sigma2    (I,J,bi,bj) = StoreSEAICE(I,J,bi,bj,14)
                0279           seaice_sigma12   (I,J,bi,bj) = StoreSEAICE(I,J,bi,bj,15)
                0280 # endif /* SEAICE_ALLOW_EVP */
                0281 # ifdef SEAICE_VARIABLE_SALINITY
                0282           HSALT            (I,J,bi,bj) = StoreSEAICE(I,J,bi,bj,16)
                0283 # endif
                0284          ENDDO
                0285         ENDDO
                0286 C--   this 3D array comes last because it has a variable size nITD
cda1c18f72 Jean*0287         DO K=1,nITD
3c775cbf98 Mart*0288          DO J=1-OLy,sNy+OLy
                0289           DO I=1-OLx,sNx+OLx
cda1c18f72 Jean*0290            TICES(I,J,K,bi,bj) = StoreSEAICE(I,J,bi,bj,16+K)
3c775cbf98 Mart*0291           ENDDO
                0292          ENDDO
                0293         ENDDO
                0294 C
                0295        ENDDO
                0296       ENDDO
                0297 #endif /* ALLOW_SEAICE */
                0298 
                0299 #endif /* AUTODIFF_USE_STORE_RESTORE */
                0300 
                0301 #if ( defined ALLOW_OBCS && defined AUTODIFF_USE_STORE_RESTORE_OBCS )
5728d4a98b Patr*0302 # ifdef ALLOW_OBCS_NORTH
                0303 C--   Over all tiles
                0304       DO bj = myByLo(myThid), myByHi(myThid)
                0305        DO bi = myBxLo(myThid), myBxHi(myThid)
                0306 C-      2D arrays
                0307         DO K=1,Nr
e4f1c09db9 Jean*0308          DO I=1-OLx,sNx+OLx
634ecb5dc5 Jean*0309           OBNu(I,K,bi,bj)    = StoreOBCSN(I,K,bi,bj,1)
                0310           OBNv(I,K,bi,bj)    = StoreOBCSN(I,K,bi,bj,2)
                0311           OBNt(I,K,bi,bj)    = StoreOBCSN(I,K,bi,bj,3)
                0312           OBNs(I,K,bi,bj)    = StoreOBCSN(I,K,bi,bj,4)
7b94249161 Jean*0313 #  ifdef ALLOW_OBCS_PRESCRIBE
634ecb5dc5 Jean*0314           OBNu0(I,K,bi,bj)   = StoreOBCSN(I,K,bi,bj,5)
                0315           OBNv0(I,K,bi,bj)   = StoreOBCSN(I,K,bi,bj,6)
                0316           OBNt0(I,K,bi,bj)   = StoreOBCSN(I,K,bi,bj,7)
                0317           OBNs0(I,K,bi,bj)   = StoreOBCSN(I,K,bi,bj,8)
                0318           OBNu1(I,K,bi,bj)   = StoreOBCSN(I,K,bi,bj,9)
                0319           OBNv1(I,K,bi,bj)   = StoreOBCSN(I,K,bi,bj,10)
                0320           OBNt1(I,K,bi,bj)   = StoreOBCSN(I,K,bi,bj,11)
                0321           OBNs1(I,K,bi,bj)   = StoreOBCSN(I,K,bi,bj,12)
7b94249161 Jean*0322 #  endif
5728d4a98b Patr*0323 #  ifdef ALLOW_OBCSN_CONTROL
634ecb5dc5 Jean*0324           xx_obcsn0(I,K,bi,bj,1)   = StoreOBCSN(I,K,bi,bj,13)
                0325           xx_obcsn0(I,K,bi,bj,2)   = StoreOBCSN(I,K,bi,bj,14)
                0326           xx_obcsn0(I,K,bi,bj,3)   = StoreOBCSN(I,K,bi,bj,15)
                0327           xx_obcsn0(I,K,bi,bj,4)   = StoreOBCSN(I,K,bi,bj,16)
                0328           xx_obcsn1(I,K,bi,bj,1)   = StoreOBCSN(I,K,bi,bj,17)
                0329           xx_obcsn1(I,K,bi,bj,2)   = StoreOBCSN(I,K,bi,bj,18)
                0330           xx_obcsn1(I,K,bi,bj,3)   = StoreOBCSN(I,K,bi,bj,19)
                0331           xx_obcsn1(I,K,bi,bj,4)   = StoreOBCSN(I,K,bi,bj,20)
5728d4a98b Patr*0332 #  endif
634ecb5dc5 Jean*0333          ENDDO
                0334         ENDDO
                0335        ENDDO
                0336       ENDDO
0d7eb15592 Jean*0337 # endif /* ALLOW_OBCS_NORTH */
5728d4a98b Patr*0338 
                0339 # ifdef ALLOW_OBCS_SOUTH
                0340 C--   Over all tiles
                0341       DO bj = myByLo(myThid), myByHi(myThid)
                0342        DO bi = myBxLo(myThid), myBxHi(myThid)
                0343 C-      2D arrays
                0344         DO K=1,Nr
e4f1c09db9 Jean*0345          DO I=1-OLx,sNx+OLx
634ecb5dc5 Jean*0346           OBSu(I,K,bi,bj)       = StoreOBCSS(I,K,bi,bj,1)
                0347           OBSv(I,K,bi,bj)       = StoreOBCSS(I,K,bi,bj,2)
                0348           OBSt(I,K,bi,bj)       = StoreOBCSS(I,K,bi,bj,3)
                0349           OBSs(I,K,bi,bj)       = StoreOBCSS(I,K,bi,bj,4)
7b94249161 Jean*0350 #  ifdef ALLOW_OBCS_PRESCRIBE
634ecb5dc5 Jean*0351           OBSu0(I,K,bi,bj)      = StoreOBCSS(I,K,bi,bj,5)
                0352           OBSv0(I,K,bi,bj)      = StoreOBCSS(I,K,bi,bj,6)
                0353           OBSt0(I,K,bi,bj)      = StoreOBCSS(I,K,bi,bj,7)
                0354           OBSs0(I,K,bi,bj)      = StoreOBCSS(I,K,bi,bj,8)
                0355           OBSu1(I,K,bi,bj)      = StoreOBCSS(I,K,bi,bj,9)
                0356           OBSv1(I,K,bi,bj)      = StoreOBCSS(I,K,bi,bj,10)
                0357           OBSt1(I,K,bi,bj)      = StoreOBCSS(I,K,bi,bj,11)
                0358           OBSs1(I,K,bi,bj)      = StoreOBCSS(I,K,bi,bj,12)
7b94249161 Jean*0359 #  endif
5728d4a98b Patr*0360 #  ifdef ALLOW_OBCSS_CONTROL
634ecb5dc5 Jean*0361           xx_obcss0(I,K,bi,bj,1)   = StoreOBCSS(I,K,bi,bj,13)
                0362           xx_obcss0(I,K,bi,bj,2)   = StoreOBCSS(I,K,bi,bj,14)
                0363           xx_obcss0(I,K,bi,bj,3)   = StoreOBCSS(I,K,bi,bj,15)
                0364           xx_obcss0(I,K,bi,bj,4)   = StoreOBCSS(I,K,bi,bj,16)
                0365           xx_obcss1(I,K,bi,bj,1)   = StoreOBCSS(I,K,bi,bj,17)
                0366           xx_obcss1(I,K,bi,bj,2)   = StoreOBCSS(I,K,bi,bj,18)
                0367           xx_obcss1(I,K,bi,bj,3)   = StoreOBCSS(I,K,bi,bj,19)
                0368           xx_obcss1(I,K,bi,bj,4)   = StoreOBCSS(I,K,bi,bj,20)
5728d4a98b Patr*0369 #  endif
634ecb5dc5 Jean*0370          ENDDO
                0371         ENDDO
                0372        ENDDO
                0373       ENDDO
0d7eb15592 Jean*0374 # endif /* ALLOW_OBCS_SOUTH */
5728d4a98b Patr*0375 
                0376 # ifdef ALLOW_OBCS_EAST
                0377 C--   Over all tiles
                0378       DO bj = myByLo(myThid), myByHi(myThid)
                0379        DO bi = myBxLo(myThid), myBxHi(myThid)
                0380 C-      2D arrays
                0381         DO K=1,Nr
e4f1c09db9 Jean*0382          DO J=1-OLy,sNy+OLy
634ecb5dc5 Jean*0383           OBEu(J,K,bi,bj)      = StoreOBCSE(J,K,bi,bj,1)
                0384           OBEv(J,K,bi,bj)      = StoreOBCSE(J,K,bi,bj,2)
                0385           OBEt(J,K,bi,bj)      = StoreOBCSE(J,K,bi,bj,3)
                0386           OBEs(J,K,bi,bj)      = StoreOBCSE(J,K,bi,bj,4)
7b94249161 Jean*0387 #  ifdef ALLOW_OBCS_PRESCRIBE
634ecb5dc5 Jean*0388           OBEu0(J,K,bi,bj)     = StoreOBCSE(J,K,bi,bj,5)
                0389           OBEv0(J,K,bi,bj)     = StoreOBCSE(J,K,bi,bj,6)
                0390           OBEt0(J,K,bi,bj)     = StoreOBCSE(J,K,bi,bj,7)
                0391           OBEs0(J,K,bi,bj)     = StoreOBCSE(J,K,bi,bj,8)
                0392           OBEu1(J,K,bi,bj)     = StoreOBCSE(J,K,bi,bj,9)
                0393           OBEv1(J,K,bi,bj)     = StoreOBCSE(J,K,bi,bj,10)
                0394           OBEt1(J,K,bi,bj)     = StoreOBCSE(J,K,bi,bj,11)
                0395           OBEs1(J,K,bi,bj)     = StoreOBCSE(J,K,bi,bj,12)
7b94249161 Jean*0396 #  endif
5728d4a98b Patr*0397 #  ifdef ALLOW_OBCSE_CONTROL
634ecb5dc5 Jean*0398           xx_obcse0(J,K,bi,bj,1)     = StoreOBCSE(J,K,bi,bj,13)
                0399           xx_obcse0(J,K,bi,bj,2)     = StoreOBCSE(J,K,bi,bj,14)
                0400           xx_obcse0(J,K,bi,bj,3)     = StoreOBCSE(J,K,bi,bj,15)
                0401           xx_obcse0(J,K,bi,bj,4)     = StoreOBCSE(J,K,bi,bj,16)
                0402           xx_obcse1(J,K,bi,bj,1)     = StoreOBCSE(J,K,bi,bj,17)
                0403           xx_obcse1(J,K,bi,bj,2)     = StoreOBCSE(J,K,bi,bj,18)
                0404           xx_obcse1(J,K,bi,bj,3)     = StoreOBCSE(J,K,bi,bj,19)
                0405           xx_obcse1(J,K,bi,bj,4)     = StoreOBCSE(J,K,bi,bj,20)
5728d4a98b Patr*0406 #  endif
634ecb5dc5 Jean*0407           ENDDO
                0408         ENDDO
                0409        ENDDO
                0410       ENDDO
0d7eb15592 Jean*0411 # endif /* ALLOW_OBCS_EAST */
5728d4a98b Patr*0412 
                0413 # ifdef ALLOW_OBCS_WEST
                0414 C--   Over all tiles
                0415       DO bj = myByLo(myThid), myByHi(myThid)
                0416        DO bi = myBxLo(myThid), myBxHi(myThid)
                0417 C-      2D arrays
                0418         DO K=1,Nr
e4f1c09db9 Jean*0419          DO J=1-OLy,sNy+OLy
634ecb5dc5 Jean*0420           OBWu(J,K,bi,bj)      = StoreOBCSW(J,K,bi,bj,1)
                0421           OBWv(J,K,bi,bj)      = StoreOBCSW(J,K,bi,bj,2)
                0422           OBWt(J,K,bi,bj)      = StoreOBCSW(J,K,bi,bj,3)
                0423           OBWs(J,K,bi,bj)      = StoreOBCSW(J,K,bi,bj,4)
7b94249161 Jean*0424 #  ifdef ALLOW_OBCS_PRESCRIBE
634ecb5dc5 Jean*0425           OBWu0(J,K,bi,bj)     = StoreOBCSW(J,K,bi,bj,5)
                0426           OBWv0(J,K,bi,bj)     = StoreOBCSW(J,K,bi,bj,6)
                0427           OBWt0(J,K,bi,bj)     = StoreOBCSW(J,K,bi,bj,7)
                0428           OBWs0(J,K,bi,bj)     = StoreOBCSW(J,K,bi,bj,8)
                0429           OBWu1(J,K,bi,bj)     = StoreOBCSW(J,K,bi,bj,9)
                0430           OBWv1(J,K,bi,bj)     = StoreOBCSW(J,K,bi,bj,10)
                0431           OBWt1(J,K,bi,bj)     = StoreOBCSW(J,K,bi,bj,11)
                0432           OBWs1(J,K,bi,bj)     = StoreOBCSW(J,K,bi,bj,12)
7b94249161 Jean*0433 #  endif
5728d4a98b Patr*0434 #  ifdef ALLOW_OBCSW_CONTROL
634ecb5dc5 Jean*0435           xx_obcsw0(J,K,bi,bj,1) = StoreOBCSW(J,K,bi,bj,13)
                0436           xx_obcsw0(J,K,bi,bj,2) = StoreOBCSW(J,K,bi,bj,14)
                0437           xx_obcsw0(J,K,bi,bj,3) = StoreOBCSW(J,K,bi,bj,15)
                0438           xx_obcsw0(J,K,bi,bj,4) = StoreOBCSW(J,K,bi,bj,16)
                0439           xx_obcsw1(J,K,bi,bj,1) = StoreOBCSW(J,K,bi,bj,17)
                0440           xx_obcsw1(J,K,bi,bj,2) = StoreOBCSW(J,K,bi,bj,18)
                0441           xx_obcsw1(J,K,bi,bj,3) = StoreOBCSW(J,K,bi,bj,19)
                0442           xx_obcsw1(J,K,bi,bj,4) = StoreOBCSW(J,K,bi,bj,20)
5728d4a98b Patr*0443 #  endif
634ecb5dc5 Jean*0444           ENDDO
                0445         ENDDO
                0446        ENDDO
                0447       ENDDO
5728d4a98b Patr*0448 # endif /* ALLOW_OBCS_WEST */
cda1c18f72 Jean*0449 #endif /* ALLOW_OBCS & AUTODIFF_USE_STORE_RESTORE_OBCS */
5728d4a98b Patr*0450 
b167b0379c Patr*0451 #ifdef ALLOW_DEBUG
862d160a2f Jean*0452       IF ( debugMode ) CALL DEBUG_LEAVE('AUTODIFF_RESTORE',myThid)
5728d4a98b Patr*0453 #endif
                0454 
                0455 #endif /* ALLOW_AUTODIFF_TAMC */
cda1c18f72 Jean*0456 C**************************************
5728d4a98b Patr*0457 
6fe4379e6f Jean*0458       RETURN
                0459       END