/[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.4 - (show annotations) (download)
Thu Sep 27 14:42:59 2007 UTC (16 years, 9 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 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_calc_diff.F,v 1.3 2007/04/23 20:46:49 dimitri 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.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 _RL KbryanLewis79, KbryanLewisEQ
56 CEOP
57
58 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
59 & *(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
65 C Loop over tracers
66 DO iTr=1,PTRACERS_numInUse
67
68 IF ( .NOT. PTRACERS_useKPP(iTr) ) THEN
69 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 #if (defined ALLOW_3D_DIFFKR || \
74 (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
75 & + diffKr(i,j,k,bi,bj)
76 #else
77 & + PTRACERS_diffKrNr(k,iTr)
78 #endif
79 & + KbryanLewis79
80 #ifdef ALLOW_BL79_LAT_VARY
81 & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
82 #endif
83 ENDDO
84 ENDDO
85 ENDIF
86
87 #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 #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