/[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.6 - (hide 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 dfer 1.6 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_calc_diff.F,v 1.5 2007/11/05 18:48:04 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "PTRACERS_OPTIONS.h"
5    
6     CBOP
7     C !ROUTINE: PTRACERS_CALC_DIFF
8 jmc 1.5 C !INTERFACE:
9     SUBROUTINE PTRACERS_CALC_DIFF(
10 jmc 1.1 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 jmc 1.5 #include "PTRACERS_PARAMS.h"
35     c #include "PTRACERS_FIELDS.h"
36 dfer 1.6 #include "GAD.h"
37 jmc 1.1
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 dfer 1.6 INTEGER i,j,iTr,trIdentity
56 jmc 1.5 _RL KbryanLewis79
57     #ifdef ALLOW_BL79_LAT_VARY
58     _RL KbryanLewisEQ
59     #endif
60 jmc 1.1 CEOP
61    
62     KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
63 dimitri 1.3 & *(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 jmc 1.1
69     C Loop over tracers
70     DO iTr=1,PTRACERS_numInUse
71    
72 dfer 1.6 trIdentity = iTr + GAD_TR1 - 1
73    
74 dimitri 1.3 IF ( .NOT. PTRACERS_useKPP(iTr) ) THEN
75 jmc 1.1 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 dimitri 1.3 #if (defined ALLOW_3D_DIFFKR || \
80     (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL)))
81 jmc 1.1 & + diffKr(i,j,k,bi,bj)
82     #else
83     & + PTRACERS_diffKrNr(k,iTr)
84     #endif
85     & + KbryanLewis79
86 dimitri 1.3 #ifdef ALLOW_BL79_LAT_VARY
87     & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
88     #endif
89 jmc 1.1 ENDDO
90     ENDDO
91 dimitri 1.3 ENDIF
92 jmc 1.1
93 dimitri 1.4 #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 jmc 1.1 #ifdef ALLOW_GMREDI
104 jmc 1.5 IF ( PTRACERS_useGMRedi(iTr) ) THEN
105 jmc 1.1 CALL GMREDI_CALC_DIFF(
106     I bi,bj,iMin,iMax,jMin,jMax,k,1,
107     U KappaRtr(1-Olx,1-Oly,iTr),
108 dfer 1.6 I trIdentity,myThid)
109 jmc 1.1 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 jmc 1.5
130 jmc 1.1 #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 jmc 1.5
139     C- Apply mask to vertical diffusivity
140     C jmc: don't have the impression that masking is needed
141 jmc 1.1 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