Back to home page

darwin3

 
 

    


File indexing completed on 2025-10-27 12:20:01 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"
bf759c6109 Gael*0010 #endif
                0011 #ifdef ALLOW_EXF
                0012 # include "EXF_OPTIONS.h"
5728d4a98b Patr*0013 #endif
                0014 
6fe4379e6f Jean*0015       SUBROUTINE AUTODIFF_STORE( myThid )
5728d4a98b Patr*0016 
cda1c18f72 Jean*0017 C     ==================================================================
                0018 C     SUBROUTINE autodiff_store
                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_store
                0027 C     ==================================================================
5728d4a98b Patr*0028 
6fe4379e6f 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 
e28d7f2731 Gael*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
0d7eb15592 Jean*0080 
cda1c18f72 Jean*0081 C--   == end of interface ==
5728d4a98b Patr*0082 
3e55964de2 Patr*0083 #ifdef ALLOW_DEBUG
862d160a2f Jean*0084       IF ( debugMode ) CALL DEBUG_ENTER('AUTODIFF_STORE',myThid)
5728d4a98b Patr*0085 #endif
0d7eb15592 Jean*0086 
3c775cbf98 Mart*0087 #ifdef AUTODIFF_USE_STORE_RESTORE
5728d4a98b Patr*0088 C--   Over all tiles
                0089       DO bj = myByLo(myThid), myByHi(myThid)
                0090        DO bi = myBxLo(myThid), myBxHi(myThid)
                0091 C-      2D arrays
e4f1c09db9 Jean*0092         DO J=1-OLy,sNy+OLy
                0093          DO I=1-OLx,sNx+OLx
                0094           StoreDynVars2D(I,J,bi,bj,1) = etaN(I,J,bi,bj)
f255f6c083 Jean*0095           StoreDynVars2D(I,J,bi,bj,2) = taux0(I,J,bi,bj)
                0096           StoreDynVars2D(I,J,bi,bj,3) = taux1(I,J,bi,bj)
                0097           StoreDynVars2D(I,J,bi,bj,4) = tauy0(I,J,bi,bj)
                0098           StoreDynVars2D(I,J,bi,bj,5) = tauy1(I,J,bi,bj)
                0099           StoreDynVars2D(I,J,bi,bj,6) = qnet0(I,J,bi,bj)
                0100           StoreDynVars2D(I,J,bi,bj,7) = qnet1(I,J,bi,bj)
                0101           StoreDynVars2D(I,J,bi,bj,8)  = empmr0(I,J,bi,bj)
                0102           StoreDynVars2D(I,J,bi,bj,9) = empmr1(I,J,bi,bj)
                0103           StoreDynVars2D(I,J,bi,bj,10) = sst0(I,J,bi,bj)
                0104           StoreDynVars2D(I,J,bi,bj,11) = sst1(I,J,bi,bj)
                0105           StoreDynVars2D(I,J,bi,bj,12) = sss0(I,J,bi,bj)
                0106           StoreDynVars2D(I,J,bi,bj,13) = sss1(I,J,bi,bj)
                0107           StoreDynVars2D(I,J,bi,bj,14) = saltflux0(I,J,bi,bj)
                0108           StoreDynVars2D(I,J,bi,bj,15) = saltflux1(I,J,bi,bj)
5728d4a98b Patr*0109 #ifdef SHORTWAVE_HEATING
f255f6c083 Jean*0110           StoreDynVars2D(I,J,bi,bj,16) = qsw0(I,J,bi,bj)
                0111           StoreDynVars2D(I,J,bi,bj,17) = qsw1(I,J,bi,bj)
5728d4a98b Patr*0112 #else
f255f6c083 Jean*0113           StoreDynVars2D(I,J,bi,bj,16) = 0.
5728d4a98b Patr*0114           StoreDynVars2D(I,J,bi,bj,17) = 0.
                0115 #endif
                0116 #ifdef ATMOSPHERIC_LOADING
f255f6c083 Jean*0117           StoreDynVars2D(I,J,bi,bj,18) = pload0(I,J,bi,bj)
                0118           StoreDynVars2D(I,J,bi,bj,19) = pload1(I,J,bi,bj)
5728d4a98b Patr*0119 #else
f255f6c083 Jean*0120           StoreDynVars2D(I,J,bi,bj,18) = 0.
5728d4a98b Patr*0121           StoreDynVars2D(I,J,bi,bj,19) = 0.
                0122 #endif
f255f6c083 Jean*0123           StoreDynVars2D(I,J,bi,bj,20) = etaH(I,J,bi,bj)
                0124           StoreDynVars2D(I,J,bi,bj,21) = dEtaHdt(I,J,bi,bj)
                0125           StoreDynVars2D(I,J,bi,bj,22) = PmEpR(I,J,bi,bj)
5728d4a98b Patr*0126          ENDDO
                0127         ENDDO
