1 | SUBROUTINE gwstress |
---|
2 | * ( nlon , nlev |
---|
3 | * , kkcrit, ksect, kkhlim, ktest, kkcrith, kcrit, kkenvh |
---|
4 | * , kknu |
---|
5 | * , prho , pstab , pvph , pstd, psig |
---|
6 | * , pmea , ppic , pval , ptfr , ptau |
---|
7 | * , pgeom1 , pgamma , pd1 , pd2 , pdmod , pnu ) |
---|
8 | c |
---|
9 | c**** *gwstress* |
---|
10 | c |
---|
11 | c purpose. |
---|
12 | c -------- |
---|
13 | c Compute the surface stress due to Gravity Waves, according |
---|
14 | c to the Phillips (1979) theory of 3-D flow above |
---|
15 | c anisotropic elliptic ridges. |
---|
16 | |
---|
17 | C The stress is reduced two account for cut-off flow over |
---|
18 | C hill. The flow only see that part of the ridge located |
---|
19 | c above the blocked layer (see zeff). |
---|
20 | c |
---|
21 | c** interface. |
---|
22 | c ---------- |
---|
23 | c call *gwstress* from *gwdrag* |
---|
24 | c |
---|
25 | c explicit arguments : |
---|
26 | c -------------------- |
---|
27 | c ==== inputs === |
---|
28 | c ==== outputs === |
---|
29 | c |
---|
30 | c implicit arguments : none |
---|
31 | c -------------------- |
---|
32 | c |
---|
33 | c method. |
---|
34 | c ------- |
---|
35 | c |
---|
36 | c |
---|
37 | c externals. |
---|
38 | c ---------- |
---|
39 | c |
---|
40 | c |
---|
41 | c reference. |
---|
42 | c ---------- |
---|
43 | c |
---|
44 | c LOTT and MILLER (1997) & LOTT (1999) |
---|
45 | c |
---|
46 | c author. |
---|
47 | c ------- |
---|
48 | c |
---|
49 | c modifications. |
---|
50 | c -------------- |
---|
51 | c f. lott put the new gwd on ifs 22/11/93 |
---|
52 | c |
---|
53 | c----------------------------------------------------------------------- |
---|
54 | use dimphy |
---|
55 | implicit none |
---|
56 | |
---|
57 | #include "dimensions.h" |
---|
58 | #include "paramet.h" |
---|
59 | |
---|
60 | #include "YOMCST.h" |
---|
61 | #include "YOEGWD.h" |
---|
62 | |
---|
63 | c----------------------------------------------------------------------- |
---|
64 | c |
---|
65 | c* 0.1 arguments |
---|
66 | c --------- |
---|
67 | c |
---|
68 | integer nlon,nlev |
---|
69 | integer kkcrit(nlon),kkcrith(nlon),kcrit(nlon),ksect(nlon), |
---|
70 | * kkhlim(nlon),ktest(nlon),kkenvh(nlon),kknu(nlon) |
---|
71 | c |
---|
72 | real prho(nlon,nlev+1),pstab(nlon,nlev+1),ptau(nlon,nlev+1), |
---|
73 | * pvph(nlon,nlev+1),ptfr(nlon), |
---|
74 | * pgeom1(nlon,nlev),pstd(nlon) |
---|
75 | c |
---|
76 | real pd1(nlon),pd2(nlon),pnu(nlon),psig(nlon),pgamma(nlon) |
---|
77 | real pmea(nlon),ppic(nlon),pval(nlon) |
---|
78 | real pdmod(nlon) |
---|
79 | c |
---|
80 | c----------------------------------------------------------------------- |
---|
81 | c |
---|
82 | c* 0.2 local arrays |
---|
83 | c ------------ |
---|
84 | c zeff--real: effective height seen by the flow when there is blocking |
---|
85 | |
---|
86 | integer jl |
---|
87 | real zeff |
---|
88 | c |
---|
89 | c----------------------------------------------------------------------- |
---|
90 | c |
---|
91 | c* 0.3 functions |
---|
92 | c --------- |
---|
93 | c ------------------------------------------------------------------ |
---|
94 | c |
---|
95 | c* 1. initialization |
---|
96 | c -------------- |
---|
97 | c |
---|
98 | c PRINT *,' in gwstress' |
---|
99 | 100 continue |
---|
100 | c |
---|
101 | c* 3.1 gravity wave stress. |
---|
102 | c |
---|
103 | 300 continue |
---|
104 | c |
---|
105 | c |
---|
106 | do 301 jl=kidia,kfdia |
---|
107 | if(ktest(jl).eq.1) then |
---|
108 | |
---|
109 | c effective mountain height above the blocked flow |
---|
110 | |
---|
111 | zeff=ppic(jl)-pval(jl) |
---|
112 | if(kkenvh(jl).lt.klev)then |
---|
113 | zeff=amin1(GFRCRIT*pvph(jl,klev+1)/sqrt(pstab(jl,klev+1)) |
---|
114 | c ,zeff) |
---|
115 | endif |
---|
116 | |
---|
117 | |
---|
118 | ptau(jl,klev+1)=gkdrag*prho(jl,klev+1) |
---|
119 | * *psig(jl)*pdmod(jl)/4./pstd(jl) |
---|
120 | * *pvph(jl,klev+1)*sqrt(pstab(jl,klev+1)) |
---|
121 | * *zeff**2 |
---|
122 | |
---|
123 | |
---|
124 | c too small value of stress or low level flow include critical level |
---|
125 | c or low level flow: gravity wave stress nul. |
---|
126 | |
---|
127 | c lo=(ptau(jl,klev+1).lt.gtsec).or.(kcrit(jl).ge.kknu(jl)) |
---|
128 | c * .or.(pvph(jl,klev+1).lt.gvcrit) |
---|
129 | c if(lo) ptau(jl,klev+1)=0.0 |
---|
130 | |
---|
131 | c print *,jl,ptau(jl,klev+1) |
---|
132 | |
---|
133 | else |
---|
134 | |
---|
135 | ptau(jl,klev+1)=0.0 |
---|
136 | |
---|
137 | endif |
---|
138 | |
---|
139 | 301 continue |
---|
140 | |
---|
141 | c write(21)(ptau(jl,klev+1),jl=kidia,kfdia) |
---|
142 | |
---|
143 | return |
---|
144 | end |
---|
145 | |
---|
146 | |
---|