/[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.6 - (show annotations) (download)
Tue Feb 12 23:02:47 2008 UTC (16 years, 3 months ago) by dfer
Branch: MAIN
CVS Tags: checkpoint60, checkpoint61, checkpoint59q, checkpoint59p, checkpoint59r, checkpoint59o, checkpoint61f, checkpoint61g, checkpoint61d, checkpoint61e, checkpoint61b, checkpoint61c, checkpoint61a, checkpoint61n, checkpoint61o, checkpoint61l, checkpoint61m, checkpoint61j, checkpoint61k, checkpoint61h, checkpoint61i, checkpoint61r, checkpoint61p, checkpoint61q
Changes since 1.5: +6 -4 lines
Add tracer identity as argument of gmredi_calc_diff.F

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

  ViewVC Help
Powered by ViewVC 1.1.22