/[MITgcm]/MITgcm/model/src/temp_integrate.F
ViewVC logotype

Diff of /MITgcm/model/src/temp_integrate.F

Parent Directory Parent Directory | Revision Log Revision Log | View Revision Graph Revision Graph | View Patch Patch

revision 1.14 by jmc, Fri Aug 8 19:55:52 2014 UTC revision 1.15 by jmc, Thu Aug 14 16:53:42 2014 UTC
# Line 116  C     fZon       :: Flux of temperature Line 116  C     fZon       :: Flux of temperature
116  C     fMer       :: Flux of temperature (T) in the meridional direction  C     fMer       :: Flux of temperature (T) in the meridional direction
117  C     fVer       :: Flux of temperature (T) in the vertical direction  C     fVer       :: Flux of temperature (T) in the vertical direction
118  C                   at the upper(U) and lower(D) faces of a cell.  C                   at the upper(U) and lower(D) faces of a cell.
119    C     gT_loc     :: Temperature tendency (local to this S/R)
120  C     gtForc     :: Temperature forcing tendency  C     gtForc     :: Temperature forcing tendency
121  C     gt_AB      :: Adams-Bashforth temperature tendency increment  C     gt_AB      :: Adams-Bashforth temperature tendency increment
122  C   useVariableK :: T when vertical diffusion is not constant  C   useVariableK :: T when vertical diffusion is not constant
# Line 132  C   useVariableK :: T when vertical diff Line 133  C   useVariableK :: T when vertical diff
133        _RL fZon    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL fZon    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
134        _RL fMer    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL fMer    (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
135        _RL fVer    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)        _RL fVer    (1-OLx:sNx+OLx,1-OLy:sNy+OLy,2)
136          _RL gT_loc  (1-OLx:sNx+OLx,1-OLy:sNy+OLy,Nr)
137        _RL gtForc  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL gtForc  (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
138        _RL gt_AB   (1-OLx:sNx+OLx,1-OLy:sNy+OLy)        _RL gt_AB   (1-OLx:sNx+OLx,1-OLy:sNy+OLy)
139  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
# Line 183  C-    Tracer tendency needs to be set to Line 185  C-    Tracer tendency needs to be set to
185        DO k=1,Nr        DO k=1,Nr
186         DO j=1-OLy,sNy+OLy         DO j=1-OLy,sNy+OLy
187          DO i=1-OLx,sNx+OLx          DO i=1-OLx,sNx+OLx
188           gT(i,j,k,bi,bj) = 0. _d 0           gT_loc(i,j,k) = 0. _d 0
189          ENDDO          ENDDO
190         ENDDO         ENDDO
191        ENDDO        ENDDO
# Line 237  CADJ STORE som_T = comlev1_bibj, key=itd Line 239  CADJ STORE som_T = comlev1_bibj, key=itd
239       I             tempAdvScheme, tempVertAdvScheme, GAD_TEMPERATURE,       I             tempAdvScheme, tempVertAdvScheme, GAD_TEMPERATURE,
240       I             dTtracerLev, uFld, vFld, wFld, theta,       I             dTtracerLev, uFld, vFld, wFld, theta,
241       U             som_T,       U             som_T,
242       O             gT,       O             gT_loc,
243       I             bi, bj, myTime, myIter, myThid )       I             bi, bj, myTime, myIter, myThid )
244        ELSEIF (tempMultiDimAdvec) THEN        ELSEIF (tempMultiDimAdvec) THEN
245  #else /* GAD_ALLOW_TS_SOM_ADV */  #else /* GAD_ALLOW_TS_SOM_ADV */
# Line 250  CADJ STORE som_T = comlev1_bibj, key=itd Line 252  CADJ STORE som_T = comlev1_bibj, key=itd
252       I             tempImplVertAdv,       I             tempImplVertAdv,
253       I             tempAdvScheme, tempVertAdvScheme, GAD_TEMPERATURE,       I             tempAdvScheme, tempVertAdvScheme, GAD_TEMPERATURE,
254       I             dTtracerLev, uFld, vFld, wFld, theta,       I             dTtracerLev, uFld, vFld, wFld, theta,
255       O             gT,       O             gT_loc,
256       I             bi, bj, myTime, myIter, myThid )       I             bi, bj, myTime, myIter, myThid )
257        ENDIF        ENDIF
258  #endif /* DISABLE_MULTIDIM_ADVECTION */  #endif /* DISABLE_MULTIDIM_ADVECTION */
# Line 270  C-    Start vertical index (k) loop (Nr: Line 272  C-    Start vertical index (k) loop (Nr:
272  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
273  CADJ STORE fVer(:,:,:) = comlev1_bibj_k, key=kkey,  CADJ STORE fVer(:,:,:) = comlev1_bibj_k, key=kkey,
274  CADJ &     byte=isbyte,  kind = isbyte  CADJ &     byte=isbyte,  kind = isbyte
275  CADJ STORE gT(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey,  CADJ STORE gT_loc(:,:,k) = comlev1_bibj_k, key=kkey,
276  CADJ &     byte=isbyte,  kind = isbyte  CADJ &     byte=isbyte,  kind = isbyte
277  # ifdef ALLOW_ADAMSBASHFORTH_3  # ifdef ALLOW_ADAMSBASHFORTH_3
278  CADJ STORE gtNm(:,:,k,bi,bj,1) = comlev1_bibj_k, key=kkey,  CADJ STORE gtNm(:,:,k,bi,bj,1) = comlev1_bibj_k, key=kkey,
# Line 321  c       m1 = 1 + MOD(iterNb+1,2) Line 323  c       m1 = 1 + MOD(iterNb+1,2)
323       I           calcAdvection, tempImplVertAdv, AdamsBashforth_T,       I           calcAdvection, tempImplVertAdv, AdamsBashforth_T,
324       I           tempVertDiff4, useGMRedi, useKPP,       I           tempVertDiff4, useGMRedi, useKPP,
325       O           fZon, fMer,       O           fZon, fMer,
326       U           fVer, gT,       U           fVer, gT_loc,
327       I           myTime, myIter, myThid )       I           myTime, myIter, myThid )
328  #else /* ALLOW_ADAMSBASHFORTH_3 */  #else /* ALLOW_ADAMSBASHFORTH_3 */
329          CALL GAD_CALC_RHS(          CALL GAD_CALC_RHS(
# Line 335  c       m1 = 1 + MOD(iterNb+1,2) Line 337  c       m1 = 1 + MOD(iterNb+1,2)
337       I           calcAdvection, tempImplVertAdv, AdamsBashforth_T,       I           calcAdvection, tempImplVertAdv, AdamsBashforth_T,
338       I           tempVertDiff4, useGMRedi, useKPP,       I           tempVertDiff4, useGMRedi, useKPP,
339       O           fZon, fMer,       O           fZon, fMer,
340       U           fVer, gT,       U           fVer, gT_loc,
341       I           myTime, myIter, myThid )       I           myTime, myIter, myThid )
342  #endif  #endif
343    
# Line 343  C--   External thermal forcing term(s) i Line 345  C--   External thermal forcing term(s) i
345          IF ( tempForcing .AND. tracForcingOutAB.NE.1 ) THEN          IF ( tempForcing .AND. tracForcingOutAB.NE.1 ) THEN
346            DO j=1-OLy,sNy+OLy            DO j=1-OLy,sNy+OLy
347             DO i=1-OLx,sNx+OLx             DO i=1-OLx,sNx+OLx
348              gT(i,j,k,bi,bj) = gT(i,j,k,bi,bj) + gtForc(i,j)              gT_loc(i,j,k) = gT_loc(i,j,k) + gtForc(i,j)
349             ENDDO             ENDDO
350            ENDDO            ENDDO
351          ENDIF          ENDIF
# Line 352  C--   External thermal forcing term(s) i Line 354  C--   External thermal forcing term(s) i
354  #ifdef ALLOW_ADAMSBASHFORTH_3  #ifdef ALLOW_ADAMSBASHFORTH_3
355            CALL ADAMS_BASHFORTH3(            CALL ADAMS_BASHFORTH3(
356       I                          bi, bj, k, Nr,       I                          bi, bj, k, Nr,
357       U                          gT, gtNm, gt_AB,       U                          gT_loc, gtNm,
358         O                          gt_AB,
359       I                          tempStartAB, iterNb, myThid )       I                          tempStartAB, iterNb, myThid )
360  #else  #else
361            CALL ADAMS_BASHFORTH2(            CALL ADAMS_BASHFORTH2(
362       I                          bi, bj, k, Nr,       I                          bi, bj, k, Nr,
363       U                          gT, gtNm1, gt_AB,       U                          gT_loc, gtNm1(1-OLx,1-OLy,1,bi,bj),
364         O                          gt_AB,
365       I                          tempStartAB, iterNb, myThid )       I                          tempStartAB, iterNb, myThid )
366  #endif  #endif
367  #ifdef ALLOW_DIAGNOSTICS  #ifdef ALLOW_DIAGNOSTICS
# Line 371  C--   External thermal forcing term(s) o Line 375  C--   External thermal forcing term(s) o
375          IF ( tempForcing .AND. tracForcingOutAB.EQ.1 ) THEN          IF ( tempForcing .AND. tracForcingOutAB.EQ.1 ) THEN
376            DO j=1-OLy,sNy+OLy            DO j=1-OLy,sNy+OLy
377             DO i=1-OLx,sNx+OLx             DO i=1-OLx,sNx+OLx
378              gT(i,j,k,bi,bj) = gT(i,j,k,bi,bj) + gtForc(i,j)              gT_loc(i,j,k) = gT_loc(i,j,k) + gtForc(i,j)
379             ENDDO             ENDDO
380            ENDDO            ENDDO
381          ENDIF          ENDIF
# Line 380  C--   External thermal forcing term(s) o Line 384  C--   External thermal forcing term(s) o
384          IF (nonlinFreeSurf.GT.0) THEN          IF (nonlinFreeSurf.GT.0) THEN
385            CALL FREESURF_RESCALE_G(            CALL FREESURF_RESCALE_G(
386       I                            bi, bj, k,       I                            bi, bj, k,
387       U                            gT,       U                            gT_loc,
388       I                            myThid )       I                            myThid )
389           IF ( AdamsBashforthGt ) THEN           IF ( AdamsBashforthGt ) THEN
390  #ifdef ALLOW_ADAMSBASHFORTH_3  #ifdef ALLOW_ADAMSBASHFORTH_3
# Line 392  CADJ &     byte=isbyte,  kind = isbyte Line 396  CADJ &     byte=isbyte,  kind = isbyte
396  # endif  # endif
397            CALL FREESURF_RESCALE_G(            CALL FREESURF_RESCALE_G(
398       I                            bi, bj, k,       I                            bi, bj, k,
399       U                            gtNm(1-OLx,1-OLy,1,1,1,1),       U                            gtNm(1-OLx,1-OLy,1,bi,bj,1),
400       I                            myThid )       I                            myThid )
401            CALL FREESURF_RESCALE_G(            CALL FREESURF_RESCALE_G(
402       I                            bi, bj, k,       I                            bi, bj, k,
403       U                            gtNm(1-OLx,1-OLy,1,1,1,2),       U                            gtNm(1-OLx,1-OLy,1,bi,bj,2),
404       I                            myThid )       I                            myThid )
405  #else  #else
406            CALL FREESURF_RESCALE_G(            CALL FREESURF_RESCALE_G(
407       I                            bi, bj, k,       I                            bi, bj, k,
408       U                            gtNm1,       U                            gtNm1(1-OLx,1-OLy,1,bi,bj),
409       I                            myThid )       I                            myThid )
410  #endif  #endif
411           ENDIF           ENDIF
# Line 417  C-    end of vertical index (k) loop (Nr Line 421  C-    end of vertical index (k) loop (Nr
421            CALL DWNSLP_APPLY(            CALL DWNSLP_APPLY(
422       I                  GAD_TEMPERATURE, bi, bj, kSurfC,       I                  GAD_TEMPERATURE, bi, bj, kSurfC,
423       I                  theta(1-OLx,1-OLy,1,bi,bj),       I                  theta(1-OLx,1-OLy,1,bi,bj),
424       U                  gT(1-OLx,1-OLy,1,bi,bj),       U                  gT_loc,
425       I                  recip_hFac, recip_rA, recip_drF,       I                  recip_hFac, recip_rA, recip_drF,
426       I                  dTtracerLev, myTime, myIter, myThid )       I                  dTtracerLev, myTime, myIter, myThid )
427          ELSE          ELSE
428            CALL DWNSLP_APPLY(            CALL DWNSLP_APPLY(
429       I                  GAD_TEMPERATURE, bi, bj, kLowC,       I                  GAD_TEMPERATURE, bi, bj, kLowC,
430       I                  theta(1-OLx,1-OLy,1,bi,bj),       I                  theta(1-OLx,1-OLy,1,bi,bj),
431       U                  gT(1-OLx,1-OLy,1,bi,bj),       U                  gT_loc,
432       I                  recip_hFac, recip_rA, recip_drF,       I                  recip_hFac, recip_rA, recip_drF,
433       I                  dTtracerLev, myTime, myIter, myThid )       I                  dTtracerLev, myTime, myIter, myThid )
434          ENDIF          ENDIF
435        ENDIF        ENDIF
436  #endif /* ALLOW_DOWN_SLOPE */  #endif /* ALLOW_DOWN_SLOPE */
437    
438  C-    Integrate forward in time, storing in gT:  gT <= T + dt*gT  C-    Integrate forward in time, storing in gT_loc:  gT <= T + dt*gT
439        CALL TIMESTEP_TRACER(        CALL TIMESTEP_TRACER(
440       I                  bi, bj, dTtracerLev,       I                  bi, bj, dTtracerLev,
441       I                  theta(1-OLx,1-OLy,1,bi,bj),       I                  theta(1-OLx,1-OLy,1,bi,bj),
442       U                  gT(1-OLx,1-OLy,1,bi,bj),       U                  gT_loc,
443       I                  myTime, myIter, myThid )       I                  myTime, myIter, myThid )
444    
445        iMin = 0        iMin = 0
# Line 449  C--   Implicit vertical advection & diff Line 453  C--   Implicit vertical advection & diff
453        IF ( tempImplVertAdv ) THEN        IF ( tempImplVertAdv ) THEN
454  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
455  CADJ STORE kappaRk(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte  CADJ STORE kappaRk(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte
456  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte  CADJ STORE gT_loc(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte
457  CADJ STORE wFld(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte  CADJ STORE wFld(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte
458  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte
459  CADJ STORE recip_hFac(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte  CADJ STORE recip_hFac(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte
460  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
461          CALL GAD_IMPLICIT_R(          CALL GAD_IMPLICIT_R(
462       I         tempImplVertAdv, tempVertAdvScheme, GAD_TEMPERATURE,       I         tempImplVertAdv, tempVertAdvScheme, GAD_TEMPERATURE,
463       I         dTtracerLev,       I         dTtracerLev, kappaRk, recip_hFac, wFld,
464       I         kappaRk, recip_hFac, wFld, theta,       I         theta(1-OLx,1-OLy,1,bi,bj),
465       U         gT,       U         gT_loc,
466       I         bi, bj, myTime, myIter, myThid )       I         bi, bj, myTime, myIter, myThid )
467        ELSEIF ( implicitDiffusion ) THEN        ELSEIF ( implicitDiffusion ) THEN
468  #else /* INCLUDE_IMPLVERTADV_CODE */  #else /* INCLUDE_IMPLVERTADV_CODE */
# Line 466  CADJ STORE recip_hFac(:,:,:) = comlev1_b Line 470  CADJ STORE recip_hFac(:,:,:) = comlev1_b
470  #endif /* INCLUDE_IMPLVERTADV_CODE */  #endif /* INCLUDE_IMPLVERTADV_CODE */
471  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
472  CADJ STORE kappaRk(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte  CADJ STORE kappaRk(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte
473  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte  CADJ STORE gT_loc(:,:,:) = comlev1_bibj , key=itdkey, byte=isbyte
474  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
475          CALL IMPLDIFF(          CALL IMPLDIFF(
476       I         bi, bj, iMin, iMax, jMin, jMax,       I         bi, bj, iMin, iMax, jMin, jMax,
477       I         GAD_TEMPERATURE, kappaRk, recip_hFac,       I         GAD_TEMPERATURE, kappaRk, recip_hFac,
478       U         gT,       U         gT_loc,
479       I         myThid )       I         myThid )
480        ENDIF        ENDIF
481    
# Line 480  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bib Line 484  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bib
484       &       .OR. useGGL90 .OR. useGMredi .OR. ivdc_kappa.NE.0.       &       .OR. useGGL90 .OR. useGMredi .OR. ivdc_kappa.NE.0.
485        IF ( taveFreq.GT.0. .AND. useVariableK        IF ( taveFreq.GT.0. .AND. useVariableK
486       &                    .AND.implicitDiffusion ) THEN       &                    .AND.implicitDiffusion ) THEN
487          CALL TIMEAVE_CUMUL_DIF_1T(TdiffRtave, gT, kappaRk,          CALL TIMEAVE_CUMUL_DIF_1T( TdiffRtave,
488       I                        Nr, 3, deltaTClock, bi, bj, myThid)       I                        gT_loc, kappaRk,
489         I                        Nr, 3, deltaTClock, bi, bj, myThid )
490        ENDIF        ENDIF
491  #endif /* ALLOW_TIMEAVE */  #endif /* ALLOW_TIMEAVE */
492    
493  #ifdef ALLOW_ADAMSBASHFORTH_3  #ifdef ALLOW_ADAMSBASHFORTH_3
494        IF ( AdamsBashforth_T ) THEN        IF ( AdamsBashforth_T ) THEN
495  C-    Save current tracer field (for AB on tracer) and then update tracer  C-    Save current tracer field (for AB on tracer) and then update tracer
 c       m1 = 1 + MOD(iterNb+1,2)  
         m2 = 1 + MOD( iterNb ,2)  
496          CALL CYCLE_AB_TRACER(          CALL CYCLE_AB_TRACER(
497       I             bi, bj,       I             bi, bj,
498       U             theta, gT, gtNm(1-OLx,1-OLy,1,1,1,m2),       U             theta(1-OLx,1-OLy,1,bi,bj), gT_loc,
499         U             gtNm(1-OLx,1-OLy,1,bi,bj,m2),
500       I             myTime, myIter, myThid )       I             myTime, myIter, myThid )
501        ELSEIF ( tempStepping ) THEN        ELSEIF ( tempStepping ) THEN
502  #else /* ALLOW_ADAMSBASHFORTH_3 */  #else /* ALLOW_ADAMSBASHFORTH_3 */
# Line 501  c       m1 = 1 + MOD(iterNb+1,2) Line 505  c       m1 = 1 + MOD(iterNb+1,2)
505  C-    Update tracer fields:  T(n) = T**  C-    Update tracer fields:  T(n) = T**
506          CALL CYCLE_TRACER(          CALL CYCLE_TRACER(
507       I             bi, bj,       I             bi, bj,
508       U             theta, gT,       U             theta(1-OLx,1-OLy,1,bi,bj), gT_loc,
509       I             myTime, myIter, myThid )       I             myTime, myIter, myThid )
510        ENDIF        ENDIF
511    

Legend:
Removed from v.1.14  
changed lines
  Added in v.1.15

  ViewVC Help
Powered by ViewVC 1.1.22