/[MITgcm]/MITgcm/pkg/ptracers/ptracers_calc_diff.F
ViewVC logotype

Annotation of /MITgcm/pkg/ptracers/ptracers_calc_diff.F

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


Revision 1.4 - (hide annotations) (download)
Thu Sep 27 14:42:59 2007 UTC (16 years, 8 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint59i, checkpoint59h
Changes since 1.3: +11 -10 lines
Added comments, which describe the changes made in kpp_calc_diff_s & _t.F on
April 23, 2007.  These routines no longer update the vertical
diffusivity array (passed as argument) but are (re-) setting those
arrays.  Also changed order GMREDI_CALC_DIFF & KPP_CALC_DIFF_T in
calc_diffusivity.F and ptracers_calc_diff.F since now the order matters.

1 dimitri 1.4 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_calc_diff.F,v 1.3 2007/04/23 20:46:49 dimitri Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "PTRACERS_OPTIONS.h"
5    
6     CBOP
7     C !ROUTINE: PTRACERS_CALC_DIFF
8     C !INTERFACE:
9     SUBROUTINE PTRACERS_CALC_DIFF(
10     I bi,bj,iMin,iMax,jMin,jMax,k,
11     I maskUp,
12     O KappaRtr,
13     I myThid)
14    
15     C !DESCRIPTION: \bv
16     C *==========================================================*
17     C | SUBROUTINE PTRACERS_CALC_DIFF
18     C | o Calculate net vertical diffusivity for passive tracers
19     C *==========================================================*
20     C | Combines spatially varying diffusion coefficients from
21     C | KPP and/or GM and/or convective stability test.
22     C *==========================================================*
23     C \ev
24    
25     C !USES:
26     IMPLICIT NONE
27     C == GLobal variables ==
28     #include "SIZE.h"
29     #include "EEPARAMS.h"
30     #include "PARAMS.h"
31     #include "GRID.h"
32     #include "DYNVARS.h"
33     #include "PTRACERS_SIZE.h"
34     #include "PTRACERS.h"
35     c #include "GAD.h"
36    
37     C !INPUT/OUTPUT PARAMETERS:
38     C == Routine arguments ==
39     C bi, bj :: tile indices
40     C iMin,iMax :: Range of points for which calculation is performed.
41     C jMin,jMax :: Range of points for which calculation is performed.
42     C maskUp :: land/water mask for Wvel points (above tracer level)
43     C myThid :: Instance number for this innvocation of PTRACERS_CALC_DIFF
44     C KappaRtr :: Net diffusivity for temperature
45     C KappaRS :: Net diffusivity for salinity
46     INTEGER bi,bj,iMin,iMax,jMin,jMax,k
47     _RS maskUp(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
48     _RL KappaRtr(1-Olx:sNx+Olx,1-Oly:sNy+Oly,PTRACERS_num)
49     INTEGER myThid
50    
51     C !LOCAL VARIABLES:
52     C == Local variables ==
53     C I, J :: Loop counters
54     INTEGER i,j,iTr
55 dimitri 1.3 _RL KbryanLewis79, KbryanLewisEQ
56 jmc 1.1 CEOP
57    
58     KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
59 dimitri 1.3 & *(atan(-(rF(k)-diffKrBL79Ho)/diffKrBL79scl)/PI+0.5 _d 0)
60     #ifdef ALLOW_BL79_LAT_VARY
61     KbryanLewisEQ=diffKrBLEQsurf+(diffKrBLEQdeep-diffKrBLEQsurf)
62     & *(atan(-(rF(k)-diffKrBLEQHo)/diffKrBLEQscl)/PI+0.5 _d 0)
63     #endif
64 jmc 1.1
65     C Loop over tracers
66     DO iTr=1,PTRACERS_numInUse
67    
68 dimitri 1.3 IF ( .NOT. PTRACERS_useKPP(iTr) ) THEN
69 jmc 1.1 DO j = 1-Oly, sNy+Oly
70     DO i = 1-Olx, sNx+Olx
71     KappaRtr(i,j,iTr) =
72     & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
73 dimitri 1.3 #if (defined ALLOW_3D_DIFFKR || \
74     (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
75 jmc 1.1 & + diffKr(i,j,k,bi,bj)
76     #else
77     & + PTRACERS_diffKrNr(k,iTr)
78     #endif
79     & + KbryanLewis79
80 dimitri 1.3 #ifdef ALLOW_BL79_LAT_VARY
81     & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
82     #endif
83 jmc 1.1 ENDDO
84     ENDDO
85 dimitri 1.3 ENDIF
86 jmc 1.1
87 dimitri 1.4 #ifdef ALLOW_KPP
88     IF ( PTRACERS_useKPP(iTr) ) THEN
89     C-- Set vertical diffusivity contribution from KPP
90     CALL KPP_CALC_DIFF_S(
91     I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
92     O KappaRtr(1-Olx,1-Oly,iTr),
93     I myThid)
94     ENDIF
95     #endif
96    
97 jmc 1.1 #ifdef ALLOW_GMREDI
98     IF ( PTRACERS_useGMRedi(iTr) ) THEN
99     CALL GMREDI_CALC_DIFF(
100     I bi,bj,iMin,iMax,jMin,jMax,k,1,
101     U KappaRtr(1-Olx,1-Oly,iTr),
102     I myThid)
103     ENDIF
104     #endif
105    
106     #ifdef ALLOW_PP81
107     IF (usePP81) THEN
108     CALL PP81_CALC_DIFF(
109     I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
110     U KappaRtr(1-Olx,1-Oly,iTr),
111     I myThid)
112     ENDIF
113     #endif
114    
115     #ifdef ALLOW_MY82
116     IF (useMY82) THEN
117     CALL MY82_CALC_DIFF(
118     I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
119     U KappaRtr(1-Olx,1-Oly,iTr),
120     I myThid)
121     ENDIF
122     #endif
123    
124     #ifdef ALLOW_GGL90
125     IF (useGGL90) THEN
126     CALL GGL90_CALC_DIFF(
127     I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
128     U KappaRtr(1-Olx,1-Oly,iTr),
129     I myThid)
130     ENDIF
131     #endif
132    
133     C- Apply mask to vertical diffusivity
134     C jmc: don't have the impression that masking is needed
135     C but could be removed later if it's the case.
136     DO j = 1-Oly, sNy+Oly
137     DO i = 1-Olx, sNx+Olx
138     KappaRtr(i,j,iTr) = maskUp(i,j)*KappaRtr(i,j,iTr)
139     ENDDO
140     ENDDO
141    
142     C end of tracer loop
143     ENDDO
144    
145     RETURN
146     END

  ViewVC Help
Powered by ViewVC 1.1.22