| 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 | implicit none |
|---|
| 55 | |
|---|
| 56 | #include "dimensions.h" |
|---|
| 57 | #include "paramet.h" |
|---|
| 58 | #include "dimphy.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 | |
|---|