3c775cbf98 Mart*0128        ENDDO
                0129       ENDDO
c5c9d716eb Patr*0130 
3c775cbf98 Mart*0131 C--   Over all tiles
                0132       DO bj = myByLo(myThid), myByHi(myThid)
                0133        DO bi = myBxLo(myThid), myBxHi(myThid)
5728d4a98b Patr*0134 C-      3D arrays
                0135         DO K=1,Nr
e4f1c09db9 Jean*0136          DO J=1-OLy,sNy+OLy
                0137           DO I=1-OLx,sNx+OLx
507fbacc22 Gael*0138 #ifdef ALLOW_ADAMSBASHFORTH_3
e4f1c09db9 Jean*0139            StoreDynVars3D(I,J,K,bi,bj,1)  = gtNm(I,J,K,bi,bj,1)
                0140            StoreDynVars3D(I,J,K,bi,bj,2)  = gsNm(I,J,K,bi,bj,1)
                0141            StoreDynVars3D(I,J,K,bi,bj,3)  = guNm(I,J,K,bi,bj,1)
                0142            StoreDynVars3D(I,J,K,bi,bj,4)  = gvNm(I,J,K,bi,bj,1)
507fbacc22 Gael*0143 #else
e4f1c09db9 Jean*0144            StoreDynVars3D(I,J,K,bi,bj,1)  = gtNm1(I,J,K,bi,bj)
                0145            StoreDynVars3D(I,J,K,bi,bj,2)  = gsNm1(I,J,K,bi,bj)
                0146            StoreDynVars3D(I,J,K,bi,bj,3)  = guNm1(I,J,K,bi,bj)
                0147            StoreDynVars3D(I,J,K,bi,bj,4)  = gvNm1(I,J,K,bi,bj)
507fbacc22 Gael*0148 #endif
e4f1c09db9 Jean*0149            StoreDynVars3D(I,J,K,bi,bj,5)  = theta(I,J,K,bi,bj)
                0150            StoreDynVars3D(I,J,K,bi,bj,6)  = salt(I,J,K,bi,bj)
                0151            StoreDynVars3D(I,J,K,bi,bj,7)  = uVel(I,J,K,bi,bj)
                0152            StoreDynVars3D(I,J,K,bi,bj,8)  = vVel(I,J,K,bi,bj)
                0153            StoreDynVars3D(I,J,K,bi,bj,9)  = wVel(I,J,K,bi,bj)
                0154            StoreDynVars3D(I,J,K,bi,bj,10) = totPhiHyd(I,J,K,bi,bj)
507fbacc22 Gael*0155 #ifdef ALLOW_ADAMSBASHFORTH_3
e4f1c09db9 Jean*0156            StoreDynVars3D(I,J,K,bi,bj,11) = gtNm(I,J,K,bi,bj,2)
                0157            StoreDynVars3D(I,J,K,bi,bj,12) = gsNm(I,J,K,bi,bj,2)
                0158            StoreDynVars3D(I,J,K,bi,bj,13) = guNm(I,J,K,bi,bj,2)
                0159            StoreDynVars3D(I,J,K,bi,bj,14) = gvNm(I,J,K,bi,bj,2)
507fbacc22 Gael*0160 #endif
5728d4a98b Patr*0161           ENDDO
                0162          ENDDO
                0163         ENDDO
                0164        ENDDO
                0165       ENDDO
0d7eb15592 Jean*0166 
5728d4a98b Patr*0167 #ifdef ALLOW_EXF
                0168 C--   Over all tiles
                0169       DO bj = myByLo(myThid), myByHi(myThid)
                0170        DO bi = myBxLo(myThid), myBxHi(myThid)
                0171 C-      2D arrays
e4f1c09db9 Jean*0172         DO J=1-OLy,sNy+OLy
                0173          DO I=1-OLx,sNx+OLx
0e8df33a35 Jean*0174           StoreEXF1(I,J,bi,bj,1)  = hflux0(I,J,bi,bj)
                0175           StoreEXF1(I,J,bi,bj,2)  = hflux1(I,J,bi,bj)
                0176           StoreEXF1(I,J,bi,bj,3)  = sflux0(I,J,bi,bj)
                0177           StoreEXF1(I,J,bi,bj,4)  = sflux1(I,J,bi,bj)
                0178           StoreEXF1(I,J,bi,bj,5)  = ustress0(I,J,bi,bj)
                0179           StoreEXF1(I,J,bi,bj,6)  = ustress1(I,J,bi,bj)
                0180           StoreEXF1(I,J,bi,bj,7)  = vstress0(I,J,bi,bj)
                0181           StoreEXF1(I,J,bi,bj,8)  = vstress1(I,J,bi,bj)
                0182           StoreEXF1(I,J,bi,bj,9)  = wspeed0(I,J,bi,bj)
