Back to home page

MITgcm

 
 

    


File indexing completed on 2026-02-06 06:08:13 UTC

view on githubraw file Latest commit 642de414 on 2026-02-05 21:35:24 UTC
b4daa24319 Shre*0001 #include "PACKAGES_CONFIG.h"
                0002 #include "CPP_EEOPTIONS.h"
                0003 
                0004 C--  File exch_tap_b.F: Tapenade Adjoint (Backward) EXCH1 routines
                0005 C--   Contents
                0006 C--   o  EXCH1_UV_RL_CUBE_B
                0007 C--   o  EXCH1_UV_RS_CUBE_B
                0008 C--   o  EXCH1_RL_CUBE_B
6a9e386e2e dngo*0009 C--   o  EXCH1_RL_CUBE_FWD (for adjoint without checkpointing)
                0010 C--   o  EXCH1_RL_CUBE_BWD (for adjoint without checkpointing)
b4daa24319 Shre*0011 C--   o  EXCH1_RS_CUBE_B
                0012 C--   o  EXCH1_RL_B
6a9e386e2e dngo*0013 C--   o  EXCH1_RL_FWD (for adjoint without checkpointing)
                0014 C--   o  EXCH1_RL_BWD (for adjoint without checkpointing)
b4daa24319 Shre*0015 C--   o  EXCH1_RS_B
6a9e386e2e dngo*0016 C--   o  EXCH1_RS_FWD (for adjoint without checkpointing)
                0017 C--   o  EXCH1_RS_BWD (for adjoint without checkpointing)
b4daa24319 Shre*0018 
                0019 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0020 
                0021       SUBROUTINE EXCH1_UV_RL_CUBE_B(
                0022      U                          Uarray, Uarrayb, Varray, Varrayb,
                0023      I                          withSigns,
                0024      I                          myOLw, myOLe, myOLs, myOLn,
                0025      I                          myNz, exchwidthx,exchWidthY,
                0026      I                          cornerMode, myThid )
                0027       IMPLICIT NONE
                0028 #include "SIZE.h"
                0029 #include "EEPARAMS.h"
                0030 
                0031       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
                0032       _RL     Uarray( 1-myOLw:sNx+myOLe,
                0033      &                1-myOLs:sNy+myOLn,
                0034      &                myNz, nSx, nSy )
                0035       _RL     Uarrayb( 1-myOLw:sNx+myOLe,
                0036      &                1-myOLs:sNy+myOLn,
                0037      &                myNz, nSx, nSy )
                0038       _RL     Varray( 1-myOLw:sNx+myOLe,
                0039      &                1-myOLs:sNy+myOLn,
                0040      &                myNz, nSx, nSy )
                0041       _RL     Varrayb( 1-myOLw:sNx+myOLe,
                0042      &                1-myOLs:sNy+myOLn,
                0043      &                myNz, nSx, nSy )
                0044       LOGICAL withSigns
                0045       INTEGER exchWidthX
                0046       INTEGER exchWidthY
                0047       INTEGER cornerMode
                0048       INTEGER myThid
                0049 
                0050       CALL EXCH1_UV_RL_CUBE_AD(
                0051      U                 Uarrayb, Varrayb,
                0052      I                 withSigns,
                0053      I                 myOLw, myOLe, myOLs, myOLn, myNz,
                0054      I                 exchWidthX, exchWidthY,
                0055      I                 cornerMode, myThid )
6a9e386e2e dngo*0056 
                0057       RETURN
