/[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.10 - (hide annotations) (download)
Thu Mar 8 17:13:31 2012 UTC (12 years, 2 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint64q, checkpoint64p, checkpoint64i, checkpoint64h, checkpoint64k, checkpoint64j, checkpoint64m, checkpoint64l, checkpoint64o, checkpoint64n, checkpoint64a, checkpoint64c, checkpoint64b, checkpoint64e, checkpoint64d, checkpoint64g, checkpoint64f, checkpoint63p, checkpoint63q, checkpoint63r, checkpoint63s, checkpoint63l, checkpoint63m, checkpoint63n, checkpoint63o, checkpoint63k, checkpoint64
Changes since 1.9: +15 -13 lines
-only step forward tracer if PTRACERS_StepFwd(iTr)=T

1 jmc 1.10 C $Header: /u/gcmpack/MITgcm/pkg/ptracers/ptracers_calc_diff.F,v 1.9 2011/09/20 22:29:07 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 jahn 1.7 #ifdef ALLOW_LONGSTEP
34     #include "LONGSTEP.h"
35     #endif
36 jmc 1.1 #include "PTRACERS_SIZE.h"
37 jmc 1.5 #include "PTRACERS_PARAMS.h"
38 jmc 1.10 #include "PTRACERS_START.h"
39 dfer 1.6 #include "GAD.h"
40 jmc 1.1
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 jmc 1.10 _RS maskUp(1-OLx:sNx+OLx,1-OLy:sNy+OLy)
52     _RL KappaRtr(1-OLx:sNx+OLx,1-OLy:sNy+OLy,PTRACERS_num)
53 jmc 1.1 INTEGER myThid
54    
55     C !LOCAL VARIABLES:
56     C == Local variables ==
57     C I, J :: Loop counters
58 dfer 1.6 INTEGER i,j,iTr,trIdentity
59 jmc 1.5 _RL KbryanLewis79
60     #ifdef ALLOW_BL79_LAT_VARY
61     _RL KbryanLewisEQ
62     #endif
63 jmc 1.1 CEOP
64    
65     KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
66 dimitri 1.3 & *(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 jmc 1.1
72     C Loop over tracers
73     DO iTr=1,PTRACERS_numInUse
74 jmc 1.10 IF ( PTRACERS_StepFwd(iTr) ) THEN
75 jmc 1.1
76 dfer 1.6 trIdentity = iTr + GAD_TR1 - 1
77    
78 dimitri 1.3 IF ( .NOT. PTRACERS_useKPP(iTr) ) THEN
79 jmc 1.10 DO j = 1-OLy, sNy+OLy
80     DO i = 1-OLx, sNx+OLx
81 jmc 1.1 KappaRtr(i,j,iTr) =
82 jahn 1.7 #ifdef ALLOW_LONGSTEP
83     & LS_IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
84     #else
85 jmc 1.1 & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
86 jahn 1.7 #endif
87 jmc 1.9 #ifdef ALLOW_3D_DIFFKR
88 jmc 1.1 & + diffKr(i,j,k,bi,bj)
89     #else
90     & + PTRACERS_diffKrNr(k,iTr)
91     #endif
92     & + KbryanLewis79
93 dimitri 1.3 #ifdef ALLOW_BL79_LAT_VARY
94     & + (KbryanLewisEQ-KbryanLewis79)*BL79LatArray(i,j,bi,bj)
95     #endif
96 jmc 1.1 ENDDO
97     ENDDO
98 dimitri 1.3 ENDIF
99 jmc 1.1
100 dimitri 1.4 #ifdef ALLOW_KPP
101     IF ( PTRACERS_useKPP(iTr) ) THEN
102     C-- Set vertical diffusivity contribution from KPP
103 jahn 1.7 CALL KPP_CALC_DIFF_PTR(
104 dimitri 1.4 I bi,bj,iMin+1,iMax,jMin+1,jMax,k,1,
105 jmc 1.10 O KappaRtr(1-OLx,1-OLy,iTr),
106 jmc 1.9 I iTr, myThid )
107 dimitri 1.4 ENDIF
108     #endif
109    
110 jmc 1.1 #ifdef ALLOW_GMREDI
111 jmc 1.5 IF ( PTRACERS_useGMRedi(iTr) ) THEN
112 jmc 1.1 CALL GMREDI_CALC_DIFF(
113     I bi,bj,iMin,iMax,jMin,jMax,k,1,
114 jmc 1.10 U KappaRtr(1-OLx,1-OLy,iTr),
115 dfer 1.6 I trIdentity,myThid)
116 jmc 1.1 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 jmc 1.10 U KappaRtr(1-OLx,1-OLy,iTr),
124 jmc 1.1 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 jmc 1.10 U KappaRtr(1-OLx,1-OLy,iTr),
133 jmc 1.1 I myThid)
134     ENDIF
135     #endif
136 jmc 1.5
137 jmc 1.1 #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 jmc 1.10 U KappaRtr(1-OLx,1-OLy,iTr),
142 jmc 1.1 I myThid)
143     ENDIF
144     #endif
145 jmc 1.5
146     C- Apply mask to vertical diffusivity
147 jmc 1.8 C jmc: do not have the impression that masking is needed
148     C but could be removed later if it is the case.
149 jmc 1.10 DO j = 1-OLy, sNy+OLy
150     DO i = 1-OLx, sNx+OLx
151 jmc 1.1 KappaRtr(i,j,iTr) = maskUp(i,j)*KappaRtr(i,j,iTr)
152     ENDDO
153     ENDDO
154    
155     C end of tracer loop
156 jmc 1.10 ENDIF
157 jmc 1.1 ENDDO
158    
159     RETURN
160     END

  ViewVC Help
Powered by ViewVC 1.1.22