fc77a29eb0 Patr*0183           StoreEXF1(I,J,bi,bj,10) = wspeed1(I,J,bi,bj)
                0184 # ifdef SHORTWAVE_HEATING
                0185           StoreEXF1(I,J,bi,bj,11) = swflux0(I,J,bi,bj)
                0186           StoreEXF1(I,J,bi,bj,12) = swflux1(I,J,bi,bj)
                0187 # else
                0188           StoreEXF1(I,J,bi,bj,11) = 0.0
                0189           StoreEXF1(I,J,bi,bj,12) = 0.0
                0190 # endif
                0191 # ifdef ALLOW_RUNOFF
                0192           StoreEXF1(I,J,bi,bj,13) = runoff0(I,J,bi,bj)
                0193           StoreEXF1(I,J,bi,bj,14) = runoff1(I,J,bi,bj)
                0194 # else
5728d4a98b Patr*0195           StoreEXF1(I,J,bi,bj,13) = 0.0
                0196           StoreEXF1(I,J,bi,bj,14) = 0.0
fc77a29eb0 Patr*0197 # endif
                0198 # ifdef ATMOSPHERIC_LOADING
                0199           StoreEXF1(I,J,bi,bj,15) = apressure0(I,J,bi,bj)
                0200           StoreEXF1(I,J,bi,bj,16) = apressure1(I,J,bi,bj)
                0201           StoreEXF1(I,J,bi,bj,17) = siceload(I,J,bi,bj)
                0202 # else
5728d4a98b Patr*0203           StoreEXF1(I,J,bi,bj,15) = 0.0
                0204           StoreEXF1(I,J,bi,bj,16) = 0.0
fc77a29eb0 Patr*0205           StoreEXF1(I,J,bi,bj,17) = 0.0
                0206 # endif
                0207 # ifdef ALLOW_CLIMSSS_RELAXATION
                0208           StoreEXF1(I,J,bi,bj,18) = climsss0(I,J,bi,bj)
                0209           StoreEXF1(I,J,bi,bj,19) = climsss1(I,J,bi,bj)
                0210 # else
                0211           StoreEXF1(I,J,bi,bj,18) = 0.0
                0212           StoreEXF1(I,J,bi,bj,19) = 0.0
                0213 # endif
                0214 # ifdef ALLOW_CLIMSST_RELAXATION
                0215           StoreEXF1(I,J,bi,bj,20) = climsst0(I,J,bi,bj)
                0216           StoreEXF1(I,J,bi,bj,21) = climsst1(I,J,bi,bj)
                0217 # else
                0218           StoreEXF1(I,J,bi,bj,20) = 0.0
                0219           StoreEXF1(I,J,bi,bj,21) = 0.0
d217f7c14d Gael*0220 # endif
                0221 # ifdef ALLOW_SALTFLX
                0222           StoreEXF1(I,J,bi,bj,22) = saltflx0(I,J,bi,bj)
                0223           StoreEXF1(I,J,bi,bj,23) = saltflx1(I,J,bi,bj)
                0224 # else
                0225           StoreEXF1(I,J,bi,bj,22) = 0.0
                0226           StoreEXF1(I,J,bi,bj,23) = 0.0
fc77a29eb0 Patr*0227 # endif
634ecb5dc5 Jean*0228          ENDDO
                0229         ENDDO
                0230        ENDDO
                0231       ENDDO
0d7eb15592 Jean*0232 
5728d4a98b Patr*0233 C--   Over all tiles
                0234       DO bj = myByLo(myThid), myByHi(myThid)
                0235        DO bi = myBxLo(myThid), myBxHi(myThid)
                0236 C-      2D arrays
e4f1c09db9 Jean*0237         DO J=1-OLy,sNy+OLy
                0238          DO I=1-OLx,sNx+OLx
6fe4379e6f Jean*0239 # ifdef ALLOW_ATM_TEMP
5728d4a98b Patr*0240           StoreEXF2(I,J,bi,bj,1) = aqh0(I,J,bi,bj)
                0241           StoreEXF2(I,J,bi,bj,2) = aqh1(I,J,bi,bj)
                0242           StoreEXF2(I,J,bi,bj,3) = atemp0(I,J,bi,bj)
                0243           StoreEXF2(I,J,bi,bj,4) = atemp1(I,J,bi,bj)
                0244           StoreEXF2(I,J,bi,bj,5) = precip0(I,J,bi,bj)
                0245           StoreEXF2(I,J,bi,bj,6) = precip1(I,J,bi,bj)
                0246           StoreEXF2(I,J,bi,bj,7) = lwflux0(I,J,bi,bj)
                0247           StoreEXF2(I,J,bi,bj,8) = lwflux1(I,J,bi,bj)
fead278c20 Patr*0248           StoreEXF2(I,J,bi,bj,9)  = snowprecip0(I,J,bi,bj)
                0249           StoreEXF2(I,J,bi,bj,10) = snowprecip1(I,J,bi,bj)