b4daa24319 Shre*0058       END
                0059 
                0060 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0061 
                0062       SUBROUTINE EXCH1_UV_RS_CUBE_B(
                0063      U                          Uarray, Uarrayb, Varray, Varrayb,
                0064      I                          withSigns,
                0065      I                          myOLw, myOLe, myOLs, myOLn,
                0066      I                          myNz, exchwidthx,exchWidthY,
                0067      I                          cornerMode, myThid )
                0068       IMPLICIT NONE
                0069 #include "SIZE.h"
                0070 #include "EEPARAMS.h"
                0071 
                0072       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
                0073       _RS     Uarray( 1-myOLw:sNx+myOLe,
                0074      &                1-myOLs:sNy+myOLn,
                0075      &                myNz, nSx, nSy )
                0076       _RS     Uarrayb( 1-myOLw:sNx+myOLe,
                0077      &                1-myOLs:sNy+myOLn,
                0078      &                myNz, nSx, nSy )
                0079       _RS     Varray( 1-myOLw:sNx+myOLe,
                0080      &                1-myOLs:sNy+myOLn,
                0081      &                myNz, nSx, nSy )
                0082       _RS     Varrayb( 1-myOLw:sNx+myOLe,
                0083      &                1-myOLs:sNy+myOLn,
                0084      &                myNz, nSx, nSy )
                0085       LOGICAL withSigns
                0086       INTEGER exchWidthX
                0087       INTEGER exchWidthY
                0088       INTEGER cornerMode
                0089       INTEGER myThid
                0090 
                0091       CALL EXCH1_UV_RS_CUBE_AD(
                0092      U                 Uarrayb, Varrayb,
                0093      I                 withSigns,
                0094      I                 myOLw, myOLe, myOLs, myOLn, myNz,
                0095      I                 exchWidthX, exchWidthY,
                0096      I                 cornerMode, myThid )
6a9e386e2e dngo*0097 
                0098       RETURN
b4daa24319 Shre*0099       END
                0100 
                0101 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0102 
                0103       SUBROUTINE EXCH1_RL_CUBE_B(
                0104      U                 array, arrayb,
                0105      I                 withSigns,
                0106      I                 myOLw, myOLe, myOLs, myOLn, myNz,
                0107      I                 exchWidthX, exchWidthY,
                0108      I                 cornerMode, myThid )
                0109       IMPLICIT NONE
                0110 #include "SIZE.h"
                0111 #include "EEPARAMS.h"
                0112 
                0113       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
                0114       _RL     array( 1-myOLw:sNx+myOLe,
                0115      &               1-myOLs:sNy+myOLn,
                0116      &               myNz, nSx, nSy )
                0117       _RL     arrayb( 1-myOLw:sNx+myOLe,
                0118      &               1-myOLs:sNy+myOLn,
                0119      &               myNz, nSx, nSy )
                0120       LOGICAL withSigns
                0121       INTEGER exchWidthX
                0122       INTEGER exchWidthY
                0123       INTEGER cornerMode
                0124       INTEGER myThid
                0125 
                0126       CALL EXCH1_RL_CUBE_AD(
                0127      U                 arrayb,
                0128      I                 withSigns,
                0129      I                 myOLw, myOLe, myOLs, myOLn, myNz,
                0130      I                 exchWidthX, exchWidthY,
                0131      I                 cornerMode, myThid )
