3 |
|
|
4 |
#include "PACKAGES_CONFIG.h" |
#include "PACKAGES_CONFIG.h" |
5 |
#include "CPP_OPTIONS.h" |
#include "CPP_OPTIONS.h" |
6 |
|
#ifdef ALLOW_GENERIC_ADVDIFF |
7 |
|
# include "GAD_OPTIONS.h" |
8 |
|
#endif |
9 |
|
|
10 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
11 |
# ifdef ALLOW_GMREDI |
# ifdef ALLOW_GMREDI |
81 |
#include "DYNVARS.h" |
#include "DYNVARS.h" |
82 |
#include "GRID.h" |
#include "GRID.h" |
83 |
#ifdef ALLOW_GENERIC_ADVDIFF |
#ifdef ALLOW_GENERIC_ADVDIFF |
84 |
#include "GAD.h" |
# include "GAD.h" |
85 |
|
# include "GAD_SOM_VARS.h" |
86 |
#endif |
#endif |
87 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
88 |
#include "PTRACERS_SIZE.h" |
# include "PTRACERS_SIZE.h" |
89 |
#include "PTRACERS.h" |
# include "PTRACERS.h" |
90 |
#endif |
#endif |
91 |
#ifdef ALLOW_TIMEAVE |
#ifdef ALLOW_TIMEAVE |
92 |
#include "TIMEAVE_STATV.h" |
# include "TIMEAVE_STATV.h" |
93 |
#endif |
#endif |
94 |
|
|
95 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
181 |
CEOP |
CEOP |
182 |
|
|
183 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
184 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
185 |
& CALL DEBUG_ENTER('THERMODYNAMICS',myThid) |
& CALL DEBUG_ENTER('THERMODYNAMICS',myThid) |
186 |
#endif |
#endif |
187 |
|
|
196 |
CHPF$ INDEPENDENT |
CHPF$ INDEPENDENT |
197 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
198 |
|
|
199 |
|
C-- Compute correction at the surface for Lin Free Surf. |
200 |
|
IF (linFSConserveTr) |
201 |
|
& CALL CALC_WSURF_TR(theta,salt,wVel, |
202 |
|
& myTime,myIter,myThid) |
203 |
|
|
204 |
DO bj=myByLo(myThid),myByHi(myThid) |
DO bj=myByLo(myThid),myByHi(myThid) |
205 |
|
|
206 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
325 |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
326 |
CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
327 |
CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
|
cph-test |
|
328 |
# ifdef ALLOW_DEPTH_CONTROL |
# ifdef ALLOW_DEPTH_CONTROL |
329 |
CADJ STORE gtnm1(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
CADJ STORE gtnm1(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
330 |
CADJ STORE gsnm1(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
CADJ STORE gsnm1(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte |
342 |
C recomputation. It *is* differentiable, if you need it. |
C recomputation. It *is* differentiable, if you need it. |
343 |
C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to |
C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to |
344 |
C disable this section of code. |
C disable this section of code. |
345 |
|
#ifdef GAD_ALLOW_SOM_ADVECT |
346 |
|
IF ( tempSOM_Advection ) THEN |
347 |
|
#ifdef ALLOW_DEBUG |
348 |
|
IF ( debugLevel .GE. debLevB ) |
349 |
|
& CALL DEBUG_CALL('GAD_SOM_ADVECT',myThid) |
350 |
|
#endif |
351 |
|
CALL GAD_SOM_ADVECT( |
352 |
|
I tempImplVertAdv, tempAdvScheme, tempVertAdvScheme, |
353 |
|
I GAD_TEMPERATURE, |
354 |
|
I uVel, vVel, wVel, theta, |
355 |
|
U som_T, |
356 |
|
O gT, |
357 |
|
I bi,bj,myTime,myIter,myThid) |
358 |
|
ELSEIF (tempMultiDimAdvec) THEN |
359 |
|
#else /* GAD_ALLOW_SOM_ADVECT */ |
360 |
IF (tempMultiDimAdvec) THEN |
IF (tempMultiDimAdvec) THEN |
361 |
|
#endif /* GAD_ALLOW_SOM_ADVECT */ |
362 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
363 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
364 |
& CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
& CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
365 |
#endif |
#endif |
366 |
CALL GAD_ADVECTION( |
CALL GAD_ADVECTION( |
370 |
O gT, |
O gT, |
371 |
I bi,bj,myTime,myIter,myThid) |
I bi,bj,myTime,myIter,myThid) |
372 |
ENDIF |
ENDIF |
373 |
|
#ifdef GAD_ALLOW_SOM_ADVECT |
374 |
|
IF ( saltSOM_Advection ) THEN |
375 |
|
#ifdef ALLOW_DEBUG |
376 |
|
IF ( debugLevel .GE. debLevB ) |
377 |
|
& CALL DEBUG_CALL('GAD_SOM_ADVECT',myThid) |
378 |
|
#endif |
379 |
|
CALL GAD_SOM_ADVECT( |
380 |
|
I saltImplVertAdv, saltAdvScheme, saltVertAdvScheme, |
381 |
|
I GAD_SALINITY, |
382 |
|
I uVel, vVel, wVel, salt, |
383 |
|
U som_S, |
384 |
|
O gS, |
385 |
|
I bi,bj,myTime,myIter,myThid) |
386 |
|
ELSEIF (saltMultiDimAdvec) THEN |
387 |
|
#else /* GAD_ALLOW_SOM_ADVECT */ |
388 |
IF (saltMultiDimAdvec) THEN |
IF (saltMultiDimAdvec) THEN |
389 |
|
#endif /* GAD_ALLOW_SOM_ADVECT */ |
390 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
391 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
392 |
& CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
& CALL DEBUG_CALL('GAD_ADVECTION',myThid) |
393 |
#endif |
#endif |
394 |
CALL GAD_ADVECTION( |
CALL GAD_ADVECTION( |
405 |
#ifdef ALLOW_PTRACERS |
#ifdef ALLOW_PTRACERS |
406 |
IF ( usePTRACERS ) THEN |
IF ( usePTRACERS ) THEN |
407 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
408 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
409 |
& CALL DEBUG_CALL('PTRACERS_ADVECTION',myThid) |
& CALL DEBUG_CALL('PTRACERS_ADVECTION',myThid) |
410 |
#endif |
#endif |
411 |
CALL PTRACERS_ADVECTION( bi,bj,myIter,myTime,myThid ) |
CALL PTRACERS_ADVECTION( bi,bj,myIter,myTime,myThid ) |
414 |
#endif /* DISABLE_MULTIDIM_ADVECTION */ |
#endif /* DISABLE_MULTIDIM_ADVECTION */ |
415 |
|
|
416 |
#ifdef ALLOW_DEBUG |
#ifdef ALLOW_DEBUG |
417 |
IF ( debugLevel .GE. debLevB ) |
IF ( debugLevel .GE. debLevB ) |
418 |
& CALL DEBUG_MSG('ENTERING DOWNWARD K LOOP',myThid) |
& CALL DEBUG_MSG('ENTERING DOWNWARD K LOOP',myThid) |
419 |
#endif |
#endif |
420 |
|
|
459 |
|
|
460 |
C-- Get temporary terms used by tendency routines : |
C-- Get temporary terms used by tendency routines : |
461 |
C- Calculate horizontal "volume transport" through tracer cell face |
C- Calculate horizontal "volume transport" through tracer cell face |
462 |
|
C anelastic: uTrans,vTrans are scaled by rhoFacC (~ mass transport) |
463 |
CALL CALC_COMMON_FACTORS ( |
CALL CALC_COMMON_FACTORS ( |
464 |
I uVel, vVel, |
I uVel, vVel, |
465 |
O uFld, vFld, uTrans, vTrans, xA, yA, |
O uFld, vFld, uTrans, vTrans, xA, yA, |
477 |
ENDDO |
ENDDO |
478 |
ELSE |
ELSE |
479 |
C- Interior interface : |
C- Interior interface : |
480 |
|
C anelastic: rTrans is scaled by rhoFacF (~ mass transport) |
481 |
DO j=1-Oly,sNy+Oly |
DO j=1-Oly,sNy+Oly |
482 |
DO i=1-Olx,sNx+Olx |
DO i=1-Olx,sNx+Olx |
483 |
wFld(i,j) = wVel(i,j,k,bi,bj) |
wFld(i,j) = wVel(i,j,k,bi,bj) |
484 |
maskUp(i,j) = maskC(i,j,k-1,bi,bj)*maskC(i,j,k,bi,bj) |
maskUp(i,j) = maskC(i,j,k-1,bi,bj)*maskC(i,j,k,bi,bj) |
485 |
rTrans(i,j) = wFld(i,j)*rA(i,j,bi,bj)*maskUp(i,j) |
rTrans(i,j) = wFld(i,j)*rA(i,j,bi,bj)*maskUp(i,j) |
486 |
|
& *deepFac2F(k)*rhoFacF(k) |
487 |
ENDDO |
ENDDO |
488 |
ENDDO |
ENDDO |
489 |
ENDIF |
ENDIF |
494 |
CALL GMREDI_CALC_UVFLOW( |
CALL GMREDI_CALC_UVFLOW( |
495 |
U uFld, vFld, uTrans, vTrans, |
U uFld, vFld, uTrans, vTrans, |
496 |
I k, bi, bj, myThid ) |
I k, bi, bj, myThid ) |
497 |
IF (K.GE.2) CALL GMREDI_CALC_WFLOW( |
IF (K.GE.2) THEN |
498 |
|
CALL GMREDI_CALC_WFLOW( |
499 |
U wFld, rTrans, |
U wFld, rTrans, |
500 |
I k, bi, bj, myThid ) |
I k, bi, bj, myThid ) |
501 |
|
ENDIF |
502 |
ENDIF |
ENDIF |
503 |
# ifdef ALLOW_AUTODIFF_TAMC |
# ifdef ALLOW_AUTODIFF_TAMC |
504 |
CADJ STORE rTrans(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE rTrans(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
505 |
|
CADJ STORE wfld(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
506 |
# ifdef GM_BOLUS_ADVEC |
# ifdef GM_BOLUS_ADVEC |
507 |
|
CADJ STORE ufld(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
508 |
|
CADJ STORE vfld(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
509 |
CADJ STORE uTrans(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE uTrans(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
510 |
CADJ STORE vTrans(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE vTrans(:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
511 |
# endif |
# endif |
545 |
# endif |
# endif |
546 |
# endif |
# endif |
547 |
# endif /* ALLOW_AUTODIFF_TAMC */ |
# endif /* ALLOW_AUTODIFF_TAMC */ |
548 |
|
C |
549 |
|
#ifdef ALLOW_AUTODIFF_TAMC |
550 |
|
# if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL) |
551 |
|
cph-test |
552 |
|
CADJ STORE uFld(:,:), vFld(:,:), wFld(:,:) |
553 |
|
CADJ & = comlev1_bibj_k, key=kkey, byte=isbyte |
554 |
|
CADJ STORE uTrans(:,:), vTrans(:,:) |
555 |
|
CADJ & = comlev1_bibj_k, key=kkey, byte=isbyte |
556 |
|
CADJ STORE xA(:,:), yA(:,:) |
557 |
|
CADJ & = comlev1_bibj_k, key=kkey, byte=isbyte |
558 |
|
# endif |
559 |
|
#endif /* ALLOW_AUTODIFF_TAMC */ |
560 |
|
C |
561 |
IF ( tempStepping ) THEN |
IF ( tempStepping ) THEN |
562 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
563 |
CADJ STORE gTnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE gTnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
564 |
# if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL) |
# if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL) |
565 |
CADJ STORE gT(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE fvert(:,:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
566 |
# endif |
# endif |
567 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
568 |
CALL CALC_GT( |
CALL CALC_GT( |
595 |
#ifdef ALLOW_AUTODIFF_TAMC |
#ifdef ALLOW_AUTODIFF_TAMC |
596 |
CADJ STORE gSnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE gSnm1(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
597 |
# if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL) |
# if (defined NONLIN_FRSURF) || (defined ALLOW_DEPTH_CONTROL) |
598 |
CADJ STORE gS(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte |
CADJ STORE fvers(:,:,:) = comlev1_bibj_k, key=kkey, byte=isbyte |
599 |
# endif |
# endif |
600 |
#endif /* ALLOW_AUTODIFF_TAMC */ |
#endif /* ALLOW_AUTODIFF_TAMC */ |
601 |
CALL CALC_GS( |
CALL CALC_GS( |