0e8df33a35 Jean*0250 #  ifdef ALLOW_READ_TURBFLUXES
                0251           StoreEXF2(I,J,bi,bj,11) = hs0(I,J,bi,bj)
                0252           StoreEXF2(I,J,bi,bj,12) = hs1(I,J,bi,bj)
                0253           StoreEXF2(I,J,bi,bj,13) = hl0(I,J,bi,bj)
                0254           StoreEXF2(I,J,bi,bj,14) = hl1(I,J,bi,bj)
6fe4379e6f Jean*0255 #  else
0e8df33a35 Jean*0256           StoreEXF2(I,J,bi,bj,11) = 0.0
fead278c20 Patr*0257           StoreEXF2(I,J,bi,bj,12) = 0.0
5728d4a98b Patr*0258           StoreEXF2(I,J,bi,bj,13) = 0.0
                0259           StoreEXF2(I,J,bi,bj,14) = 0.0
0e8df33a35 Jean*0260 #  endif
                0261 #  ifdef EXF_READ_EVAP
                0262           StoreEXF2(I,J,bi,bj,15) = evap0(I,J,bi,bj)
                0263           StoreEXF2(I,J,bi,bj,16) = evap1(I,J,bi,bj)
                0264 #  else
                0265           StoreEXF2(I,J,bi,bj,15) = evap(I,J,bi,bj)
fead278c20 Patr*0266           StoreEXF2(I,J,bi,bj,16) = 0.0
0e8df33a35 Jean*0267 #  endif /* EXF_READ_EVAP */
                0268 #  ifdef ALLOW_DOWNWARD_RADIATION
                0269           StoreEXF2(I,J,bi,bj,17) = swdown0(I,J,bi,bj)
                0270           StoreEXF2(I,J,bi,bj,18) = swdown1(I,J,bi,bj)
                0271           StoreEXF2(I,J,bi,bj,19) = lwdown0(I,J,bi,bj)
                0272           StoreEXF2(I,J,bi,bj,20) = lwdown1(I,J,bi,bj)
                0273 #  else
                0274           StoreEXF2(I,J,bi,bj,17) = 0.0
                0275           StoreEXF2(I,J,bi,bj,18) = 0.0
                0276           StoreEXF2(I,J,bi,bj,19) = 0.0
                0277           StoreEXF2(I,J,bi,bj,20) = 0.0
6fe4379e6f Jean*0278 #  endif
                0279 # endif /* ALLOW_ATM_TEMP */
0e8df33a35 Jean*0280           StoreEXF2(I,J,bi,bj,21) = uwind0(I,J,bi,bj)
                0281           StoreEXF2(I,J,bi,bj,22) = uwind1(I,J,bi,bj)
                0282           StoreEXF2(I,J,bi,bj,23) = vwind0(I,J,bi,bj)
                0283           StoreEXF2(I,J,bi,bj,24) = vwind1(I,J,bi,bj)
634ecb5dc5 Jean*0284          ENDDO
                0285         ENDDO
                0286        ENDDO
                0287       ENDDO
5728d4a98b Patr*0288 #endif /* ALLOW_EXF */
                0289 
