Back to home page

MITgcm

 
 

    


File indexing completed on 2024-03-02 06:10:10 UTC

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