1 |
C $Header: $ |
2 |
C $Name: $ |
3 |
|
4 |
#include "AIM_OPTIONS.h" |
5 |
|
6 |
SUBROUTINE VDIFSC (dpFac,SE,RH,QA,QSAT, |
7 |
O TTENVD,QTENVD, |
8 |
I kGrd,bi,bj,myThid) |
9 |
C-- |
10 |
C-- SUBROUTINE VDIFSC (UA,VA,SE,RH,QA,QSAT,PHI, |
11 |
C-- & UTENVD,VTENVD,TTENVD,QTENVD) |
12 |
C-- |
13 |
C-- Purpose: Compute tendencies of momentum, energy and moisture |
14 |
C-- due to vertical diffusion and shallow convection |
15 |
C-- Input: UA = u-wind (3-dim) |
16 |
C-- VA = v-wind (3-dim) |
17 |
C dpFac = cell delta_P fraction (3-dim) |
18 |
C-- SE = dry static energy (3-dim) |
19 |
C-- RH = relative humidity [0-1] (3-dim) |
20 |
C-- QA = specific humidity [g/kg] (3-dim) |
21 |
C-- QSAT = saturation sp. humidity [g/kg] (3-dim) |
22 |
C-- PHI = geopotential (3-dim) |
23 |
C-- Output: UTENVD = u-wind tendency (3-dim) |
24 |
C-- VTENVD = v-wind tendency (3-dim) |
25 |
C-- TTENVD = temperature tendency (3-dim) |
26 |
C-- QTENVD = sp. humidity tendency [g/(kg s)] (3-dim) |
27 |
C Input: kGrd = Ground level index (2-dim) |
28 |
C bi,bj = tile index |
29 |
C myThid = Thread number for this instance of the routine |
30 |
C------- |
31 |
C Note: a) dry static energy (SE,input) has been replaced by Pot.Temp. |
32 |
C b) UA,VA & U,V_TENVD not used => removed |
33 |
C------- |
34 |
C In contrast to other Physics S/R, VDIFSC return a real tendency (dQ/dt,dT/dt) |
35 |
C nevertheless /dpFac is not applied here but later in AIM_AIM2DYN |
36 |
C------- |
37 |
|
38 |
IMPLICIT NONE |
39 |
|
40 |
C Resolution parameters |
41 |
|
42 |
C-- size for MITgcm & Physics package : |
43 |
#include "AIM_SIZE.h" |
44 |
|
45 |
#include "EEPARAMS.h" |
46 |
|
47 |
C Physical constants + functions of sigma and latitude |
48 |
#include "com_physcon.h" |
49 |
|
50 |
C Vertical diffusion constants |
51 |
#include "com_vdicon.h" |
52 |
|
53 |
C-- Routine arguments: |
54 |
c _RL UA(NGP,NLEV), VA(NGP,NLEV) |
55 |
_RL dpFac(NGP,NLEV) |
56 |
_RL SE(NGP,NLEV), RH(NGP,NLEV), QA(NGP,NLEV), QSAT(NGP,NLEV) |
57 |
c _RL PHI(NGP,NLEV) |
58 |
|
59 |
c _RL UTENVD(NGP,NLEV), VTENVD(NGP,NLEV) |
60 |
_RL TTENVD(NGP,NLEV), QTENVD(NGP,NLEV) |
61 |
|
62 |
INTEGER kGrd(NGP) |
63 |
INTEGER bi,bj,myThid |
64 |
|
65 |
#ifdef ALLOW_AIM |
66 |
|
67 |
C-- Local variables: |
68 |
INTEGER J, K, Ktmp, NL1 |
69 |
_RL RSIG(NLEV) |
70 |
_RL dSEdp(NGP,NLEV-1), DeltaPI(NLEV-1), factP |
71 |
|
72 |
C- jmc: declare all local variables: |
73 |
_RL CVDI(NGP), FSHCQ |
74 |
_RL DRH0, DRH, DMSE, FLUXSE, FLUXQ |
75 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
76 |
|
77 |
C-- 1. Initalization |
78 |
|
79 |
C N.B. In this routine, fluxes of dry static energy and humidity |
80 |
C are scaled in such a way that: |
81 |
C d_T/dt = d_F'(SE)/d_sigma, d_Q/dt = d_F'(Q)/d_sigma |
82 |
|
83 |
c_FM NL1 = NLEV-1 |
84 |
c_FM CSHC = DSIG(NLEV)/3600. |
85 |
c_FM CVDI = (SIGH(NL1)-SIGH(1))/((NL1-1)*3600.) |
86 |
|
87 |
c_FM FSHCQ = CSHC/TRSHC |
88 |
c_FM FSHCSE = CSHC/(TRSHC*CP) |
89 |
|
90 |
c_FM FVDIQ = CVDI/TRVDI |
91 |
c_FM FVDISE = CVDI/(TRVDS*CP) |
92 |
|
93 |
DO J=1,NGP |
94 |
NL1 = kGrd(J)-1 |
95 |
CVDI(J) = 0. |
96 |
IF (NL1.GE.2) THEN |
97 |
CVDI(J) = (SIGH(NL1)-SIGH(1))/((NL1-1)*3600. _d 0) |
98 |
ENDIF |
99 |
ENDDO |
100 |
|
101 |
DO K=1,NLEV |
102 |
RSIG(K)=1./DSIG(K) |
103 |
ENDDO |
104 |
|
105 |
DO K=1,NLEV |
106 |
DO J=1,NGP |
107 |
c UTENVD(J,K) = 0. |
108 |
c VTENVD(J,K) = 0. |
109 |
TTENVD(J,K) = 0. |
110 |
QTENVD(J,K) = 0. |
111 |
ENDDO |
112 |
ENDDO |
113 |
|
114 |
C --------------------------------------------- |
115 |
C Write Conditional stability based on Pot.Temp : |
116 |
C dSEdp(K) = Delta[Static-Energy] between 2 Plevels(k,k+1) |
117 |
C and corresponds to SE(K+1)-SE(K) in the original code |
118 |
C ------- |
119 |
DO K=1,NLEV-1 |
120 |
factP = CP*SIGH(K)**(RD/CP) |
121 |
DO J=1,NGP |
122 |
dSEdp(J,K)=(SE(J,K+1)-SE(J,K))*factP |
123 |
ENDDO |
124 |
DeltaPI(K) = SIG(K+1)**(RD/CP) - SIG(K)**(RD/CP) |
125 |
ENDDO |
126 |
|
127 |
C-- 2. Shallow convection |
128 |
|
129 |
DO J=1,NGP |
130 |
Ktmp = kGrd(J) |
131 |
NL1 = Ktmp - 1 |
132 |
IF (Ktmp.GE.2) THEN |
133 |
|
134 |
DRH0=RHGRAD*(SIG(Ktmp)-SIG(NL1)) |
135 |
FSHCQ = DSIG(Ktmp)*dpFac(J,Ktmp)/(TRSHC*3600. _d 0) |
136 |
|
137 |
c_FM DMSE = (SE(J,NLEV)-SE(J,NL1))+ALHC*(QA(J,NLEV)-QSAT(J,NL1)) |
138 |
DMSE = dSEdp(J,NL1) + ALHC*(QA(J,Ktmp)-QSAT(J,NL1)) |
139 |
DRH = RH(J,Ktmp)-RH(J,NL1) |
140 |
|
141 |
IF (DMSE.GE.0.0) THEN |
142 |
|
143 |
c_FM FLUXSE = FSHCSE*DMSE |
144 |
FLUXSE = FSHCQ *DMSE/CP |
145 |
TTENVD(J,NL1) = FLUXSE*RSIG(NL1) |
146 |
TTENVD(J,Ktmp) =-FLUXSE*RSIG(Ktmp) |
147 |
|
148 |
IF (DRH.GE.0.0) THEN |
149 |
FLUXQ = FSHCQ*QSAT(J,Ktmp)*DRH |
150 |
QTENVD(J,NL1) = FLUXQ*RSIG(NL1) |
151 |
QTENVD(J,Ktmp) =-FLUXQ*RSIG(Ktmp) |
152 |
ENDIF |
153 |
|
154 |
ELSE IF (DRH.GE.DRH0) THEN |
155 |
|
156 |
c_FM FLUXQ = FVDIQ*QSAT(J,NL1)*DRH |
157 |
FLUXQ = QSAT(J,NL1)*DRH*CVDI(J)/TRVDI |
158 |
QTENVD(J,NL1) = FLUXQ*RSIG(NL1) |
159 |
QTENVD(J,Ktmp) =-FLUXQ*RSIG(Ktmp) |
160 |
|
161 |
ENDIF |
162 |
|
163 |
ENDIF |
164 |
ENDDO |
165 |
|
166 |
C-- 3. Vertical diffusion of moisture above the PBL |
167 |
|
168 |
DO J=1,NGP |
169 |
|
170 |
DO K=3,kGrd(J)-2 |
171 |
|
172 |
DRH0=RHGRAD*(SIG(K+1)-SIG(K)) |
173 |
|
174 |
DRH=RH(J,K+1)-RH(J,K) |
175 |
|
176 |
IF (DRH.GE.DRH0) THEN |
177 |
c_FM FLUXQ = FVDIQ*QSAT(J,K)*DRH |
178 |
FLUXQ = QSAT(J,K)*DRH*CVDI(J)/TRVDI |
179 |
QTENVD(J,K) = QTENVD(J,K) +FLUXQ*RSIG(K) |
180 |
QTENVD(J,K+1)= QTENVD(J,K+1)-FLUXQ*RSIG(K+1) |
181 |
ENDIF |
182 |
|
183 |
ENDDO |
184 |
|
185 |
ENDDO |
186 |
|
187 |
C-- 4. Damping of super-adiabatic lapse rate |
188 |
|
189 |
DO J=1,NGP |
190 |
DO K=1,kGrd(J)-1 |
191 |
|
192 |
c_FM SE0 = SE(J,K+1)+SEGRAD*(PHI(J,K)-PHI(J,K+1)) |
193 |
DMSE = dSEdp(J,K) |
194 |
& +SEGRAD*CP*DeltaPI(K)*(SE(J,K+1)+SE(J,K))*0.5 _d 0 |
195 |
|
196 |
c_FM IF (SE(J,K).LT.SE0) THEN |
197 |
c_FM FLUXSE = FVDISE*(SE0-SE(J,K)) |
198 |
IF (DMSE.GT.0.) THEN |
199 |
FLUXSE = DMSE*CVDI(J)/(TRVDS*CP) |
200 |
TTENVD(J,K ) = TTENVD(J,K )+FLUXSE*RSIG(K) |
201 |
TTENVD(J,K+1) = TTENVD(J,K+1)-FLUXSE*RSIG(K+1) |
202 |
ENDIF |
203 |
|
204 |
ENDDO |
205 |
ENDDO |
206 |
C-- |
207 |
C---+----1----+----2----+----3----+----4----+----5----+----6----+----7-|--+----| |
208 |
#endif /* ALLOW_AIM */ |
209 |
|
210 |
RETURN |
211 |
END |