3c775cbf98 Mart*0290 #ifdef ALLOW_SEAICE
                0291 C--   Over all tiles
                0292       DO bj = myByLo(myThid), myByHi(myThid)
                0293        DO bi = myBxLo(myThid), myBxHi(myThid)
                0294 C-      2D arrays
                0295         DO J=1-OLy,sNy+OLy
                0296          DO I=1-OLx,sNx+OLx
                0297           StoreSEAICE(I,J,bi,bj, 1) = AREA(I,J,bi,bj)
                0298           StoreSEAICE(I,J,bi,bj, 2) = HEFF(I,J,bi,bj)
                0299           StoreSEAICE(I,J,bi,bj, 3) = HSNOW(I,J,bi,bj)
                0300           StoreSEAICE(I,J,bi,bj, 4) = RUNOFF(I,J,bi,bj)
                0301           StoreSEAICE(I,J,bi,bj, 5) = UICE(I,J,bi,bj)
                0302           StoreSEAICE(I,J,bi,bj, 6) = VICE(I,J,bi,bj)
                0303           StoreSEAICE(I,J,bi,bj, 7) = ZETA(I,J,bi,bj)
                0304           StoreSEAICE(I,J,bi,bj, 8) = ETA(I,J,bi,bj)
                0305 # ifdef SEAICE_CGRID
                0306           StoreSEAICE(I,J,bi,bj, 9) = dwatn(I,J,bi,bj)
                0307 #  ifdef SEAICE_ALLOW_BOTTOMDRAG
                0308           StoreSEAICE(I,J,bi,bj,10) = cbotc(I,J,bi,bj)
                0309 #  else
                0310           StoreSEAICE(I,J,bi,bj,10) = 0.0
                0311 #  endif /* SEAICE_ALLOW_BOTTOMDRAG */
                0312           StoreSEAICE(I,J,bi,bj,11) = stressDivergenceX(I,J,bi,bj)
                0313           StoreSEAICE(I,J,bi,bj,12) = stressDivergenceY(I,J,bi,bj)
                0314 # else
                0315           StoreSEAICE(I,J,bi,bj, 9) = 0.0
                0316           StoreSEAICE(I,J,bi,bj,10) = 0.0
                0317           StoreSEAICE(I,J,bi,bj,11) = 0.0
                0318           StoreSEAICE(I,J,bi,bj,12) = 0.0
                0319 # endif /* SEAICE_CGRID */
                0320 # ifdef SEAICE_ALLOW_EVP
                0321           StoreSEAICE(I,J,bi,bj,13) = seaice_sigma1(I,J,bi,bj)
                0322           StoreSEAICE(I,J,bi,bj,14) = seaice_sigma2(I,J,bi,bj)
                0323           StoreSEAICE(I,J,bi,bj,15) = seaice_sigma12(I,J,bi,bj)
                0324 # else
                0325           StoreSEAICE(I,J,bi,bj,13) = 0.0
                0326           StoreSEAICE(I,J,bi,bj,14) = 0.0
                0327           StoreSEAICE(I,J,bi,bj,15) = 0.0
                0328 # endif /* SEAICE_ALLOW_EVP */
                0329 # ifdef SEAICE_VARIABLE_SALINITY
                0330           StoreSEAICE(I,J,bi,bj,16) = HSALT(I,J,bi,bj)
                0331 # else
                0332           StoreSEAICE(I,J,bi,bj,16) = 0.0
                0333 # endif
                0334          ENDDO
                0335         ENDDO
                0336 C--   this 3D array comes last because it has a variable size nITD
cda1c18f72 Jean*0337         DO K=1,nITD
3c775cbf98 Mart*0338          DO J=1-OLy,sNy+OLy
                0339           DO I=1-OLx,sNx+OLx
cda1c18f72 Jean*0340            StoreSEAICE(I,J,bi,bj,16+K) = TICES(I,J,K,bi,bj)
3c775cbf98 Mart*0341           ENDDO
                0342          ENDDO
                0343         ENDDO
                0344 C
                0345        ENDDO
                0346       ENDDO
                0347 #endif /* ALLOW_SEAICE */
                0348 
                0349 #endif /* AUTODIFF_USE_STORE_RESTORE */
                0350 
                0351 #if ( defined ALLOW_OBCS && defined AUTODIFF_USE_STORE_RESTORE_OBCS )
5728d4a98b Patr*0352 # ifdef ALLOW_OBCS_NORTH
                0353 C--   Over all tiles
                0354       DO bj = myByLo(myThid), myByHi(myThid)
                0355        DO bi = myBxLo(myThid), myBxHi(myThid)
                0356 C-      2D arrays
                0357         DO K=1,Nr
e4f1c09db9 Jean*0358          DO I=1-OLx,sNx+OLx
634ecb5dc5 Jean*0359           StoreOBCSN(I,K,bi,bj,1)  = OBNu(I,K,bi,bj)
                0360           StoreOBCSN(I,K,bi,bj,2)  = OBNv(I,K,bi,bj)
                0361           StoreOBCSN(I,K,bi,bj,3)  = OBNt(I,K,bi,bj)
                0362           StoreOBCSN(I,K,bi,bj,4)  = OBNs(I,K,bi,bj)
7b94249161 Jean*0363 #  ifdef ALLOW_OBCS_PRESCRIBE
634ecb5dc5 Jean*0364           StoreOBCSN(I,K,bi,bj,5)  = OBNu0(I,K,bi,bj)
                0365           StoreOBCSN(I,K,bi,bj,6)  = OBNv0(I,K,bi,bj)
                0366           StoreOBCSN(I,K,bi,bj,7)  = OBNt0(I,K,bi,bj)
                0367           StoreOBCSN(I,K,bi,bj,8)  = OBNs0(I,K,bi,bj)
                0368           StoreOBCSN(I,K,bi,bj,9)  = OBNu1(I,K,bi,bj)
                0369           StoreOBCSN(I,K,bi,bj,10) = OBNv1(I,K,bi,bj)
                0370           StoreOBCSN(I,K,bi,bj,11) = OBNt1(I,K,bi,bj)
                0371           StoreOBCSN(I,K,bi,bj,12) = OBNs1(I,K,bi,bj)
