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

Contents of /MITgcm/model/src/calc_diffusivity.F

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


Revision 1.34 - (show annotations) (download)
Thu Sep 27 14:42:59 2007 UTC (16 years, 7 months ago) by dimitri
Branch: MAIN
CVS Tags: checkpoint59m, checkpoint59l, checkpoint59n, checkpoint59i, checkpoint59h, checkpoint59k, checkpoint59j
Changes since 1.33: +15 -14 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 C $Header: /u/gcmpack/MITgcm/model/src/calc_diffusivity.F,v 1.33 2007/09/04 16:49:44 jmc Exp $
2 C $Name: $
3
4 #include "PACKAGES_CONFIG.h"
5 #include "CPP_OPTIONS.h"
6
7 CBOP
8 C !ROUTINE: CALC_DIFFUSIVITY
9 C !INTERFACE:
10 SUBROUTINE CALC_DIFFUSIVITY(
11 I bi,bj,iMin,iMax,jMin,jMax,k,
12 I maskUp,
13 O KappaRT,KappaRS,
14 I myThid)
15
16 C !DESCRIPTION: \bv
17 C *==========================================================*
18 C | SUBROUTINE CALC_DIFFUSIVITY
19 C | o Calculate net vertical diffusivity
20 C *==========================================================*
21 C | Combines spatially varying diffusion coefficients from
22 C | KPP and/or GM and/or convective stability test.
23 C *==========================================================*
24 C \ev
25
26 C !USES:
27 IMPLICIT NONE
28 C == GLobal variables ==
29 #include "SIZE.h"
30 #include "EEPARAMS.h"
31 #include "PARAMS.h"
32 #include "DYNVARS.h"
33 #include "GRID.h"
34
35 C !INPUT/OUTPUT PARAMETERS:
36 C == Routine arguments ==
37 C bi, bj, :: tile indices
38 C iMin, :: Range of points for which calculation is performed.
39 C iMax,
40 C jMin,
41 C jMax
42 C maskUp :: land/water mask for Wvel points (above tracer level)
43 C myThid :: Instance number for this innvocation of CALC_DIFFUSIVITY
44 C KappaRT :: 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 KappaRT(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
49 _RL KappaRS(1-Olx:sNx+Olx,1-Oly:sNy+Oly)
50 INTEGER myThid
51
52 C !LOCAL VARIABLES:
53 C == Local variables ==
54 C I, J :: Loop counters
55 INTEGER i,j
56 _RL KbryanLewis79
57 #ifdef ALLOW_BL79_LAT_VARY
58 _RL KbryanLewisEQ
59 #endif
60 CEOP
61
62 IF ( .NOT. UseKPP ) THEN
63 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
64 & *(atan(-(rF(k)-diffKrBL79Ho)/diffKrBL79scl)/PI+0.5 _d 0)
65 #ifdef ALLOW_BL79_LAT_VARY
66 KbryanLewisEQ=diffKrBLEQsurf+(diffKrBLEQdeep-diffKrBLEQsurf)
67 & *(atan(-(rF(k)-diffKrBLEQHo)/diffKrBLEQscl)/PI+0.5 _d 0)
68 #endif
69
70 DO j = 1-Oly, sNy+Oly
71 DO i = 1-Olx, sNx+Olx
72 KappaRT(i,j) =
73 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
74 #if (defined ALLOW_3D_DIFFKR || \
75 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
76 & + diffKr(i,j,k,bi,bj)
77 #else
78 & + diffKrNrT(k)
79 #endif
80 & + KbryanLewis79
81 #ifdef ALLOW_BL79_LAT_VARY
82 & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
83 #endif
84 ENDDO
85 ENDDO
86
87 DO j = 1-Oly, sNy+Oly
88 DO i = 1-Olx, sNx+Olx
89 KappaRS(i,j) =
90 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
91 #if (defined ALLOW_3D_DIFFKR || \
92 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
93 & + diffKr(i,j,k,bi,bj)
94 #else
95 & + diffKrNrS(k)
96 #endif
97 & + KbryanLewis79
98 #ifdef ALLOW_BL79_LAT_VARY
99 & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
100 #endif
101 ENDDO
102 ENDDO
103 ENDIF
104
105 #ifdef ALLOW_KPP
106 IF (useKPP) THEN
107 C-- Set vertical diffusivity contribution from KPP
108 CALL KPP_CALC_DIFF_T(
109 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
110 O KappaRT,
111 I myThid)
112 CALL KPP_CALC_DIFF_S(
113 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
114 O KappaRS,
115 I myThid)
116 ENDIF
117 #endif
118
119 #ifdef ALLOW_GMREDI
120 IF (useGMRedi) THEN
121 CALL GMREDI_CALC_DIFF(
122 I bi,bj,iMin,iMax,jMin,jMax,k,1,
123 U KappaRT,
124 I myThid)
125 CALL GMREDI_CALC_DIFF(
126 I bi,bj,iMin,iMax,jMin,jMax,k,1,
127 U KappaRS,
128 I myThid)
129 ENDIF
130 #endif
131
132 #ifdef ALLOW_PP81
133 IF (usePP81) THEN
134 CALL PP81_CALC_DIFF(
135 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
136 U KappaRT,
137 I myThid)
138 CALL PP81_CALC_DIFF(
139 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
140 U KappaRS,
141 I myThid)
142 ENDIF
143 #endif
144
145 #ifdef ALLOW_MY82
146 IF (useMY82) THEN
147 CALL MY82_CALC_DIFF(
148 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
149 U KappaRT,
150 I myThid)
151 CALL MY82_CALC_DIFF(
152 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
153 U KappaRS,
154 I myThid)
155 ENDIF
156 #endif
157
158 #ifdef ALLOW_GGL90
159 IF (useGGL90) THEN
160 CALL GGL90_CALC_DIFF(
161 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
162 O KappaRT,
163 I myThid)
164 CALL GGL90_CALC_DIFF(
165 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
166 O KappaRS,
167 I myThid)
168 ENDIF
169 #endif
170
171 C- Apply mask to vertical diffusivity
172 C jmc: don't have the impression that masking is needed
173 C but could be removed later if it's the case.
174 DO j = 1-Oly, sNy+Oly
175 DO i = 1-Olx, sNx+Olx
176 KappaRT(i,j) = maskUp(i,j)*KappaRT(i,j)
177 KappaRS(i,j) = maskUp(i,j)*KappaRS(i,j)
178 ENDDO
179 ENDDO
180
181 RETURN
182 END

  ViewVC Help
Powered by ViewVC 1.1.22