/[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.10 by adcroft, Thu Sep 27 18:06:43 2001 UTC revision 1.14 by jmc, Fri Nov 16 03:25:41 2001 UTC
# Line 151  C     This is currently used by IVDC and Line 151  C     This is currently used by IVDC and
151        INTEGER i, j        INTEGER i, j
152        INTEGER k, km1, kup, kDown        INTEGER k, km1, kup, kDown
153    
 Cjmc : add for phiHyd output <- but not working if multi tile per CPU  
 c     CHARACTER*(MAX_LEN_MBUF) suff  
 c     LOGICAL  DIFFERENT_MULTIPLE  
 c     EXTERNAL DIFFERENT_MULTIPLE  
 Cjmc(end)  
154  CEOP  CEOP
155    
156  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
# Line 208  CHPF$&                  ) Line 203  CHPF$&                  )
203  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
204            act1 = bi - myBxLo(myThid)            act1 = bi - myBxLo(myThid)
205            max1 = myBxHi(myThid) - myBxLo(myThid) + 1            max1 = myBxHi(myThid) - myBxLo(myThid) + 1
   
206            act2 = bj - myByLo(myThid)            act2 = bj - myByLo(myThid)
207            max2 = myByHi(myThid) - myByLo(myThid) + 1            max2 = myByHi(myThid) - myByLo(myThid) + 1
   
208            act3 = myThid - 1            act3 = myThid - 1
209            max3 = nTx*nTy            max3 = nTx*nTy
   
210            act4 = ikey_dynamics - 1            act4 = ikey_dynamics - 1
   
211            ikey = (act1 + 1) + act2*max1            ikey = (act1 + 1) + act2*max1
212       &                      + act3*max1*max2       &                      + act3*max1*max2
213       &                      + act4*max1*max2*max3       &                      + act4*max1*max2*max3
# Line 260  C This is currently also used by IVDC an Line 251  C This is currently also used by IVDC an
251    
252    
253  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
254  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte
255  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte
256    #ifdef ALLOW_KPP
257    CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte
258    CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte
259    #endif
260  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
261    
262  C--     Start of diagnostic loop  C--     Start of diagnostic loop
# Line 338  C--     end of diagnostic k loop (Nr:1) Line 333  C--     end of diagnostic k loop (Nr:1)
333    
334  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
335  cph avoids recomputation of integrate_for_w  cph avoids recomputation of integrate_for_w
336  CADJ STORE wvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE wvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte
337  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
338    
339  #ifdef  ALLOW_OBCS  #ifdef  ALLOW_OBCS
# Line 415  C--     Compute KPP mixing coefficients Line 410  C--     Compute KPP mixing coefficients
410    
411  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
412  CADJ STORE KPPghat   (:,:,:,bi,bj)  CADJ STORE KPPghat   (:,:,:,bi,bj)
 CADJ &   , KPPviscAz (:,:,:,bi,bj)  
413  CADJ &   , KPPdiffKzT(:,:,:,bi,bj)  CADJ &   , KPPdiffKzT(:,:,:,bi,bj)
414  CADJ &   , KPPdiffKzS(:,:,:,bi,bj)  CADJ &   , KPPdiffKzS(:,:,:,bi,bj)
415  CADJ &   , KPPfrac   (:,:  ,bi,bj)  CADJ &   , KPPfrac   (:,:  ,bi,bj)
# Line 425  CADJ &                 = comlev1_bibj, k Line 419  CADJ &                 = comlev1_bibj, k
419  #endif  /* ALLOW_KPP */  #endif  /* ALLOW_KPP */
420    
421  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
422  CADJ STORE KappaRT(:,:,:)     = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE KappaRT(:,:,:)     = comlev1_bibj, key=ikey, byte=isbyte
423  CADJ STORE KappaRS(:,:,:)     = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE KappaRS(:,:,:)     = comlev1_bibj, key=ikey, byte=isbyte
424  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE theta(:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte
425  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE salt (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte
426  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE uvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte
427  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE vvel (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte
428  #ifdef ALLOW_PASSIVE_TRACER  #ifdef ALLOW_PASSIVE_TRACER
429  CADJ STORE tr1  (:,:,:,bi,bj) = comlev1_bibj, key = ikey, byte = isbyte  CADJ STORE tr1  (:,:,:,bi,bj) = comlev1_bibj, key=ikey, byte=isbyte
430  #endif  #endif
431  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
432    
# Line 446  C note(jmc) : phiHyd=0 at this point but Line 440  C note(jmc) : phiHyd=0 at this point but
440          ENDIF          ENDIF
441  #endif /* ALLOW_AIM */  #endif /* ALLOW_AIM */
442    
443    #ifdef ALLOW_TIMEAVE
444            IF (taveFreq.GT.0. .AND. ivdc_kappa.NE.0.) THEN
445              CALL TIMEAVE_CUMULATE(ConvectCountTave, ConvectCount, Nr,
446         I                               deltaTclock, bi, bj, myThid)
447            ENDIF
448    #endif /* ALLOW_TIMEAVE */
449    
450    #ifndef DISABLE_MULTIDIM_ADVECTION
451  C--     Some advection schemes are better calculated using a multi-dimensional  C--     Some advection schemes are better calculated using a multi-dimensional
452  C       method in the absence of any other terms and, if used, is done here.  C       method in the absence of any other terms and, if used, is done here.
453    C
454    C The CPP flag DISABLE_MULTIDIM_ADVECTION is currently unset in GAD_OPTIONS.h
455    C The default is to use multi-dimensinal advection for non-linear advection
456    C schemes. However, for the sake of efficiency of the adjoint it is necessary
457    C to be able to exclude this scheme to avoid excessive storage and
458    C recomputation. It *is* differentiable, if you need it.
459    C Edit GAD_OPTIONS.h and #define DISABLE_MULTIDIM_ADVECTION to
460    C disable this section of code.
461          IF (multiDimAdvection) THEN          IF (multiDimAdvection) THEN
462           IF (tempStepping .AND.           IF (tempStepping .AND.
463       &       tempAdvScheme.NE.ENUM_CENTERED_2ND .AND.       &       tempAdvScheme.NE.ENUM_CENTERED_2ND .AND.
464       &       tempAdvScheme.NE.ENUM_UPWIND_3RD .AND.       &       tempAdvScheme.NE.ENUM_UPWIND_3RD .AND.
465       &       tempAdvScheme.NE.ENUM_CENTERED_4TH )       &       tempAdvScheme.NE.ENUM_CENTERED_4TH ) THEN
466       &   CALL GAD_ADVECTION(bi,bj,tempAdvScheme,GAD_TEMPERATURE,theta,            CALL GAD_ADVECTION(bi,bj,tempAdvScheme,GAD_TEMPERATURE,
467       U                      gT,       U                      theta,gT,
468       I                      myTime,myIter,myThid)       I                      myTime,myIter,myThid)
469             ENDIF
470           IF (saltStepping .AND.           IF (saltStepping .AND.
471       &       saltAdvScheme.NE.ENUM_CENTERED_2ND .AND.       &       saltAdvScheme.NE.ENUM_CENTERED_2ND .AND.
472       &       saltAdvScheme.NE.ENUM_UPWIND_3RD .AND.       &       saltAdvScheme.NE.ENUM_UPWIND_3RD .AND.
473       &       saltAdvScheme.NE.ENUM_CENTERED_4TH )       &       saltAdvScheme.NE.ENUM_CENTERED_4TH ) THEN
474       &   CALL GAD_ADVECTION(bi,bj,saltAdvScheme,GAD_SALINITY,salt,            CALL GAD_ADVECTION(bi,bj,saltAdvScheme,GAD_SALINITY,
475       U                      gS,       U                      salt,gS,
476       I                      myTime,myIter,myThid)       I                      myTime,myIter,myThid)
477             ENDIF
478          ENDIF          ENDIF
479    #endif /* DISABLE_MULTIDIM_ADVECTION */
480    
481  C--     Start of thermodynamics loop  C--     Start of thermodynamics loop
482          DO k=Nr,1,-1          DO k=Nr,1,-1
# Line 525  C        and step forward storing result Line 537  C        and step forward storing result
537             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
538       I         bi,bj,iMin,iMax,jMin,jMax,k,tempAdvScheme,       I         bi,bj,iMin,iMax,jMin,jMax,k,tempAdvScheme,
539       I         theta, gT,       I         theta, gT,
      U         gTnm1,  
540       I         myIter, myThid)       I         myIter, myThid)
541           ENDIF           ENDIF
542           IF ( saltStepping ) THEN           IF ( saltStepping ) THEN
# Line 538  C        and step forward storing result Line 549  C        and step forward storing result
549             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
550       I         bi,bj,iMin,iMax,jMin,jMax,k,saltAdvScheme,       I         bi,bj,iMin,iMax,jMin,jMax,k,saltAdvScheme,
551       I         salt, gS,       I         salt, gS,
      U         gSnm1,  
552       I         myIter, myThid)       I         myIter, myThid)
553           ENDIF           ENDIF
554  #ifdef ALLOW_PASSIVE_TRACER  #ifdef ALLOW_PASSIVE_TRACER
# Line 552  C        and step forward storing result Line 562  C        and step forward storing result
562             CALL TIMESTEP_TRACER(             CALL TIMESTEP_TRACER(
563       I         bi,bj,iMin,iMax,jMin,jMax,k,tracerAdvScheme,       I         bi,bj,iMin,iMax,jMin,jMax,k,tracerAdvScheme,
564       I         Tr1, gTr1,       I         Tr1, gTr1,
      U         gTr1NM1,  
565       I         myIter,myThid)       I         myIter,myThid)
566           ENDIF           ENDIF
567  #endif  #endif
# Line 567  C--      Apply open boundary conditions Line 576  C--      Apply open boundary conditions
576  C--      Freeze water  C--      Freeze water
577           IF (allowFreezing) THEN           IF (allowFreezing) THEN
578  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
579  CADJ STORE gTNm1(:,:,k,bi,bj) = comlev1_bibj_k  CADJ STORE gT(:,:,k,bi,bj) = comlev1_bibj_k
580  CADJ &   , key = kkey, byte = isbyte  CADJ &   , key = kkey, byte = isbyte
581  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
582              CALL FREEZE( bi, bj, iMin, iMax, jMin, jMax, k, myThid )              CALL FREEZE( bi, bj, iMin, iMax, jMin, jMax, k, myThid )
# Line 593  C--     Implicit diffusion Line 602  C--     Implicit diffusion
602           IF (tempStepping) THEN           IF (tempStepping) THEN
603  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
604              idkey = iikey + 1              idkey = iikey + 1
605  CADJ STORE gTNm1(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte  CADJ STORE gT(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte
606  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
607              CALL IMPLDIFF(              CALL IMPLDIFF(
608       I         bi, bj, iMin, iMax, jMin, jMax,       I         bi, bj, iMin, iMax, jMin, jMax,
# Line 605  CADJ STORE gTNm1(:,:,:,bi,bj) = comlev1_ Line 614  CADJ STORE gTNm1(:,:,:,bi,bj) = comlev1_
614           IF (saltStepping) THEN           IF (saltStepping) THEN
615  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
616           idkey = iikey + 2           idkey = iikey + 2
617  CADJ STORE gSNm1(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte  CADJ STORE gS(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte
618  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
619              CALL IMPLDIFF(              CALL IMPLDIFF(
620       I         bi, bj, iMin, iMax, jMin, jMax,       I         bi, bj, iMin, iMax, jMin, jMax,
# Line 617  CADJ STORE gSNm1(:,:,:,bi,bj) = comlev1_ Line 626  CADJ STORE gSNm1(:,:,:,bi,bj) = comlev1_
626  #ifdef ALLOW_PASSIVE_TRACER  #ifdef ALLOW_PASSIVE_TRACER
627           IF (tr1Stepping) THEN           IF (tr1Stepping) THEN
628  #ifdef ALLOW_AUTODIFF_TAMC  #ifdef ALLOW_AUTODIFF_TAMC
629  CADJ STORE gTr1Nm1(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte  CADJ STORE gTr1(:,:,:,bi,bj) = comlev1_bibj , key=ikey, byte=isbyte
630  #endif /* ALLOW_AUTODIFF_TAMC */  #endif /* ALLOW_AUTODIFF_TAMC */
631            CALL IMPLDIFF(            CALL IMPLDIFF(
632       I      bi, bj, iMin, iMax, jMin, jMax,       I      bi, bj, iMin, iMax, jMin, jMax,

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

  ViewVC Help
Powered by ViewVC 1.1.22