3 |
|
|
4 |
#include "PACKAGES_CONFIG.h" |
#include "PACKAGES_CONFIG.h" |
5 |
#include "CPP_OPTIONS.h" |
#include "CPP_OPTIONS.h" |
6 |
|
#ifdef ALLOW_AUTODIFF |
7 |
|
# include "AUTODIFF_OPTIONS.h" |
8 |
|
#endif |
9 |
|
#ifdef ALLOW_CTRL |
10 |
|
# include "CTRL_OPTIONS.h" |
11 |
|
#endif |
12 |
|
|
13 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF |
14 |
# ifdef ALLOW_GMREDI |
# ifdef ALLOW_GMREDI |
15 |
# include "GMREDI_OPTIONS.h" |
# include "GMREDI_OPTIONS.h" |
16 |
# endif |
# endif |
23 |
# ifdef ALLOW_EXF |
# ifdef ALLOW_EXF |
24 |
# include "EXF_OPTIONS.h" |
# include "EXF_OPTIONS.h" |
25 |
# endif |
# endif |
26 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF */ |
27 |
|
|
28 |
CBOP |
CBOP |
29 |
C !ROUTINE: DO_OCEANIC_PHYS |
C !ROUTINE: DO_OCEANIC_PHYS |
54 |
# include "OFFLINE_SWITCH.h" |
# include "OFFLINE_SWITCH.h" |
55 |
#endif |
#endif |
56 |
|
|
57 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF |
58 |
# include "AUTODIFF_MYFIELDS.h" |
# include "AUTODIFF_MYFIELDS.h" |
59 |
# include "tamc.h" |
# include "tamc.h" |
60 |
# include "tamc_keys.h" |
# include "tamc_keys.h" |
91 |
# ifdef ALLOW_SALT_PLUME |
# ifdef ALLOW_SALT_PLUME |
92 |
# include "SALT_PLUME.h" |
# include "SALT_PLUME.h" |
93 |
# endif |
# endif |
94 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF */ |
95 |
|
|
96 |
C !INPUT/OUTPUT PARAMETERS: |
C !INPUT/OUTPUT PARAMETERS: |
97 |
C == Routine arguments == |
C == Routine arguments == |
177 |
ENDIF |
ENDIF |
178 |
#endif /* ALLOW_OBCS */ |
#endif /* ALLOW_OBCS */ |
179 |
|
|
180 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF |
181 |
# ifdef ALLOW_SALT_PLUME |
# ifdef ALLOW_SALT_PLUME |
182 |
DO bj=myByLo(myThid),myByHi(myThid) |
DO bj=myByLo(myThid),myByHi(myThid) |
183 |
DO bi=myBxLo(myThid),myBxHi(myThid) |
DO bi=myBxLo(myThid),myBxHi(myThid) |
190 |
ENDDO |
ENDDO |
191 |
ENDDO |
ENDDO |
192 |
# endif |
# endif |
193 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF */ |
194 |
|
|
195 |
#ifdef ALLOW_FRAZIL |
#ifdef ALLOW_FRAZIL |
196 |
IF ( useFRAZIL ) THEN |
IF ( useFRAZIL ) THEN |
245 |
#endif /* ndef OLD_THSICE_CALL_SEQUENCE */ |
#endif /* ndef OLD_THSICE_CALL_SEQUENCE */ |
246 |
|
|
247 |
#ifdef ALLOW_SEAICE |
#ifdef ALLOW_SEAICE |
248 |
# ifdef ALLOW_AUTODIFF_TAMC |
# ifdef ALLOW_AUTODIFF |
249 |
CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte |
CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte |
250 |
CADJ STORE fu,fv = comlev1, key=ikey_dynamics, kind=isbyte |
CADJ STORE fu,fv = comlev1, key=ikey_dynamics, kind=isbyte |
251 |
CADJ STORE qnet = comlev1, key=ikey_dynamics, kind=isbyte |
CADJ STORE qnet = comlev1, key=ikey_dynamics, kind=isbyte |
255 |
#if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP) |
#if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP) |
256 |
CADJ STORE evap = comlev1, key=ikey_dynamics, kind=isbyte |
CADJ STORE evap = comlev1, key=ikey_dynamics, kind=isbyte |
257 |
#endif |
#endif |
258 |
IF ( .NOT.useSEAICE ) THEN |
IF ( .NOT.useSEAICE .AND. SEAICEadjMODE .EQ. -1 ) THEN |
|
IF ( SEAICEadjMODE .EQ. -1 ) THEN |
|
259 |
CALL SEAICE_FAKE( myTime, myIter, myThid ) |
CALL SEAICE_FAKE( myTime, myIter, myThid ) |
260 |
ENDIF |
ENDIF |
|
ENDIF |
|
261 |
CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte |
CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte |
262 |
CADJ STORE fu,fv = comlev1, key=ikey_dynamics, kind=isbyte |
CADJ STORE fu,fv = comlev1, key=ikey_dynamics, kind=isbyte |
263 |
CADJ STORE qnet = comlev1, key=ikey_dynamics, kind=isbyte |
CADJ STORE qnet = comlev1, key=ikey_dynamics, kind=isbyte |
267 |
#if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP) |
#if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP) |
268 |
CADJ STORE evap = comlev1, key=ikey_dynamics, kind=isbyte |
CADJ STORE evap = comlev1, key=ikey_dynamics, kind=isbyte |
269 |
#endif |
#endif |
270 |
# endif /* ALLOW_AUTODIFF_TAMC */ |
# endif /* ALLOW_AUTODIFF */ |
271 |
#endif /* ALLOW_SEAICE */ |
#endif /* ALLOW_SEAICE */ |
272 |
|
|
273 |
#ifdef ALLOW_SEAICE |
#ifdef ALLOW_SEAICE |
464 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
465 |
IF (debugMode) CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid) |
IF (debugMode) CALL DEBUG_CALL('EXTERNAL_FORCING_SURF',myThid) |
466 |
#endif |
#endif |
467 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF |
468 |
CADJ STORE salt, theta = comlev1, key = ikey_dynamics, |
CADJ STORE salt, theta = comlev1, key = ikey_dynamics, |
469 |
CADJ & kind = isbyte |
CADJ & kind = isbyte |
470 |
#else /* ALLOW_AUTODIFF_TAMC */ |
#else /* ALLOW_AUTODIFF */ |
471 |
C-- if fluid is not water, by-pass surfaceForcing, find_rho, gmredi |
C-- if fluid is not water, by-pass surfaceForcing, find_rho, gmredi |
472 |
C and all vertical mixing schemes, but keep OBCS_CALC |
C and all vertical mixing schemes, but keep OBCS_CALC |
473 |
IF ( fluidIsWater ) THEN |
IF ( fluidIsWater ) THEN |
474 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF */ |
475 |
CALL EXTERNAL_FORCING_SURF( |
CALL EXTERNAL_FORCING_SURF( |
476 |
I iMin, iMax, jMin, jMax, |
I iMin, iMax, jMin, jMax, |
477 |
I myTime, myIter, myThid ) |
I myTime, myIter, myThid ) |
516 |
ENDDO |
ENDDO |
517 |
ENDDO |
ENDDO |
518 |
|
|
519 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF |
520 |
DO j=1-OLy,sNy+OLy |
DO j=1-OLy,sNy+OLy |
521 |
DO i=1-OLx,sNx+OLx |
DO i=1-OLx,sNx+OLx |
522 |
rhoKm1 (i,j) = 0. _d 0 |
rhoKm1 (i,j) = 0. _d 0 |
594 |
#ifdef ALLOW_OFFLINE |
#ifdef ALLOW_OFFLINE |
595 |
ENDIF |
ENDIF |
596 |
#endif |
#endif |
597 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF */ |
598 |
|
|
599 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
600 |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, |
CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, |
621 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
622 |
IF (debugMode) CALL DEBUG_CALL('FIND_RHO_2D (xNr)',myThid) |
IF (debugMode) CALL DEBUG_CALL('FIND_RHO_2D (xNr)',myThid) |
623 |
#endif |
#endif |
624 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF |
625 |
IF ( fluidIsWater ) THEN |
IF ( fluidIsWater ) THEN |
626 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF */ |
627 |
#ifdef ALLOW_DOWN_SLOPE |
#ifdef ALLOW_DOWN_SLOPE |
628 |
IF ( useDOWN_SLOPE ) THEN |
IF ( useDOWN_SLOPE ) THEN |
629 |
DO k=1,Nr |
DO k=1,Nr |
658 |
I k, bi, bj, myThid ) |
I k, bi, bj, myThid ) |
659 |
ENDDO |
ENDDO |
660 |
ENDIF |
ENDIF |
661 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF |
662 |
ELSE |
ELSE |
663 |
C- fluid is not water: |
C- fluid is not water: |
664 |
DO k=1,Nr |
DO k=1,Nr |
669 |
ENDDO |
ENDDO |
670 |
ENDDO |
ENDDO |
671 |
ENDIF |
ENDIF |
672 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF */ |
673 |
|
|
674 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
675 |
IF (debugMode) CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid) |
IF (debugMode) CALL DEBUG_MSG('ENTERING UPWARD K LOOP',myThid) |
728 |
I rhoInSitu(1-OLx,1-OLy,k,bi,bj), rhoKm1, rhoKp1, |
I rhoInSitu(1-OLx,1-OLy,k,bi,bj), rhoKm1, rhoKp1, |
729 |
O sigmaX, sigmaY, sigmaR, |
O sigmaX, sigmaY, sigmaR, |
730 |
I myThid ) |
I myThid ) |
731 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF |
732 |
#ifdef GMREDI_WITH_STABLE_ADJOINT |
#ifdef GMREDI_WITH_STABLE_ADJOINT |
733 |
cgf zero out adjoint fields to stabilize pkg/gmredi adjoint |
cgf zero out adjoint fields to stabilize pkg/gmredi adjoint |
734 |
cgf -> cuts adjoint dependency from slope to state |
cgf -> cuts adjoint dependency from slope to state |
736 |
CALL ZERO_ADJ_LOC( Nr, sigmaY, myThid) |
CALL ZERO_ADJ_LOC( Nr, sigmaY, myThid) |
737 |
CALL ZERO_ADJ_LOC( Nr, sigmaR, myThid) |
CALL ZERO_ADJ_LOC( Nr, sigmaR, myThid) |
738 |
#endif |
#endif |
739 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF */ |
740 |
ENDIF |
ENDIF |
741 |
|
|
742 |
C-- Implicit Vertical Diffusion for Convection |
C-- Implicit Vertical Diffusion for Convection |
822 |
CALL KPP_CALC( |
CALL KPP_CALC( |
823 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
824 |
CALL TIMER_STOP ('KPP_CALC [DO_OCEANIC_PHYS]', myThid) |
CALL TIMER_STOP ('KPP_CALC [DO_OCEANIC_PHYS]', myThid) |
825 |
#if (defined ALLOW_AUTODIFF_TAMC) && !(defined ALLOW_OFFLINE) |
#if (defined ALLOW_AUTODIFF) && !(defined ALLOW_OFFLINE) |
826 |
ELSE |
ELSE |
827 |
CALL KPP_CALC_DUMMY( |
CALL KPP_CALC_DUMMY( |
828 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
829 |
#endif /* ALLOW_AUTODIFF_TAMC and not ALLOW_OFFLINE */ |
#endif /* ALLOW_AUTODIFF and not ALLOW_OFFLINE */ |
830 |
ENDIF |
ENDIF |
831 |
#endif /* ALLOW_KPP */ |
#endif /* ALLOW_KPP */ |
832 |
|
|
904 |
I iMin, iMax, jMin, jMax, |
I iMin, iMax, jMin, jMax, |
905 |
I sigmaX, sigmaY, sigmaR, |
I sigmaX, sigmaY, sigmaR, |
906 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
907 |
#if (defined ALLOW_AUTODIFF_TAMC) && !(defined ALLOW_OFFLINE) |
#if (defined ALLOW_AUTODIFF) && !(defined ALLOW_OFFLINE) |
908 |
ELSE |
ELSE |
909 |
CALL GMREDI_CALC_TENSOR_DUMMY( |
CALL GMREDI_CALC_TENSOR_DUMMY( |
910 |
I iMin, iMax, jMin, jMax, |
I iMin, iMax, jMin, jMax, |
911 |
I sigmaX, sigmaY, sigmaR, |
I sigmaX, sigmaY, sigmaR, |
912 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, myTime, myIter, myThid ) |
913 |
#endif /* ALLOW_AUTODIFF_TAMC and not ALLOW_OFFLINE */ |
#endif /* ALLOW_AUTODIFF and not ALLOW_OFFLINE */ |
914 |
ENDIF |
ENDIF |
915 |
#endif /* ALLOW_GMREDI */ |
#endif /* ALLOW_GMREDI */ |
916 |
|
|
933 |
ENDDO |
ENDDO |
934 |
ENDDO |
ENDDO |
935 |
|
|
936 |
#ifndef ALLOW_AUTODIFF_TAMC |
#ifndef ALLOW_AUTODIFF |
937 |
C--- if fluid Is Water: end |
C--- if fluid Is Water: end |
938 |
ENDIF |
ENDIF |
939 |
#endif |
#endif |