6a9e386e2e dngo*0132 
                0133       RETURN
                0134       END
                0135 
                0136 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0137 
                0138       SUBROUTINE EXCH1_RL_CUBE_FWD(
                0139      U                 array,
                0140      I                 withSigns,
                0141      I                 myOLw, myOLe, myOLs, myOLn, myNz,
                0142      I                 exchWidthX, exchWidthY,
                0143      I                 cornerMode, myThid )
                0144       IMPLICIT NONE
                0145 #include "SIZE.h"
                0146 #include "EEPARAMS.h"
                0147 
                0148       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
                0149       _RL     array( 1-myOLw:sNx+myOLe,
                0150      &               1-myOLs:sNy+myOLn,
                0151      &               myNz, nSx, nSy )
                0152       LOGICAL withSigns
                0153       INTEGER exchWidthX
                0154       INTEGER exchWidthY
                0155       INTEGER cornerMode
                0156       INTEGER myThid
                0157 
                0158 #ifdef ALLOW_TAPENADE
                0159 c [llh] the following PUSHREAL8ARRAY could certainly be refined!
                0160 c [ssg] for halfpipe_streamice
                0161 c      CALL PUSHREAL8ARRAY(array, 26**2*2)
                0162 c [ssg] for tutorial_global_oce_biogeo
                0163       CALL PUSHBOOLEAN(withSigns)
                0164       CALL PUSHINTEGER4(myOLw)
                0165       CALL PUSHINTEGER4(myOLe)
                0166       CALL PUSHINTEGER4(myOLs)
                0167       CALL PUSHINTEGER4(myOLn)
                0168       CALL PUSHINTEGER4(myNz)
                0169       CALL PUSHINTEGER4(exchWidthX)
                0170       CALL PUSHINTEGER4(exchWidthY)
                0171       CALL PUSHINTEGER4(cornerMode)
                0172       CALL PUSHINTEGER4(myThid)
                0173       CALL EXCH1_RL_CUBE(
                0174      U                 array,
                0175      I                 withSigns,
                0176      I                 myOLw, myOLe, myOLs, myOLn, myNz,
                0177      I                 exchWidthX, exchWidthY,
                0178      I                 cornerMode, myThid )
                0179 #endif
                0180 
                0181       RETURN
                0182       END
                0183 
                0184 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0185 
                0186       SUBROUTINE EXCH1_RL_CUBE_BWD(
                0187      U                 array, arrayb,
                0188      I                 withSigns,
                0189      I                 myOLw, myOLe, myOLs, myOLn, myNz,
                0190      I                 exchWidthX, exchWidthY,
                0191      I                 cornerMode, myThid )
                0192       IMPLICIT NONE
                0193 #include "SIZE.h"
                0194 #include "EEPARAMS.h"
                0195 
                0196       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
                0197       _RL     array( 1-myOLw:sNx+myOLe,
                0198      &               1-myOLs:sNy+myOLn,
                0199      &               myNz, nSx, nSy )
                0200       _RL     arrayb( 1-myOLw:sNx+myOLe,
                0201      &               1-myOLs:sNy+myOLn,
                0202      &               myNz, nSx, nSy )
                0203       LOGICAL withSigns
                0204       INTEGER exchWidthX
                0205       INTEGER exchWidthY
                0206       INTEGER cornerMode
                0207       INTEGER myThid
                0208 
                0209 #ifdef ALLOW_TAPENADE
                0210       CALL POPBOOLEAN(withSigns)
                0211       CALL POPINTEGER4(myOLw)
                0212       CALL POPINTEGER4(myOLe)
                0213       CALL POPINTEGER4(myOLs)
                0214       CALL POPINTEGER4(myOLn)
                0215       CALL POPINTEGER4(myNz)
                0216       CALL POPINTEGER4(exchWidthX)
                0217       CALL POPINTEGER4(exchWidthY)
                0218       CALL POPINTEGER4(cornerMode)
                0219       CALL POPINTEGER4(myThid)
                0220       CALL EXCH1_RL_CUBE_AD(
                0221      U                 arrayb,
                0222      I                 withSigns,
                0223      I                 myOLw, myOLe, myOLs, myOLn, myNz,
                0224      I                 exchWidthX, exchWidthY,
                0225      I                 cornerMode, myThid )
                0226 c [ssg] for halfpipe_streamice
                0227 c      CALL POPREAL8ARRAY(array, 26**2*2)
                0228 c [ssg] for tutorial_global_oce_biogeo
                0229 #endif
                0230 
                0231       RETURN
