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

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

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


Revision 1.11 - (show annotations) (download)
Tue Nov 19 17:07:50 2013 UTC (10 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: HEAD
Changes since 1.10: +1 -1 lines
FILE REMOVED
remove routine which are no longer used (after removing k-loop from
 thermodynamics.F) and update ad_diff list

1 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_calc_diff.F,v 1.10 2012/03/08 17:13:31 jmc Exp $
2 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 #ifdef ALLOW_LONGSTEP
34 #include "LONGSTEP.h"
35 #endif
36 #include "PTRACERS_SIZE.h"
37 #include "PTRACERS_PARAMS.h"
38 #include "PTRACERS_START.h"
39 #include "GAD.h"
40
41 C !INPUT/OUTPUT PARAMETERS:
42 C == Routine arguments ==
43 C bi, bj :: tile indices
44 C iMin,iMax :: Range of points for which calculation is performed.
45 C jMin,jMax :: Range of points for which calculation is performed.
46 C maskUp :: land/water mask for Wvel points (above tracer level)
47 C myThid :: Instance number for this innvocation of PTRACERS_CALC_DIFF
48 C KappaRtr :: Net diffusivity for temperature
49 C KappaRS :: Net diffusivity for salinity
50 INTEGER bi,bj,iMin,iMax,jMin,jMax,k
51 _RS maskUp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
52 _RL KappaRtr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,PTRACERS_num)
53 INTEGER myThid
54
55 C !LOCAL VARIABLES:
56 C == Local variables ==
57 C I, J :: Loop counters
58 INTEGER i,j,iTr,trIdentity
59 _RL KbryanLewis79
60 #ifdef ALLOW_BL79_LAT_VARY
61 _RL KbryanLewisEQ
62 #endif
63 CEOP
64
65 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
66 & *(atan(-(rF(k)-diffKrBL79Ho)/diffKrBL79scl)/PI+0.5 _d 0)
67 #ifdef ALLOW_BL79_LAT_VARY
68 KbryanLewisEQ=diffKrBLEQsurf+(diffKrBLEQdeep-diffKrBLEQsurf)
69 & *(atan(-(rF(k)-diffKrBLEQHo)/diffKrBLEQscl)/PI+0.5 _d 0)
70 #endif
71
72 C Loop over tracers
73 DO iTr=1,PTRACERS_numInUse
74 IF ( PTRACERS_StepFwd(iTr) ) THEN
75
76 trIdentity = iTr + GAD_TR1 - 1
77
78 IF ( .NOT. PTRACERS_useKPP(iTr) ) THEN
79 DO j = 1-OLy, sNy+OLy
80 DO i = 1-OLx, sNx+OLx
81 KappaRtr(i,j,iTr) =
82 #ifdef ALLOW_LONGSTEP
83 & LS_IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
84 #else
85 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
86 #endif
87 #ifdef ALLOW_3D_DIFFKR
88 & + diffKr(i,j,k,bi,bj)
89 #else
90 & + PTRACERS_diffKrNr(k,iTr)
91 #endif
92 & + KbryanLewis79
93 #ifdef ALLOW_BL79_LAT_VARY
94 & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
95 #endif
96 ENDDO
97 ENDDO
98 ENDIF
99
100 #ifdef ALLOW_KPP
101 IF ( PTRACERS_useKPP(iTr) ) THEN
102 C-- Set vertical diffusivity contribution from KPP
103 CALL KPP_CALC_DIFF_PTR(
104 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
105 O KappaRtr(1-OLx,1-OLy,iTr),
106 I iTr, myThid )
107 ENDIF
108 #endif
109
110 #ifdef ALLOW_GMREDI
111 IF ( PTRACERS_useGMRedi(iTr) ) THEN
112 CALL GMREDI_CALC_DIFF(
113 I bi,bj,iMin,iMax,jMin,jMax,k,1,
114 U KappaRtr(1-OLx,1-OLy,iTr),
115 I trIdentity,myThid)
116 ENDIF
117 #endif
118
119 #ifdef ALLOW_PP81
120 IF (usePP81) THEN
121 CALL PP81_CALC_DIFF(
122 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
123 U KappaRtr(1-OLx,1-OLy,iTr),
124 I myThid)
125 ENDIF
126 #endif
127
128 #ifdef ALLOW_MY82
129 IF (useMY82) THEN
130 CALL MY82_CALC_DIFF(
131 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
132 U KappaRtr(1-OLx,1-OLy,iTr),
133 I myThid)
134 ENDIF
135 #endif
136
137 #ifdef ALLOW_GGL90
138 IF (useGGL90) THEN
139 CALL GGL90_CALC_DIFF(
140 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
141 U KappaRtr(1-OLx,1-OLy,iTr),
142 I myThid)
143 ENDIF
144 #endif
145
146 C- Apply mask to vertical diffusivity
147 C jmc: do not have the impression that masking is needed
148 C but could be removed later if it is the case.
149 DO j = 1-OLy, sNy+OLy
150 DO i = 1-OLx, sNx+OLx
151 KappaRtr(i,j,iTr) = maskUp(i,j)*KappaRtr(i,j,iTr)
152 ENDDO
153 ENDDO
154
155 C end of tracer loop
156 ENDIF
157 ENDDO
158
159 RETURN
160 END

  ViewVC Help
Powered by ViewVC 1.1.22