7b94249161 Jean*0372 #  endif
5728d4a98b Patr*0373 #  ifdef ALLOW_OBCSN_CONTROL
634ecb5dc5 Jean*0374           StoreOBCSN(I,K,bi,bj,13) = xx_obcsn0(I,K,bi,bj,1)
                0375           StoreOBCSN(I,K,bi,bj,14) = xx_obcsn0(I,K,bi,bj,2)
                0376           StoreOBCSN(I,K,bi,bj,15) = xx_obcsn0(I,K,bi,bj,3)
                0377           StoreOBCSN(I,K,bi,bj,16) = xx_obcsn0(I,K,bi,bj,4)
                0378           StoreOBCSN(I,K,bi,bj,17) = xx_obcsn1(I,K,bi,bj,1)
                0379           StoreOBCSN(I,K,bi,bj,18) = xx_obcsn1(I,K,bi,bj,2)
                0380           StoreOBCSN(I,K,bi,bj,19) = xx_obcsn1(I,K,bi,bj,3)
                0381           StoreOBCSN(I,K,bi,bj,20) = xx_obcsn1(I,K,bi,bj,4)
6fe4379e6f Jean*0382 #  else
60bf15049b Patr*0383           StoreOBCSN(I,K,bi,bj,13) = 0.0
                0384           StoreOBCSN(I,K,bi,bj,14) = 0.0
                0385           StoreOBCSN(I,K,bi,bj,15) = 0.0
                0386           StoreOBCSN(I,K,bi,bj,16) = 0.0
                0387           StoreOBCSN(I,K,bi,bj,17) = 0.0
                0388           StoreOBCSN(I,K,bi,bj,18) = 0.0
634ecb5dc5 Jean*0389           StoreOBCSN(I,K,bi,bj,19) = 0.0
                0390           StoreOBCSN(I,K,bi,bj,20) = 0.0
5728d4a98b Patr*0391 #  endif
634ecb5dc5 Jean*0392          ENDDO
                0393         ENDDO
                0394        ENDDO
                0395       ENDDO
0d7eb15592 Jean*0396 # endif /* ALLOW_OBCS_NORTH */
5728d4a98b Patr*0397 
                0398 # ifdef ALLOW_OBCS_SOUTH
                0399 C--   Over all tiles
                0400       DO bj = myByLo(myThid), myByHi(myThid)
                0401        DO bi = myBxLo(myThid), myBxHi(myThid)
                0402 C-      2D arrays
                0403         DO K=1,Nr
e4f1c09db9 Jean*0404          DO I=1-OLx,sNx+OLx
634ecb5dc5 Jean*0405           StoreOBCSS(I,K,bi,bj,1)  = OBSu(I,K,bi,bj)
                0406           StoreOBCSS(I,K,bi,bj,2)  = OBSv(I,K,bi,bj)
                0407           StoreOBCSS(I,K,bi,bj,3)  = OBSt(I,K,bi,bj)
                0408           StoreOBCSS(I,K,bi,bj,4)  = OBSs(I,K,bi,bj)
7b94249161 Jean*0409 #  ifdef ALLOW_OBCS_PRESCRIBE
634ecb5dc5 Jean*0410           StoreOBCSS(I,K,bi,bj,5)  = OBSu0(I,K,bi,bj)
                0411           StoreOBCSS(I,K,bi,bj,6)  = OBSv0(I,K,bi,bj)
                0412           StoreOBCSS(I,K,bi,bj,7)  = OBSt0(I,K,bi,bj)
                0413           StoreOBCSS(I,K,bi,bj,8)  = OBSs0(I,K,bi,bj)
                0414           StoreOBCSS(I,K,bi,bj,9)  = OBSu1(I,K,bi,bj)
                0415           StoreOBCSS(I,K,bi,bj,10) = OBSv1(I,K,bi,bj)
                0416           StoreOBCSS(I,K,bi,bj,11) = OBSt1(I,K,bi,bj)
                0417           StoreOBCSS(I,K,bi,bj,12) = OBSs1(I,K,bi,bj)
7b94249161 Jean*0418 #  endif
5728d4a98b Patr*0419 #  ifdef ALLOW_OBCSS_CONTROL
634ecb5dc5 Jean*0420           StoreOBCSS(I,K,bi,bj,13) = xx_obcss0(I,K,bi,bj,1)
                0421           StoreOBCSS(I,K,bi,bj,14) = xx_obcss0(I,K,bi,bj,2)
                0422           StoreOBCSS(I,K,bi,bj,15) = xx_obcss0(I,K,bi,bj,3)
                0423           StoreOBCSS(I,K,bi,bj,16) = xx_obcss0(I,K,bi,bj,4)
                0424           StoreOBCSS(I,K,bi,bj,17) = xx_obcss1(I,K,bi,bj,1)
                0425           StoreOBCSS(I,K,bi,bj,18) = xx_obcss1(I,K,bi,bj,2)
                0426           StoreOBCSS(I,K,bi,bj,19) = xx_obcss1(I,K,bi,bj,3)
                0427           StoreOBCSS(I,K,bi,bj,20) = xx_obcss1(I,K,bi,bj,4)