b4daa24319 Shre*0232       END
                0233 
                0234 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0235 
                0236       SUBROUTINE EXCH1_RS_CUBE_B(
                0237      U                 array, arrayb,
                0238      I                 withSigns,
                0239      I                 myOLw, myOLe, myOLs, myOLn, myNz,
                0240      I                 exchWidthX, exchWidthY,
                0241      I                 cornerMode, myThid )
                0242       IMPLICIT NONE
                0243 #include "SIZE.h"
                0244 #include "EEPARAMS.h"
                0245 
                0246       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
                0247       _RS     array( 1-myOLw:sNx+myOLe,
                0248      &               1-myOLs:sNy+myOLn,
                0249      &               myNz, nSx, nSy )
                0250       _RS     arrayb( 1-myOLw:sNx+myOLe,
                0251      &               1-myOLs:sNy+myOLn,
                0252      &               myNz, nSx, nSy )
                0253       LOGICAL withSigns
                0254       INTEGER exchWidthX
                0255       INTEGER exchWidthY
                0256       INTEGER cornerMode
                0257       INTEGER myThid
                0258 
                0259       CALL EXCH1_RS_CUBE_AD(
                0260      U                 arrayb,
                0261      I                 withSigns,
                0262      I                 myOLw, myOLe, myOLs, myOLn, myNz,
                0263      I                 exchWidthX, exchWidthY,
                0264      I                 cornerMode, myThid )
6a9e386e2e dngo*0265 
                0266       RETURN
b4daa24319 Shre*0267       END
                0268 
                0269 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0270 
                0271       SUBROUTINE EXCH1_RL_B(array, arrayb,
                0272      &        myOLw, myOLe, myOLs, myOLn,  myNz,
                0273      &        exchWidthX, exchWidthY, cornerMode, myThid)
                0274       IMPLICIT NONE
                0275 #include "SIZE.h"
                0276 #include "EEPARAMS.h"
                0277 #include "EXCH.h"
                0278       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
                0279       _RL     array( 1-myOLw:sNx+myOLe,
                0280      &               1-myOLs:sNy+myOLn,
                0281      &               myNz, nSx, nSy )
                0282       _RL     arrayb( 1-myOLw:sNx+myOLe,
                0283      &               1-myOLs:sNy+myOLn,
                0284      &               myNz, nSx, nSy )
                0285       INTEGER exchWidthX
                0286       INTEGER exchWidthY
                0287       INTEGER cornerMode
                0288       INTEGER myThid
                0289 
                0290       CALL EXCH1_RL_AD(arrayb,myOLw, myOLe, myOLs, myOLn,
                0291      &     myNz, exchWidthX , exchWidthY, cornerMode, myThid )
6a9e386e2e dngo*0292 
                0293       RETURN
                0294       END
                0295 
                0296 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0297 
                0298       SUBROUTINE EXCH1_RL_FWD(array,
                0299      &        myOLw, myOLe, myOLs, myOLn,  myNz,
                0300      &        exchWidthX, exchWidthY, cornerMode, myThid)
                0301       IMPLICIT NONE
                0302 #include "SIZE.h"
                0303 #include "EEPARAMS.h"
                0304 #include "EXCH.h"
                0305       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
                0306       _RL     array( 1-myOLw:sNx+myOLe,
                0307      &               1-myOLs:sNy+myOLn,
                0308      &               myNz, nSx, nSy )
                0309       INTEGER exchWidthX
                0310       INTEGER exchWidthY
                0311       INTEGER cornerMode
                0312       INTEGER myThid
                0313 
                0314 #ifdef ALLOW_TAPENADE
                0315 c [llh] the following PUSHREAL8ARRAY could certainly be refined!
                0316 c [ssg] for halfpipe_streamice
                0317 c      CALL PUSHREAL8ARRAY(array, 26**2*2)
                0318 c [ssg] for tutorial_global_oce_biogeo
                0319       CALL PUSHINTEGER4(myOLw)
                0320       CALL PUSHINTEGER4(myOLe)
                0321       CALL PUSHINTEGER4(myOLs)
                0322       CALL PUSHINTEGER4(myOLn)
                0323       CALL PUSHINTEGER4(myNz)
                0324       CALL PUSHINTEGER4(exchWidthX)
                0325       CALL PUSHINTEGER4(exchWidthY)
                0326       CALL PUSHINTEGER4(cornerMode)
                0327       CALL PUSHINTEGER4(myThid)
                0328       CALL EXCH1_RL(array, myOLw, myOLe, myOLs, myOLn,
                0329      &     myNz, exchWidthX , exchWidthY, cornerMode, myThid )
                0330 #endif
                0331 
                0332       RETURN
                0333       END
                0334 
                0335 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0336 
                0337       SUBROUTINE EXCH1_RL_BWD(array, arrayb,
                0338      &        myOLw, myOLe, myOLs, myOLn,  myNz,
                0339      &        exchWidthX, exchWidthY, cornerMode, myThid)
                0340       IMPLICIT NONE
                0341 #include "SIZE.h"
                0342 #include "EEPARAMS.h"
                0343 #include "EXCH.h"
                0344       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
                0345       _RL     array( 1-myOLw:sNx+myOLe,
                0346      &               1-myOLs:sNy+myOLn,
                0347      &               myNz, nSx, nSy )
                0348       _RL     arrayb( 1-myOLw:sNx+myOLe,
                0349      &               1-myOLs:sNy+myOLn,
                0350      &               myNz, nSx, nSy )
                0351       INTEGER exchWidthX
                0352       INTEGER exchWidthY
                0353       INTEGER cornerMode
                0354       INTEGER myThid
