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

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

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

revision 1.29 by heimbach, Tue Nov 12 20:45:41 2002 UTC revision 1.30 by heimbach, Fri Nov 15 03:01:21 2002 UTC
# Line 83  C     == Global variables === Line 83  C     == Global variables ===
83  # include "tamc.h"  # include "tamc.h"
84  # include "tamc_keys.h"  # include "tamc_keys.h"
85  # include "FFIELDS.h"  # include "FFIELDS.h"
86    # include "EOS.h"
87  # ifdef ALLOW_KPP  # ifdef ALLOW_KPP
88  #  include "KPP.h"  #  include "KPP.h"
89  # endif  # endif
# Line 164  CEOP Line 165  CEOP
165  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
166  C--   dummy statement to end declaration part  C--   dummy statement to end declaration part
167        ikey = 1        ikey = 1
168          itdkey = 1
169  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
170    
171  C--   Set up work arrays with valid (i.e. not NaN) values  C--   Set up work arrays with valid (i.e. not NaN) values
# Line 209  CHPF$&                  ) Line 211  CHPF$&                  )
211            act3 = myThid - 1            act3 = myThid - 1
212            max3 = nTx*nTy            max3 = nTx*nTy
213            act4 = ikey_dynamics - 1            act4 = ikey_dynamics - 1
214            ikey = (act1 + 1) + act2*max1            itdkey = (act1 + 1) + act2*max1
215       &                      + act3*max1*max2       &                      + act3*max1*max2
216       &                      + act4*max1*max2*max3       &                      + act4*max1*max2*max3
217  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
# Line 232  C--     Set up work arrays that need val Line 234  C--     Set up work arrays that need val
234           DO j=1-OLy,sNy+OLy           DO j=1-OLy,sNy+OLy
235            DO i=1-OLx,sNx+OLx            DO i=1-OLx,sNx+OLx
236  C This is currently also used by IVDC and Diagnostics  C This is currently also used by IVDC and Diagnostics
237             phiHyd(i,j,k)  = 0. _d 0             phiHyd(i,j,k) = 0. _d 0
238             sigmaX(i,j,k) = 0. _d 0             sigmaX(i,j,k) = 0. _d 0
239             sigmaY(i,j,k) = 0. _d 0             sigmaY(i,j,k) = 0. _d 0
240             sigmaR(i,j,k) = 0. _d 0             sigmaR(i,j,k) = 0. _d 0
241             ConvectCount(i,j,k) = 0.             ConvectCount(i,j,k) = 0.
242             KappaRT(i,j,k) = 0. _d 0             KappaRT(i,j,k)    = 0. _d 0
243             KappaRS(i,j,k) = 0. _d 0             KappaRS(i,j,k)    = 0. _d 0
244  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
245             gT(i,j,k,bi,bj) = 0. _d 0  cph all the following init. are necessary for TAF
246             gS(i,j,k,bi,bj) = 0. _d 0  cph although some of these are re-initialised later.
247  #ifdef ALLOW_PASSIVE_TRACER             gT(i,j,k,bi,bj)   = 0. _d 0
248               gS(i,j,k,bi,bj)   = 0. _d 0
249    # ifdef ALLOW_PASSIVE_TRACER
250             gTr1(i,j,k,bi,bj) = 0. _d 0             gTr1(i,j,k,bi,bj) = 0. _d 0
251  #endif  # endif
252  #ifdef ALLOW_GMREDI  # ifdef ALLOW_GMREDI
253             Kwx(i,j,k,bi,bj)    = 0. _d 0             Kwx(i,j,k,bi,bj)  = 0. _d 0
254             Kwy(i,j,k,bi,bj)    = 0. _d 0             Kwy(i,j,k,bi,bj)  = 0. _d 0
255             Kwz(i,j,k,bi,bj)    = 0. _d 0             Kwz(i,j,k,bi,bj)  = 0. _d 0
256  #ifdef GM_NON_UNITY_DIAGONAL  #  ifdef GM_NON_UNITY_DIAGONAL
257             Kux(i,j,k,bi,bj)    = 0. _d 0             Kux(i,j,k,bi,bj)  = 0. _d 0
258             Kvy(i,j,k,bi,bj)    = 0. _d 0             Kvy(i,j,k,bi,bj)  = 0. _d 0
259  #endif  #  endif
260  #endif /* ALLOW_GMREDI */  #  ifdef GM_EXTRA_DIAGONAL
261  #endif             Kuz(i,j,k,bi,bj)  = 0. _d 0
262               Kvz(i,j,k,bi,bj)  = 0. _d 0
263    #  endif
264    #  ifdef GM_BOLUS_ADVEC
265               GM_PsiX(i,j,k,bi,bj)  = 0. _d 0
266               GM_PsiY(i,j,k,bi,bj)  = 0. _d 0
267    #  endif
268    # endif /* ALLOW_GMREDI */
269    #endif /* ALLOW_AUTODIFF_TAMC */
270            ENDDO            ENDDO
271           ENDDO           ENDDO
272          ENDDO          ENDDO
# Line 266  C This is currently also used by IVDC an Line 278  C This is currently also used by IVDC an
278    
279    
280  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
281  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
282  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
283  #ifdef ALLOW_KPP  #ifdef ALLOW_KPP
284  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
285  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
286  #endif  #endif
287  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
288    
# Line 282  C? Patrick, is this formula correct now Line 294  C? Patrick, is this formula correct now
294  C? Do we still need this?  C? Do we still need this?
295  cph kkey formula corrected.  cph kkey formula corrected.
296  cph Needed for rhok, rhokm1, in the case useGMREDI.  cph Needed for rhok, rhokm1, in the case useGMREDI.
297           kkey = (ikey-1)*Nr + k           kkey = (itdkey-1)*Nr + k
 CADJ STORE rhokm1(:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte  
 CADJ STORE rhok  (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte  
298  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
299    
300  C--       Integrate continuity vertically for vertical velocity  C--       Integrate continuity vertically for vertical velocity
# Line 313  c         IF ( k.GT.1 .AND. (useGMRedi.O Line 323  c         IF ( k.GT.1 .AND. (useGMRedi.O
323  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
324  CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE theta(:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
325  CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE salt (:,:,k,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
326    CADJ STORE pressure(:,:,k,bi,bj) =
327    CADJ &     comlev1_bibj_k, key=kkey, byte=isbyte
328  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
329              CALL FIND_RHO(              CALL FIND_RHO(
330       I        bi, bj, iMin, iMax, jMin, jMax, k, k,       I        bi, bj, iMin, iMax, jMin, jMax, k, k,
331       I        theta, salt,       I        theta, salt,
332       O        rhoK,       O        rhoK,
333       I        myThid )       I        myThid )
334    
335              IF (k.GT.1) THEN              IF (k.GT.1) THEN
336  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
337  CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE theta(:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
338  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte  CADJ STORE salt (:,:,k-1,bi,bj) = comlev1_bibj_k, key=kkey, byte=isbyte
339    CADJ STORE pressure(:,:,k-1,bi,bj) =
340    CADJ &     comlev1_bibj_k, key=kkey, byte=isbyte
341  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
342               CALL FIND_RHO(               CALL FIND_RHO(
343       I        bi, bj, iMin, iMax, jMin, jMax, k-1, k,       I        bi, bj, iMin, iMax, jMin, jMax, k-1, k,
# Line 337  CADJ STORE salt (:,:,k-1,bi,bj) = comlev Line 352  CADJ STORE salt (:,:,k-1,bi,bj) = comlev
352       I             myThid )       I             myThid )
353            ENDIF            ENDIF
354    
355    #ifdef ALLOW_AUTODIFF_TAMC
356    CADJ STORE rhok   (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte
357    CADJ STORE rhokm1 (:,:) = comlev1_bibj_k ,       key=kkey, byte=isbyte
358    #endif /* ALLOW_AUTODIFF_TAMC */
359  C--       Implicit Vertical Diffusion for Convection  C--       Implicit Vertical Diffusion for Convection
360  c ==> should use sigmaR !!!  c ==> should use sigmaR !!!
361            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN            IF (k.GT.1 .AND. ivdc_kappa.NE.0.) THEN
# Line 354  C--     end of diagnostic k loop (Nr:1) Line 373  C--     end of diagnostic k loop (Nr:1)
373    
374  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
375  cph avoids recomputation of integrate_for_w  cph avoids recomputation of integrate_for_w
376  CADJ STORE wvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE wvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
377    CADJ STORE pressure (:,:,:,bi,bj) =
378    CADJ &     comlev1_bibj, key=itdkey, byte=isbyte
379  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
380    
381  #ifdef  ALLOW_OBCS  #ifdef  ALLOW_OBCS
# Line 374  C       relaxation terms, etc. Line 395  C       relaxation terms, etc.
395  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
396  cph needed for KPP  cph needed for KPP
397  CADJ STORE surfacetendencyU(:,:,bi,bj)  CADJ STORE surfacetendencyU(:,:,bi,bj)
398  CADJ &     = comlev1_bibj, key=ikey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
399  CADJ STORE surfacetendencyV(:,:,bi,bj)  CADJ STORE surfacetendencyV(:,:,bi,bj)
400  CADJ &     = comlev1_bibj, key=ikey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
401  CADJ STORE surfacetendencyS(:,:,bi,bj)  CADJ STORE surfacetendencyS(:,:,bi,bj)
402  CADJ &     = comlev1_bibj, key=ikey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
403  CADJ STORE surfacetendencyT(:,:,bi,bj)  CADJ STORE surfacetendencyT(:,:,bi,bj)
404  CADJ &     = comlev1_bibj, key=ikey, byte=isbyte  CADJ &     = comlev1_bibj, key=itdkey, byte=isbyte
405  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
406    
407  C--     Attention: by defining "SINGLE_LAYER_MODE" in CPP_OPTIONS.h  C--     Attention: by defining "SINGLE_LAYER_MODE" in CPP_OPTIONS.h
# Line 410  C--     Calculate iso-neutral slopes for Line 431  C--     Calculate iso-neutral slopes for
431          ENDIF          ENDIF
432    
433  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
434  CADJ STORE Kwx(:,:,:,bi,bj)   = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE Kwx(:,:,:,bi,bj)   = comlev1_bibj, key=itdkey, byte=isbyte
435  CADJ STORE Kwy(:,:,:,bi,bj)   = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE Kwy(:,:,:,bi,bj)   = comlev1_bibj, key=itdkey, byte=isbyte
436  CADJ STORE Kwz(:,:,:,bi,bj)   = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE Kwz(:,:,:,bi,bj)   = comlev1_bibj, key=itdkey, byte=isbyte
437  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
438    
439  #endif  /* ALLOW_GMREDI */  #endif  /* ALLOW_GMREDI */
# Line 434  CADJ STORE KPPghat   (:,:,:,bi,bj) Line 455  CADJ STORE KPPghat   (:,:,:,bi,bj)
455  CADJ &   , KPPdiffKzT(:,:,:,bi,bj)  CADJ &   , KPPdiffKzT(:,:,:,bi,bj)
456  CADJ &   , KPPdiffKzS(:,:,:,bi,bj)  CADJ &   , KPPdiffKzS(:,:,:,bi,bj)
457  CADJ &   , KPPfrac   (:,:  ,bi,bj)  CADJ &   , KPPfrac   (:,:  ,bi,bj)
458  CADJ &                 = comlev1_bibj, key=ikey, byte=isbyte  CADJ &                 = comlev1_bibj, key=itdkey, byte=isbyte
459  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
460    
461  #endif  /* ALLOW_KPP */  #endif  /* ALLOW_KPP */
462    
463  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
464  CADJ STORE KappaRT(:,:,:)     = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE KappaRT(:,:,:)     = comlev1_bibj, key=itdkey, byte=isbyte
465  CADJ STORE KappaRS(:,:,:)     = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE KappaRS(:,:,:)     = comlev1_bibj, key=itdkey, byte=isbyte
466  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
467  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
468  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
469  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
470  #ifdef ALLOW_PASSIVE_TRACER  #ifdef ALLOW_PASSIVE_TRACER
471  CADJ STORE tr1  (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte  CADJ STORE tr1  (:,:,:,bi,bj) = comlev1_bibj, key=itdkey, byte=isbyte
472  #endif  #endif
473  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
474    
# Line 505  C--     Start of thermodynamics loop Line 526  C--     Start of thermodynamics loop
526  C? Patrick Is this formula correct?  C? Patrick Is this formula correct?
527  cph Yes, but I rewrote it.  cph Yes, but I rewrote it.
528  cph Also, the KappaR? need the index and subscript k!  cph Also, the KappaR? need the index and subscript k!
529           kkey = (ikey-1)*Nr + k           kkey = (itdkey-1)*Nr + k
530  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
531    
532  C--       km1    Points to level above k (=k-1)  C--       km1    Points to level above k (=k-1)
# Line 630  C--     Implicit diffusion Line 651  C--     Implicit diffusion
651    
652           IF (tempStepping) THEN           IF (tempStepping) THEN
653  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
654  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte
655  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
656              CALL IMPLDIFF(              CALL IMPLDIFF(
657       I         bi, bj, iMin, iMax, jMin, jMax,       I         bi, bj, iMin, iMax, jMin, jMax,
# Line 641  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bib Line 662  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bib
662    
663           IF (saltStepping) THEN           IF (saltStepping) THEN
664  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
665  CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte  CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte
666  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
667              CALL IMPLDIFF(              CALL IMPLDIFF(
668       I         bi, bj, iMin, iMax, jMin, jMax,       I         bi, bj, iMin, iMax, jMin, jMax,
# Line 653  CADJ STORE gS(:,:,:,bi,bj) = comlev1_bib Line 674  CADJ STORE gS(:,:,:,bi,bj) = comlev1_bib
674  #ifdef ALLOW_PASSIVE_TRACER  #ifdef ALLOW_PASSIVE_TRACER
675           IF (tr1Stepping) THEN           IF (tr1Stepping) THEN
676  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
677  CADJ STORE gTr1(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte  CADJ STORE gTr1(:,:,:,bi,bj) = comlev1_bibj , key=itdkey, byte=isbyte
678  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
679            CALL IMPLDIFF(            CALL IMPLDIFF(
680       I      bi, bj, iMin, iMax, jMin, jMax,       I      bi, bj, iMin, iMax, jMin, jMax,

Legend:
Removed from v.1.29  
changed lines
  Added in v.1.30

  ViewVC Help
Powered by ViewVC 1.1.22