6fe4379e6f Jean*0428 #  else
60bf15049b Patr*0429           StoreOBCSS(I,K,bi,bj,13) = 0.0
                0430           StoreOBCSS(I,K,bi,bj,14) = 0.0
                0431           StoreOBCSS(I,K,bi,bj,15) = 0.0
                0432           StoreOBCSS(I,K,bi,bj,16) = 0.0
                0433           StoreOBCSS(I,K,bi,bj,17) = 0.0
                0434           StoreOBCSS(I,K,bi,bj,18) = 0.0
634ecb5dc5 Jean*0435           StoreOBCSS(I,K,bi,bj,19) = 0.0
                0436           StoreOBCSS(I,K,bi,bj,20) = 0.0
5728d4a98b Patr*0437 #  endif
634ecb5dc5 Jean*0438          ENDDO
                0439         ENDDO
                0440        ENDDO
                0441       ENDDO
0d7eb15592 Jean*0442 # endif /* ALLOW_OBCS_SOUTH */
5728d4a98b Patr*0443 
                0444 # ifdef ALLOW_OBCS_EAST
                0445 C--   Over all tiles
                0446       DO bj = myByLo(myThid), myByHi(myThid)
                0447        DO bi = myBxLo(myThid), myBxHi(myThid)
                0448 C-      2D arrays
                0449         DO K=1,Nr
e4f1c09db9 Jean*0450          DO J=1-OLy,sNy+OLy
634ecb5dc5 Jean*0451           StoreOBCSE(J,K,bi,bj,1)  = OBEu(J,K,bi,bj)
                0452           StoreOBCSE(J,K,bi,bj,2)  = OBEv(J,K,bi,bj)
                0453           StoreOBCSE(J,K,bi,bj,3)  = OBEt(J,K,bi,bj)
                0454           StoreOBCSE(J,K,bi,bj,4)  = OBEs(J,K,bi,bj)
7b94249161 Jean*0455 #  ifdef ALLOW_OBCS_PRESCRIBE
634ecb5dc5 Jean*0456           StoreOBCSE(J,K,bi,bj,5)  = OBEu0(J,K,bi,bj)
                0457           StoreOBCSE(J,K,bi,bj,6)  = OBEv0(J,K,bi,bj)
                0458           StoreOBCSE(J,K,bi,bj,7)  = OBEt0(J,K,bi,bj)
                0459           StoreOBCSE(J,K,bi,bj,8)  = OBEs0(J,K,bi,bj)
                0460           StoreOBCSE(J,K,bi,bj,9)  = OBEu1(J,K,bi,bj)
                0461           StoreOBCSE(J,K,bi,bj,10) = OBEv1(J,K,bi,bj)
                0462           StoreOBCSE(J,K,bi,bj,11) = OBEt1(J,K,bi,bj)
                0463           StoreOBCSE(J,K,bi,bj,12) = OBEs1(J,K,bi,bj)
7b94249161 Jean*0464 #  endif
5728d4a98b Patr*0465 #  ifdef ALLOW_OBCSE_CONTROL
634ecb5dc5 Jean*0466           StoreOBCSE(J,K,bi,bj,13) = xx_obcse0(J,K,bi,bj,1)
                0467           StoreOBCSE(J,K,bi,bj,14) = xx_obcse0(J,K,bi,bj,2)
                0468           StoreOBCSE(J,K,bi,bj,15) = xx_obcse0(J,K,bi,bj,3)
                0469           StoreOBCSE(J,K,bi,bj,16) = xx_obcse0(J,K,bi,bj,4)
                0470           StoreOBCSE(J,K,bi,bj,17) = xx_obcse1(J,K,bi,bj,1)
                0471           StoreOBCSE(J,K,bi,bj,18) = xx_obcse1(J,K,bi,bj,2)
                0472           StoreOBCSE(J,K,bi,bj,19) = xx_obcse1(J,K,bi,bj,3)
                0473           StoreOBCSE(J,K,bi,bj,20) = xx_obcse1(J,K,bi,bj,4)
6fe4379e6f Jean*0474 #  else
60bf15049b Patr*0475           StoreOBCSE(J,K,bi,bj,13) = 0.0
                0476           StoreOBCSE(J,K,bi,bj,14) = 0.0
                0477           StoreOBCSE(J,K,bi,bj,15) = 0.0
                0478           StoreOBCSE(J,K,bi,bj,16) = 0.0
                0479           StoreOBCSE(J,K,bi,bj,17) = 0.0
                0480           StoreOBCSE(J,K,bi,bj,18) = 0.0
634ecb5dc5 Jean*0481           StoreOBCSE(J,K,bi,bj,19) = 0.0
                0482           StoreOBCSE(J,K,bi,bj,20) = 0.0
5728d4a98b Patr*0483 #  endif
634ecb5dc5 Jean*0484          ENDDO
                0485         ENDDO
                0486        ENDDO
                0487       ENDDO