642de41482 dngo*0355 #ifdef ALLOW_TAPENADE
6a9e386e2e dngo*0356       INTEGER tempCM
                0357 
                0358       CALL POPINTEGER4(myThid)
                0359       CALL POPINTEGER4(tempCM)
                0360       CALL POPINTEGER4(exchWidthY)
                0361       CALL POPINTEGER4(exchWidthX)
                0362       CALL POPINTEGER4(myNz)
                0363       CALL POPINTEGER4(myOLn)
                0364       CALL POPINTEGER4(myOLs)
                0365       CALL POPINTEGER4(myOLe)
                0366       CALL POPINTEGER4(myOLw)
                0367       CALL EXCH1_RL_AD(arrayb, myOLw, myOLe, myOLs, myOLn,
                0368      &     myNz, exchWidthX , exchWidthY, tempCM, myThid )
                0369 c [ssg] for halfpipe_streamice
                0370 c      CALL POPREAL8ARRAY(array, 26**2*2)
                0371 c [ssg] for tutorial_global_oce_biogeo
                0372 #endif
                0373 
                0374       RETURN
b4daa24319 Shre*0375       END
                0376 
                0377 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0378 
                0379       SUBROUTINE EXCH1_RS_B(array, arrayb,
                0380      &      myOLw, myOLe,  myOLs, myOLn,  myNz,
                0381      &      exchWidthX, exchWidthY,
                0382      &      cornerMode, myThid)
                0383       IMPLICIT NONE
                0384 #include "SIZE.h"
                0385 #include "EEPARAMS.h"
                0386 #include "EXCH.h"
                0387       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
be017afa44 Jean*0388       _RS     array( 1-myOLw:sNx+myOLe,
b4daa24319 Shre*0389      &               1-myOLs:sNy+myOLn,
                0390      &               myNz, nSx, nSy )
be017afa44 Jean*0391       _RS     arrayb( 1-myOLw:sNx+myOLe,
b4daa24319 Shre*0392      &               1-myOLs:sNy+myOLn,
                0393      &               myNz, nSx, nSy )
                0394       INTEGER exchWidthX
                0395       INTEGER exchWidthY
                0396       INTEGER cornerMode
                0397       INTEGER myThid
                0398 
                0399       CALL EXCH1_RS_AD(arrayb, myOLw, myOLe, myOLs,
                0400      &     myOLn, myNz, exchWidthX, exchWidthY,
                0401      &     cornerMode, myThid)
