14 |
# ifdef ALLOW_SEAICE |
# ifdef ALLOW_SEAICE |
15 |
# include "SEAICE_OPTIONS.h" |
# include "SEAICE_OPTIONS.h" |
16 |
# endif |
# endif |
17 |
|
# ifdef ALLOW_EXF |
18 |
|
# include "EXF_OPTIONS.h" |
19 |
|
# endif |
20 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
21 |
|
|
22 |
CBOP |
CBOP |
44 |
#ifdef ALLOW_TIMEAVE |
#ifdef ALLOW_TIMEAVE |
45 |
#include "TIMEAVE_STATV.h" |
#include "TIMEAVE_STATV.h" |
46 |
#endif |
#endif |
|
#if defined (ALLOW_BALANCE_FLUXES) && !(defined ALLOW_AUTODIFF_TAMC) |
|
|
#include "FFIELDS.h" |
|
|
#endif |
|
47 |
|
|
48 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
49 |
# include "AUTODIFF_MYFIELDS.h" |
# include "AUTODIFF_MYFIELDS.h" |
74 |
# ifdef ALLOW_SEAICE |
# ifdef ALLOW_SEAICE |
75 |
# include "SEAICE_SIZE.h" |
# include "SEAICE_SIZE.h" |
76 |
# include "SEAICE.h" |
# include "SEAICE.h" |
77 |
|
# include "SEAICE_PARAMS.h" |
78 |
# endif |
# endif |
79 |
# ifdef ALLOW_THSICE |
# ifdef ALLOW_THSICE |
80 |
# include "THSICE_VARS.h" |
# include "THSICE_VARS.h" |
151 |
# ifdef ALLOW_DEBUG |
# ifdef ALLOW_DEBUG |
152 |
IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid) |
IF (debugMode) CALL DEBUG_CALL('OBCS_CALC',myThid) |
153 |
# endif |
# endif |
154 |
CALL OBCS_CALC( myTime+deltaTclock, myIter+1, |
CALL OBCS_CALC( myTime+deltaTClock, myIter+1, |
155 |
I uVel, vVel, wVel, theta, salt, myThid ) |
I uVel, vVel, wVel, theta, salt, myThid ) |
156 |
ENDIF |
ENDIF |
157 |
#endif /* ALLOW_OBCS */ |
#endif /* ALLOW_OBCS */ |
158 |
|
|
|
#ifdef ALLOW_ADDFLUID |
|
|
c IF ( fluidIsWater ) THEN |
|
|
IF ( useICEFRONT ) THEN |
|
|
DO bj=myByLo(myThid),myByHi(myThid) |
|
|
DO bi=myBxLo(myThid),myBxHi(myThid) |
|
|
DO k=1,Nr |
|
|
DO j=1-OLy,sNy+OLy |
|
|
DO i=1-OLx,sNx+OLx |
|
|
addMass(i,j,k,bi,bj) = 0. _d 0 |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDDO |
|
|
ENDIF |
|
|
#endif /* ALLOW_ADDFLUID */ |
|
|
|
|
159 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
160 |
# ifdef ALLOW_SALT_PLUME |
# ifdef ALLOW_SALT_PLUME |
161 |
DO bj=myByLo(myThid),myByHi(myThid) |
DO bj=myByLo(myThid),myByHi(myThid) |
178 |
ENDIF |
ENDIF |
179 |
#endif /* ALLOW_FRAZIL */ |
#endif /* ALLOW_FRAZIL */ |
180 |
|
|
181 |
|
#ifndef OLD_THSICE_CALL_SEQUENCE |
182 |
|
#if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D) |
183 |
|
IF ( useThSIce .AND. fluidIsWater ) THEN |
184 |
|
# ifdef ALLOW_AUTODIFF_TAMC |
185 |
|
CADJ STORE uice,vice = comlev1, key = ikey_dynamics, |
186 |
|
CADJ & kind = isbyte |
187 |
|
CADJ STORE iceMask,iceHeight = comlev1, key = ikey_dynamics, |
188 |
|
CADJ & kind = isbyte |
189 |
|
CADJ STORE snowHeight, Tsrf = comlev1, key = ikey_dynamics, |
190 |
|
CADJ & kind = isbyte |
191 |
|
CADJ STORE Qice1, Qice2 = comlev1, key = ikey_dynamics, |
192 |
|
CADJ & kind = isbyte |
193 |
|
CADJ STORE sHeating, snowAge = comlev1, key = ikey_dynamics, |
194 |
|
CADJ & kind = isbyte |
195 |
|
CADJ STORE hocemxl = comlev1, key = ikey_dynamics, |
196 |
|
CADJ & kind = isbyte |
197 |
|
CADJ STORE icflxsw, snowprc = comlev1, key = ikey_dynamics, |
198 |
|
CADJ & kind = isbyte |
199 |
|
CADJ STORE salt,theta = comlev1, key = ikey_dynamics, |
200 |
|
CADJ & kind = isbyte |
201 |
|
CADJ STORE uvel,vvel = comlev1, key = ikey_dynamics, |
202 |
|
CADJ & kind = isbyte |
203 |
|
CADJ STORE qnet,qsw, empmr = comlev1, key = ikey_dynamics, |
204 |
|
CADJ & kind = isbyte |
205 |
|
CADJ STORE atemp,aqh,precip = comlev1, key = ikey_dynamics, |
206 |
|
CADJ & kind = isbyte |
207 |
|
CADJ STORE swdown,lwdown = comlev1, key = ikey_dynamics, |
208 |
|
CADJ & kind = isbyte |
209 |
|
# ifdef NONLIN_FRSURF |
210 |
|
CADJ STORE hFac_surfC = comlev1, key = ikey_dynamics, |
211 |
|
CADJ & kind = isbyte |
212 |
|
# endif |
213 |
|
# endif /* ALLOW_AUTODIFF_TAMC */ |
214 |
|
# ifdef ALLOW_DEBUG |
215 |
|
IF (debugMode) CALL DEBUG_CALL('THSICE_MAIN',myThid) |
216 |
|
# endif |
217 |
|
C-- Step forward Therm.Sea-Ice variables |
218 |
|
C and modify forcing terms including effects from ice |
219 |
|
CALL TIMER_START('THSICE_MAIN [DO_OCEANIC_PHYS]', myThid) |
220 |
|
CALL THSICE_MAIN( myTime, myIter, myThid ) |
221 |
|
CALL TIMER_STOP( 'THSICE_MAIN [DO_OCEANIC_PHYS]', myThid) |
222 |
|
ENDIF |
223 |
|
#endif /* ALLOW_THSICE */ |
224 |
|
#endif /* ndef OLD_THSICE_CALL_SEQUENCE */ |
225 |
|
|
226 |
|
#ifdef ALLOW_SEAICE |
227 |
|
# ifdef ALLOW_AUTODIFF_TAMC |
228 |
|
CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte |
229 |
|
CADJ STORE fu,fv = comlev1, key=ikey_dynamics, kind=isbyte |
230 |
|
CADJ STORE qnet = comlev1, key=ikey_dynamics, kind=isbyte |
231 |
|
CADJ STORE qsw = comlev1, key=ikey_dynamics, kind=isbyte |
232 |
|
CADJ STORE theta = comlev1, key=ikey_dynamics, kind=isbyte |
233 |
|
CADJ STORE salt = comlev1, key=ikey_dynamics, kind=isbyte |
234 |
|
#if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP) |
235 |
|
CADJ STORE evap = comlev1, key=ikey_dynamics, kind=isbyte |
236 |
|
#endif |
237 |
|
IF ( .NOT.useSEAICE ) THEN |
238 |
|
IF ( SEAICEadjMODE .EQ. -1 ) THEN |
239 |
|
CALL SEAICE_FAKE( myTime, myIter, myThid ) |
240 |
|
ENDIF |
241 |
|
ENDIF |
242 |
|
CADJ STORE area = comlev1, key=ikey_dynamics, kind=isbyte |
243 |
|
CADJ STORE fu,fv = comlev1, key=ikey_dynamics, kind=isbyte |
244 |
|
CADJ STORE qnet = comlev1, key=ikey_dynamics, kind=isbyte |
245 |
|
CADJ STORE qsw = comlev1, key=ikey_dynamics, kind=isbyte |
246 |
|
CADJ STORE theta = comlev1, key=ikey_dynamics, kind=isbyte |
247 |
|
CADJ STORE salt = comlev1, key=ikey_dynamics, kind=isbyte |
248 |
|
#if (defined ALLOW_EXF) && (defined ALLOW_ATM_TEMP) |
249 |
|
CADJ STORE evap = comlev1, key=ikey_dynamics, kind=isbyte |
250 |
|
#endif |
251 |
|
# endif /* ALLOW_AUTODIFF_TAMC */ |
252 |
|
#endif /* ALLOW_SEAICE */ |
253 |
|
|
254 |
#ifdef ALLOW_SEAICE |
#ifdef ALLOW_SEAICE |
255 |
IF ( useSEAICE ) THEN |
IF ( useSEAICE ) THEN |
256 |
# ifdef ALLOW_AUTODIFF_TAMC |
# ifdef ALLOW_AUTODIFF_TAMC |
309 |
CADJ STORE balance_itcount = comlev1, key = ikey_dynamics, |
CADJ STORE balance_itcount = comlev1, key = ikey_dynamics, |
310 |
CADJ & kind = isbyte |
CADJ & kind = isbyte |
311 |
# endif /* ANNUAL_BALANCE */ |
# endif /* ANNUAL_BALANCE */ |
312 |
# endif |
# ifdef ALLOW_THSICE |
313 |
|
CADJ STORE fu, fv = comlev1, key = ikey_dynamics, |
314 |
|
CADJ & kind = isbyte |
315 |
|
# endif |
316 |
|
# endif /* ALLOW_AUTODIFF_TAMC */ |
317 |
# ifdef ALLOW_DEBUG |
# ifdef ALLOW_DEBUG |
318 |
IF (debugMode) CALL DEBUG_CALL('SEAICE_MODEL',myThid) |
IF (debugMode) CALL DEBUG_CALL('SEAICE_MODEL',myThid) |
319 |
# endif |
# endif |
337 |
# endif |
# endif |
338 |
#endif |
#endif |
339 |
|
|
340 |
|
#ifdef OLD_THSICE_CALL_SEQUENCE |
341 |
#if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D) |
#if (defined ALLOW_THSICE) && !(defined ALLOW_ATM2D) |
342 |
IF ( useThSIce .AND. fluidIsWater ) THEN |
IF ( useThSIce .AND. fluidIsWater ) THEN |
343 |
# ifdef ALLOW_AUTODIFF_TAMC |
# ifdef ALLOW_AUTODIFF_TAMC |
363 |
CALL TIMER_STOP( 'THSICE_MAIN [DO_OCEANIC_PHYS]', myThid) |
CALL TIMER_STOP( 'THSICE_MAIN [DO_OCEANIC_PHYS]', myThid) |
364 |
ENDIF |
ENDIF |
365 |
#endif /* ALLOW_THSICE */ |
#endif /* ALLOW_THSICE */ |
366 |
|
#endif /* OLD_THSICE_CALL_SEQUENCE */ |
367 |
|
|
368 |
#ifdef ALLOW_SHELFICE |
#ifdef ALLOW_SHELFICE |
369 |
# ifdef ALLOW_AUTODIFF_TAMC |
# ifdef ALLOW_AUTODIFF_TAMC |
422 |
ENDIF |
ENDIF |
423 |
#endif /* ALLOW_OCN_COMPON_INTERF */ |
#endif /* ALLOW_OCN_COMPON_INTERF */ |
424 |
|
|
425 |
#ifdef ALLOW_BALANCE_FLUXES |
C-- Balance and Apply exchanges to surface forcing |
426 |
C balance fluxes |
IF ( fluidIsWater ) THEN |
427 |
IF ( balanceEmPmR ) |
CALL EXTERNAL_FORCING_ADJUST( myTime, myIter, myThid ) |
428 |
& CALL REMOVE_MEAN_RS( 1, EmPmR, maskInC, maskInC, rA, drF, |
ENDIF |
|
& 'EmPmR', myTime, myThid ) |
|
|
IF ( balanceQnet ) |
|
|
& CALL REMOVE_MEAN_RS( 1, Qnet, maskInC, maskInC, rA, drF, |
|
|
& 'Qnet ', myTime, myThid ) |
|
|
#endif /* ALLOW_BALANCE_FLUXES */ |
|
429 |
|
|
430 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
431 |
C-- HPF directive to help TAMC |
C-- HPF directive to help TAMC |
535 |
CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, |
CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, |
536 |
CADJ & kind = isbyte |
CADJ & kind = isbyte |
537 |
# endif |
# endif |
538 |
|
# ifdef ALLOW_SALT_PLUME |
539 |
|
CADJ STORE saltplumedepth(:,:,bi,bj) = comlev1_bibj, key=itdkey, |
540 |
|
CADJ & kind = isbyte |
541 |
|
# endif |
542 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
543 |
|
|
544 |
C-- Always compute density (stored in common block) here; even when it is not |
C-- Always compute density (stored in common block) here; even when it is not |
621 |
C-- Calculate gradients of potential density for isoneutral |
C-- Calculate gradients of potential density for isoneutral |
622 |
C slope terms (e.g. GM/Redi tensor or IVDC diffusivity) |
C slope terms (e.g. GM/Redi tensor or IVDC diffusivity) |
623 |
IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.) |
IF ( useGMRedi .OR. (k.GT.1 .AND. ivdc_kappa.NE.0.) |
624 |
|
& .OR. usePP81 .OR. useMY82 .OR. useGGL90 |
625 |
& .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN |
& .OR. useSALT_PLUME .OR. doDiagsRho.GE.1 ) THEN |
626 |
IF (k.GT.1) THEN |
IF (k.GT.1) THEN |
627 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
801 |
IF (debugMode) CALL DEBUG_CALL('PP81_CALC',myThid) |
IF (debugMode) CALL DEBUG_CALL('PP81_CALC',myThid) |
802 |
#endif |
#endif |
803 |
CALL PP81_CALC( |
CALL PP81_CALC( |
804 |
I bi, bj, myTime, myThid ) |
I bi, bj, sigmaR, myTime, myIter, myThid ) |
805 |
ENDIF |
ENDIF |
806 |
#endif /* ALLOW_PP81 */ |
#endif /* ALLOW_PP81 */ |
807 |
|
|
812 |
IF (debugMode) CALL DEBUG_CALL('MY82_CALC',myThid) |
IF (debugMode) CALL DEBUG_CALL('MY82_CALC',myThid) |
813 |
#endif |
#endif |
814 |
CALL MY82_CALC( |
CALL MY82_CALC( |
815 |
I bi, bj, myTime, myThid ) |
I bi, bj, sigmaR, myTime, myIter, myThid ) |
816 |
ENDIF |
ENDIF |
817 |
#endif /* ALLOW_MY82 */ |
#endif /* ALLOW_MY82 */ |
818 |
|
|
828 |
#endif |
#endif |
829 |
CALL TIMER_START('GGL90_CALC [DO_OCEANIC_PHYS]', myThid) |
CALL TIMER_START('GGL90_CALC [DO_OCEANIC_PHYS]', myThid) |
830 |
CALL GGL90_CALC( |
CALL GGL90_CALC( |
831 |
I bi, bj, myTime, myIter, myThid ) |
I bi, bj, sigmaR, myTime, myIter, myThid ) |
832 |
CALL TIMER_STOP ('GGL90_CALC [DO_OCEANIC_PHYS]', myThid) |
CALL TIMER_STOP ('GGL90_CALC [DO_OCEANIC_PHYS]', myThid) |
833 |
ENDIF |
ENDIF |
834 |
#endif /* ALLOW_GGL90 */ |
#endif /* ALLOW_GGL90 */ |
839 |
ENDIF |
ENDIF |
840 |
IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN |
IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN |
841 |
CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount, |
CALL TIMEAVE_CUMULATE(ConvectCountTave, IVDConvCount, |
842 |
I Nr, deltaTclock, bi, bj, myThid) |
I Nr, deltaTClock, bi, bj, myThid) |
843 |
ENDIF |
ENDIF |
844 |
#endif /* ALLOW_TIMEAVE */ |
#endif /* ALLOW_TIMEAVE */ |
845 |
|
|
897 |
ENDDO |
ENDDO |
898 |
ENDDO |
ENDDO |
899 |
|
|
900 |
|
#ifdef ALLOW_BALANCE_RELAX |
901 |
|
# ifdef ALLOW_AUTODIFF_TAMC |
902 |
|
CADJ STORE SSSrlx = comlev1, key=ikey_dynamics, kind=isbyte |
903 |
|
CADJ STORE SSSrlxTile = comlev1, key=ikey_dynamics, kind=isbyte |
904 |
|
CADJ STORE SSSrlxGlob = comlev1, key=ikey_dynamics, kind=isbyte |
905 |
|
CADJ STORE SSTrlx = comlev1, key=ikey_dynamics, kind=isbyte |
906 |
|
CADJ STORE SSTrlxTile = comlev1, key=ikey_dynamics, kind=isbyte |
907 |
|
CADJ STORE SSTrlxGlob = comlev1, key=ikey_dynamics, kind=isbyte |
908 |
|
# endif /* ALLOW_AUTODIFF_TAMC */ |
909 |
|
CALL BALANCE_RELAX( myTime, myIter, myThid ) |
910 |
|
#endif /* ALLOW_BALANCE_RELAX */ |
911 |
|
|
912 |
#ifndef ALLOW_AUTODIFF_TAMC |
#ifndef ALLOW_AUTODIFF_TAMC |
913 |
C--- if fluid Is Water: end |
C--- if fluid Is Water: end |
914 |
ENDIF |
ENDIF |
953 |
ENDIF |
ENDIF |
954 |
#endif |
#endif |
955 |
|
|
956 |
|
#ifdef ALLOW_ECCO |
957 |
|
CALL ECCO_PHYS(mythid) |
958 |
|
#endif |
959 |
|
|
960 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
961 |
IF (debugMode) CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid) |
IF (debugMode) CALL DEBUG_LEAVE('DO_OCEANIC_PHYS',myThid) |
962 |
#endif |
#endif |