/[MITgcm]/MITgcm/model/src/calc_3d_diffusivity.F
ViewVC logotype

Annotation of /MITgcm/model/src/calc_3d_diffusivity.F

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


Revision 1.3 - (hide annotations) (download)
Fri Dec 3 15:39:11 2004 UTC (19 years, 5 months ago) by jmc
Branch: MAIN
CVS Tags: checkpoint57t_post, checkpoint57o_post, checkpoint57m_post, checkpoint57s_post, checkpoint57k_post, checkpoint57d_post, checkpoint57g_post, checkpoint57b_post, checkpoint57c_pre, checkpoint57i_post, checkpoint57e_post, checkpoint57g_pre, checkpoint57f_pre, checkpoint57a_post, checkpoint57v_post, checkpoint57r_post, checkpoint57a_pre, checkpoint57, eckpoint57e_pre, checkpoint57h_done, checkpoint57n_post, checkpoint57w_post, checkpoint57p_post, checkpint57u_post, checkpoint57f_post, checkpoint57q_post, checkpoint57c_post, checkpoint57j_post, checkpoint57h_pre, checkpoint57l_post, checkpoint57h_post
Changes since 1.2: +6 -1 lines
allow to compile without generic_advdiff pkg.

1 jmc 1.3 C $Header: /u/gcmpack/MITgcm/model/src/calc_3d_diffusivity.F,v 1.2 2004/10/28 00:30:57 jmc Exp $
2 jmc 1.1 C $Name: $
3    
4     #include "PACKAGES_CONFIG.h"
5     #include "CPP_OPTIONS.h"
6    
7     CBOP
8     C !ROUTINE: CALC_3D_DIFFUSIVITY
9     C !INTERFACE:
10     SUBROUTINE CALC_3D_DIFFUSIVITY(
11     I bi,bj,iMin,iMax,jMin,jMax,
12     I trIdentity, trUseGMRedi, trUseKPP,
13     O KappaRTr,
14     I myThid)
15    
16     C !DESCRIPTION: \bv
17     C *==========================================================*
18     C | SUBROUTINE CALC_3D_DIFFUSIVITY
19     C | o Calculate net (3D) vertical diffusivity for 1 tracer
20     C *==========================================================*
21     C | Combines spatially varying diffusion coefficients from
22     C | KPP and/or GM and/or convective stability test.
23     C *==========================================================*
24     C \ev
25    
26     C !USES:
27     IMPLICIT NONE
28     C == GLobal variables ==
29     #include "SIZE.h"
30     #include "EEPARAMS.h"
31     #include "PARAMS.h"
32     #include "DYNVARS.h"
33     #include "GRID.h"
34 jmc 1.3 #ifdef ALLOW_GENERIC_ADVDIFF
35 jmc 1.1 #include "GAD.h"
36 jmc 1.3 #endif
37 jmc 1.1 #ifdef ALLOW_PTRACERS
38     #include "PTRACERS_SIZE.h"
39     #include "PTRACERS.h"
40     #endif
41    
42     C !INPUT/OUTPUT PARAMETERS:
43     C == Routine arguments ==
44     C bi, bj :: tile indices
45     C iMin,iMax :: Range of points for which calculation is performed.
46     C jMin,jMax :: Range of points for which calculation is performed.
47     C trIdentity :: tracer identifier
48     C trUseGMRedi:: this tracer use GM-Redi
49     C trUseKPP :: this tracer use KPP
50     C myThid :: Instance number for this innvocation of CALC_3D_DIFFUSIVITY
51     C KappaRTr :: Net diffusivity for this tracer (trIdentity)
52     INTEGER bi,bj,iMin,iMax,jMin,jMax
53     INTEGER trIdentity
54     LOGICAL trUseGMRedi, trUseKPP
55     _RL KappaRTr(1-Olx:sNx+Olx,1-Oly:sNy+Oly,Nr)
56     INTEGER myThid
57    
58 jmc 1.3 #ifdef ALLOW_GENERIC_ADVDIFF
59 jmc 1.1 C !LOCAL VARIABLES:
60     C == Local variables ==
61     C i, j, k :: Loop counters
62     C iTr :: passive tracer index
63     C msgBuf :: message buffer
64     INTEGER i,j,k
65     INTEGER iTr
66     _RL KbryanLewis79
67     CHARACTER*(MAX_LEN_MBUF) msgBuf
68     CEOP
69    
70     IF ( trIdentity.EQ.GAD_TEMPERATURE) THEN
71    
72     DO k = 1,Nr
73 jmc 1.2 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
74     & *( atan( -( rF(k)-diffKrBL79Ho )/diffKrBL79scl )/PI+0.5 _d 0)
75 jmc 1.1 DO j = 1-Oly,sNy+Oly
76     DO i = 1-Olx,sNx+Olx
77     KappaRTr(i,j,k) =
78     & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
79     #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL))
80     & + diffKr(i,j,k,bi,bj)
81     #else
82     & + diffKrNrT(k)
83     #endif
84     & + KbryanLewis79
85     ENDDO
86     ENDDO
87     ENDDO
88    
89     ELSEIF ( trIdentity.EQ.GAD_SALINITY) THEN
90    
91     DO k = 1,Nr
92 jmc 1.2 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
93     & *( atan( -( rF(k)-diffKrBL79Ho )/diffKrBL79scl )/PI+0.5 _d 0)
94 jmc 1.1 DO j = 1-Oly, sNy+Oly
95     DO i = 1-Olx, sNx+Olx
96     KappaRTr(i,j,k) =
97     & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
98     #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL))
99     & + diffKr(i,j,k,bi,bj)
100     #else
101     & + diffKrNrS(k)
102     #endif
103     & + KbryanLewis79
104     ENDDO
105     ENDDO
106     ENDDO
107    
108     #ifdef ALLOW_PTRACERS
109     ELSEIF ( trIdentity.GE.GAD_TR1
110     & .AND. trIdentity.LT.GAD_TR1+PTRACERS_numInUse) THEN
111    
112     iTr = trIdentity - GAD_TR1 + 1
113     DO k = 1,Nr
114 jmc 1.2 KbryanLewis79=diffKrBL79surf+(diffKrBL79deep-diffKrBL79surf)
115     & *( atan( -( rF(k)-diffKrBL79Ho )/diffKrBL79scl )/PI+0.5 _d 0)
116 jmc 1.1 DO j = 1-Oly, sNy+Oly
117     DO i = 1-Olx, sNx+Olx
118     KappaRTr(i,j,k) =
119     & IVDConvCount(i,j,k,bi,bj)*ivdc_kappa
120     #if (defined (ALLOW_AUTODIFF_TAMC) && defined (ALLOW_DIFFKR_CONTROL))
121     & + diffKr(i,j,k,bi,bj)
122     #else
123     & + PTRACERS_diffKrNr(k,iTr)
124     #endif
125     & + KbryanLewis79
126     ENDDO
127     ENDDO
128     ENDDO
129     #endif /* ALLOW_PTRACERS */
130    
131     ELSE
132     WRITE(msgBuf,'(A,I4)')
133     & ' CALC_3D_DIFFUSIVITY: Invalid tracer Id: ',trIdentity
134     CALL PRINT_ERROR(msgBuf, myThid)
135     STOP 'ABNORMAL END: S/R CALC_3D_DIFFUSIVITY'
136     ENDIF
137    
138     C-- Add physical pacakge contributions:
139    
140     #ifdef ALLOW_GMREDI
141     IF (trUseGMRedi) THEN
142     CALL GMREDI_CALC_DIFF(
143     I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
144     U KappaRTr,
145     I myThid)
146     ENDIF
147     #endif
148    
149     #ifdef ALLOW_KPP
150     IF (trUseKPP) THEN
151     IF (trIdentity.EQ.GAD_TEMPERATURE) THEN
152     CALL KPP_CALC_DIFF_T(
153 jmc 1.2 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
154 jmc 1.1 U KappaRTr,
155     I myThid)
156     ELSE
157     CALL KPP_CALC_DIFF_S(
158 jmc 1.2 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
159 jmc 1.1 U KappaRTr,
160     I myThid)
161     ENDIF
162     ENDIF
163     #endif
164    
165     #ifdef ALLOW_PP81
166     IF (usePP81) THEN
167     CALL PP81_CALC_DIFF(
168 jmc 1.2 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
169 jmc 1.1 U KappaRTr,
170     I myThid)
171     ENDIF
172     #endif
173    
174     #ifdef ALLOW_MY82
175     IF (useMY82) THEN
176     CALL MY82_CALC_DIFF(
177 jmc 1.2 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
178 jmc 1.1 U KappaRTr,
179     I myThid)
180     ENDIF
181     #endif
182    
183     #ifdef ALLOW_GGL90
184     IF (useGGL90) THEN
185     CALL GGL90_CALC_DIFF(
186 jmc 1.2 I bi,bj,iMin,iMax,jMin,jMax,0,Nr,
187 jmc 1.1 O KappaRTr,
188     I myThid)
189     ENDIF
190     #endif
191    
192     C- Apply mask to vertical diffusivity
193     C jmc: don't have the impression that masking is needed
194     C but could be removed later if it's the case.
195     c DO j = 1-Oly, sNy+Oly
196     c DO i = 1-Olx, sNx+Olx
197     c KappaRTr(i,j,k) = maskUp(i,j)*KappaRTr(i,j,k)
198     c ENDDO
199     c ENDDO
200    
201 jmc 1.3 #endif /* ALLOW_GENERIC_ADVDIFF */
202    
203 jmc 1.1 RETURN
204     END

  ViewVC Help
Powered by ViewVC 1.1.22