6a9e386e2e dngo*0402 
                0403       RETURN
                0404       END
                0405 
                0406 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0407 
                0408       SUBROUTINE EXCH1_RS_FWD(array,
                0409      &        myOLw, myOLe, myOLs, myOLn,  myNz,
                0410      &        exchWidthX, exchWidthY, cornerMode, myThid)
                0411       IMPLICIT NONE
                0412 #include "SIZE.h"
                0413 #include "EEPARAMS.h"
                0414 #include "EXCH.h"
                0415       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
                0416       _RS     array( 1-myOLw:sNx+myOLe,
                0417      &               1-myOLs:sNy+myOLn,
                0418      &               myNz, nSx, nSy )
                0419       INTEGER exchWidthX
                0420       INTEGER exchWidthY
                0421       INTEGER cornerMode
                0422       INTEGER myThid
                0423 
                0424 #ifdef ALLOW_TAPENADE
                0425 c [llh] the following PUSHREAL8ARRAY could certainly be refined!
                0426 c [ssg] for halfpipe_streamice
                0427 c      CALL PUSHREAL8ARRAY(array, 26**2*2)
                0428 c [ssg] for tutorial_global_oce_biogeo
                0429       CALL PUSHINTEGER4(myOLw)
                0430       CALL PUSHINTEGER4(myOLe)
                0431       CALL PUSHINTEGER4(myOLs)
                0432       CALL PUSHINTEGER4(myOLn)
                0433       CALL PUSHINTEGER4(myNz)
                0434       CALL PUSHINTEGER4(exchWidthX)
                0435       CALL PUSHINTEGER4(exchWidthY)
                0436       CALL PUSHINTEGER4(cornerMode)
                0437       CALL PUSHINTEGER4(myThid)
                0438       CALL EXCH1_RS(array, myOLw, myOLe, myOLs, myOLn,
                0439      &     myNz, exchWidthX , exchWidthY, cornerMode, myThid )
                0440 #endif
                0441 
                0442       RETURN
                0443       END
                0444 
                0445 C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----|
                0446 
                0447       SUBROUTINE EXCH1_RS_BWD(array, arrayb,
                0448      &        myOLw, myOLe, myOLs, myOLn,  myNz,
                0449      &        exchWidthX, exchWidthY, cornerMode, myThid)
                0450       IMPLICIT NONE
                0451 #include "SIZE.h"
                0452 #include "EEPARAMS.h"
                0453 #include "EXCH.h"
                0454       INTEGER myOLw, myOLe, myOLs, myOLn, myNz
                0455       _RS     array( 1-myOLw:sNx+myOLe,
                0456      &               1-myOLs:sNy+myOLn,
                0457      &               myNz, nSx, nSy )
                0458       _RS     arrayb( 1-myOLw:sNx+myOLe,
                0459      &               1-myOLs:sNy+myOLn,
                0460      &               myNz, nSx, nSy )
                0461       INTEGER exchWidthX
                0462       INTEGER exchWidthY
                0463       INTEGER cornerMode
                0464       INTEGER myThid
642de41482 dngo*0465 #ifdef ALLOW_TAPENADE
6a9e386e2e dngo*0466       INTEGER tempCM
                0467 
                0468       CALL POPINTEGER4(myThid)
                0469       CALL POPINTEGER4(tempCM)
                0470       CALL POPINTEGER4(exchWidthY)
                0471       CALL POPINTEGER4(exchWidthX)
                0472       CALL POPINTEGER4(myNz)
                0473       CALL POPINTEGER4(myOLn)
                0474       CALL POPINTEGER4(myOLs)
                0475       CALL POPINTEGER4(myOLe)
                0476       CALL POPINTEGER4(myOLw)
                0477       CALL EXCH1_RS_AD(arrayb, myOLw, myOLe, myOLs, myOLn,
                0478      &     myNz, exchWidthX , exchWidthY, cornerMode, myThid )
                0479 c [ssg] for tutorial_global_oce_biogeo
                0480 #endif
                0481 
                0482       RETURN
b4daa24319 Shre*0483       END