0d7eb15592 Jean*0488 # endif /* ALLOW_OBCS_EAST */
5728d4a98b Patr*0489 
                0490 # ifdef ALLOW_OBCS_WEST
                0491 C--   Over all tiles
                0492       DO bj = myByLo(myThid), myByHi(myThid)
                0493        DO bi = myBxLo(myThid), myBxHi(myThid)
                0494 C-      2D arrays
                0495         DO K=1,Nr
e4f1c09db9 Jean*0496          DO J=1-OLy,sNy+OLy
634ecb5dc5 Jean*0497           StoreOBCSW(J,K,bi,bj,1)  = OBWu(J,K,bi,bj)
                0498           StoreOBCSW(J,K,bi,bj,2)  = OBWv(J,K,bi,bj)
                0499           StoreOBCSW(J,K,bi,bj,3)  = OBWt(J,K,bi,bj)
                0500           StoreOBCSW(J,K,bi,bj,4)  = OBWs(J,K,bi,bj)
7b94249161 Jean*0501 #  ifdef ALLOW_OBCS_PRESCRIBE
634ecb5dc5 Jean*0502           StoreOBCSW(J,K,bi,bj,5)  = OBWu0(J,K,bi,bj)
                0503           StoreOBCSW(J,K,bi,bj,6)  = OBWv0(J,K,bi,bj)
                0504           StoreOBCSW(J,K,bi,bj,7)  = OBWt0(J,K,bi,bj)
                0505           StoreOBCSW(J,K,bi,bj,8)  = OBWs0(J,K,bi,bj)
                0506           StoreOBCSW(J,K,bi,bj,9)  = OBWu1(J,K,bi,bj)
                0507           StoreOBCSW(J,K,bi,bj,10) = OBWv1(J,K,bi,bj)
                0508           StoreOBCSW(J,K,bi,bj,11) = OBWt1(J,K,bi,bj)
                0509           StoreOBCSW(J,K,bi,bj,12) = OBWs1(J,K,bi,bj)
7b94249161 Jean*0510 #  endif
5728d4a98b Patr*0511 #  ifdef ALLOW_OBCSW_CONTROL
634ecb5dc5 Jean*0512           StoreOBCSW(J,K,bi,bj,13) = xx_obcsw0(J,K,bi,bj,1)
                0513           StoreOBCSW(J,K,bi,bj,14) = xx_obcsw0(J,K,bi,bj,2)
                0514           StoreOBCSW(J,K,bi,bj,15) = xx_obcsw0(J,K,bi,bj,3)
                0515           StoreOBCSW(J,K,bi,bj,16) = xx_obcsw0(J,K,bi,bj,4)
                0516           StoreOBCSW(J,K,bi,bj,17) = xx_obcsw1(J,K,bi,bj,1)
                0517           StoreOBCSW(J,K,bi,bj,18) = xx_obcsw1(J,K,bi,bj,2)
                0518           StoreOBCSW(J,K,bi,bj,19) = xx_obcsw1(J,K,bi,bj,3)
                0519           StoreOBCSW(J,K,bi,bj,20) = xx_obcsw1(J,K,bi,bj,4)
6fe4379e6f Jean*0520 #  else
60bf15049b Patr*0521           StoreOBCSW(J,K,bi,bj,13) = 0.0
                0522           StoreOBCSW(J,K,bi,bj,14) = 0.0
                0523           StoreOBCSW(J,K,bi,bj,15) = 0.0
                0524           StoreOBCSW(J,K,bi,bj,16) = 0.0
                0525           StoreOBCSW(J,K,bi,bj,17) = 0.0
                0526           StoreOBCSW(J,K,bi,bj,18) = 0.0
634ecb5dc5 Jean*0527           StoreOBCSW(J,K,bi,bj,19) = 0.0
                0528           StoreOBCSW(J,K,bi,bj,20) = 0.0
5728d4a98b Patr*0529 #  endif
634ecb5dc5 Jean*0530          ENDDO
                0531         ENDDO
                0532        ENDDO
                0533       ENDDO
5728d4a98b Patr*0534 # endif /* ALLOW_OBCS_WEST */
cda1c18f72 Jean*0535 #endif /* ALLOW_OBCS & AUTODIFF_USE_STORE_RESTORE_OBCS */
5728d4a98b Patr*0536 
b167b0379c Patr*0537 #ifdef ALLOW_DEBUG
862d160a2f Jean*0538       IF ( debugMode ) CALL DEBUG_LEAVE('AUTODIFF_STORE',myThid)
5728d4a98b Patr*0539 #endif
                0540 
                0541 #endif /* ALLOW_AUTODIFF_TAMC */
cda1c18f72 Jean*0542 C**************************************
5728d4a98b Patr*0543 
6fe4379e6f Jean*0544       RETURN
                0545       END