[1912] | 1 | MODULE orodrag_mod |
---|
| 2 | |
---|
| 3 | IMPLICIT NONE |
---|
| 4 | |
---|
| 5 | CONTAINS |
---|
| 6 | |
---|
[38] | 7 | SUBROUTINE ORODRAG( klon,klev |
---|
| 8 | I , KGWD, KGWDIM, KDX, KTEST |
---|
| 9 | R , PTSPHY |
---|
| 10 | R , PAPHM1,PAPM1,PGEOM1,PTM1,PUM1 |
---|
| 11 | R , PVM1, PVAROR, PSIG, PGAMMA, PTHETA |
---|
| 12 | C OUTPUTS |
---|
| 13 | R , PULOW,PVLOW |
---|
| 14 | R , PVOM,PVOL,PTE ) |
---|
| 15 | C |
---|
| 16 | C |
---|
| 17 | C**** *ORODRAG* - DOES THE GRAVITY WAVE PARAMETRIZATION. |
---|
| 18 | C |
---|
| 19 | C PURPOSE. |
---|
| 20 | C -------- |
---|
| 21 | C |
---|
| 22 | C THIS ROUTINE COMPUTES THE PHYSICAL TENDENCIES OF THE |
---|
| 23 | C PROGNOSTIC VARIABLES U,V AND T DUE TO VERTICAL TRANSPORTS BY |
---|
| 24 | C SUBGRIDSCALE OROGRAPHICALLY EXCITED GRAVITY WAVES |
---|
| 25 | C |
---|
| 26 | C EXPLICIT ARGUMENTS : |
---|
| 27 | C -------------------- |
---|
| 28 | C |
---|
| 29 | C INPUT : |
---|
| 30 | C |
---|
| 31 | C NLON : NUMBER OF HORIZONTAL GRID POINTS |
---|
| 32 | C NLEV : NUMBER OF LEVELS |
---|
| 33 | C KGWD : NUMBER OF POINTS AT WHICH THE SCHEME IS CALLED |
---|
| 34 | C KGWDIM : NUMBER OF POINTS AT WHICH THE SCHEME IS CALLED |
---|
| 35 | C KDX(NLON) : POINTS AT WHICH TO CALL THE SCHEME |
---|
| 36 | C KTEST(NLON) : MAP OF CALLING POINTS |
---|
| 37 | C PTSPHY : LENGTH OF TIME STEP |
---|
| 38 | C PAPHM1(NLON,NLEV+1): PRESSURE AT MIDDLE LEVELS |
---|
| 39 | C PAPM1(NLON,NLEV) : PRESSURE ON MODEL LEVELS |
---|
| 40 | C PGEOM1(NLON,NLEV) : GEOPOTENTIAL HIEGHT OF MODEL LEVELS |
---|
| 41 | C PTM1(NLON,NLEV) : TEMPERATURE |
---|
| 42 | C PUM1(NLON,NLEV) : ZONAL WIND |
---|
| 43 | C PVM1(NLON,NLEV) : MERIDIONAL WIND |
---|
| 44 | C PVAROR(NLON) : SUB-GRID SCALE STANDARD DEVIATION |
---|
| 45 | C PSIG(NLON) : SUB-GRID SCALE SLOPE |
---|
| 46 | C PGAMMA(NLON) : SUB-GRID SCALE ANISOTROPY |
---|
| 47 | C PTHETA(NLON) : SUB-GRID SCALE PRINCIPAL AXES ANGLE |
---|
| 48 | C |
---|
| 49 | C OUTPUT : |
---|
| 50 | C |
---|
| 51 | C PULOW(NLON) : LOW LEVEL ZONAL WIND |
---|
| 52 | C PVLOW(NLON) : LOW LEVEL MERIDIONAL WIND |
---|
| 53 | C PVOM(NLON,NLEV) : ZONAL WIND TENDENCY |
---|
| 54 | C PVOL(NLON,NLEV) : MERIDIONAL WIND TENDENCY |
---|
| 55 | C PTE(NLON,NLEV) : TEMPERATURE TENDENCY |
---|
| 56 | C |
---|
| 57 | C IMPLICIT ARGUMENTS : |
---|
| 58 | C -------------------- |
---|
| 59 | C |
---|
| 60 | C comcstfi.h |
---|
| 61 | C yoegwd.h |
---|
| 62 | C |
---|
| 63 | C METHOD. |
---|
| 64 | C ------- |
---|
| 65 | C |
---|
| 66 | C EXTERNALS. |
---|
| 67 | C ---------- |
---|
| 68 | C |
---|
| 69 | C REFERENCE. |
---|
| 70 | C ---------- |
---|
| 71 | C |
---|
| 72 | C AUTHOR. |
---|
| 73 | C ------- |
---|
| 74 | C M.MILLER + B.RITTER E.C.M.W.F. 15/06/86. |
---|
| 75 | C |
---|
| 76 | C F.LOTT + M. MILLER E.C.M.W.F. 22/11/94 |
---|
| 77 | C----------------------------------------------------------------------- |
---|
[1047] | 78 | use dimradmars_mod, only: ndlo2 |
---|
[1912] | 79 | USE gwstress_mod, ONLY: gwstress |
---|
[1913] | 80 | USE gwprofil_mod, ONLY: gwprofil |
---|
[1912] | 81 | USE comcstfi_h, ONLY: g, cpp |
---|
[38] | 82 | implicit none |
---|
| 83 | C |
---|
| 84 | C |
---|
[1047] | 85 | integer klon,klev,kidia |
---|
| 86 | parameter(kidia=1) |
---|
| 87 | integer, save :: kfdia ! =NDLO2 |
---|
[38] | 88 | |
---|
[1912] | 89 | include "yoegwd.h" |
---|
[38] | 90 | C----------------------------------------------------------------------- |
---|
| 91 | C |
---|
| 92 | C* 0.1 ARGUMENTS |
---|
| 93 | C --------- |
---|
| 94 | C |
---|
| 95 | C |
---|
| 96 | REAL PTE(NDLO2,klev), |
---|
| 97 | * PVOL(NDLO2,klev), |
---|
| 98 | * PVOM(NDLO2,klev), |
---|
| 99 | * PULOW(NDLO2), |
---|
| 100 | * PVLOW(NDLO2) |
---|
| 101 | REAL PUM1(NDLO2,klev), |
---|
| 102 | * PVM1(NDLO2,klev), |
---|
| 103 | * PTM1(NDLO2,klev), |
---|
| 104 | * PVAROR(NDLO2),PSIG(NDLO2),PGAMMA(NDLO2),PTHETA(NDLO2), |
---|
| 105 | * PGEOM1(NDLO2,klev), |
---|
| 106 | * PAPM1(NDLO2,klev), |
---|
| 107 | * PAPHM1(NDLO2,klev+1) |
---|
| 108 | C |
---|
| 109 | integer kgwd,kgwdim |
---|
| 110 | real ptsphy |
---|
| 111 | INTEGER KDX(NDLO2),KTEST(NDLO2) |
---|
| 112 | C----------------------------------------------------------------------- |
---|
| 113 | C |
---|
| 114 | C* 0.2 LOCAL ARRAYS |
---|
| 115 | C ------------ |
---|
| 116 | INTEGER ISECT(NDLO2), |
---|
| 117 | * ICRIT(NDLO2), |
---|
| 118 | * IKCRITH(NDLO2), |
---|
| 119 | * IKenvh(NDLO2), |
---|
| 120 | * IKNU(NDLO2), |
---|
| 121 | * IKNU2(NDLO2), |
---|
| 122 | * IKCRIT(NDLO2), |
---|
| 123 | * IKHLIM(NDLO2) |
---|
| 124 | integer ji,jk,jl,klevm1,ilevp1 |
---|
| 125 | C real gkwake |
---|
[1913] | 126 | real ztmst,pvar(NDLO2,4),ztauf(NDLO2,klev+1) |
---|
| 127 | real zrtmst,zdelp,zb,zc,zbet |
---|
[38] | 128 | real zconb,zabsv,zzd1,ratio,zust,zvst,zdis,ztemp |
---|
| 129 | C |
---|
[1266] | 130 | REAL ZTAU(NDLO2,klev+1), |
---|
| 131 | * ZSTAB(NDLO2,klev+1), |
---|
| 132 | * ZVPH(NDLO2,klev+1), |
---|
| 133 | * ZRHO(NDLO2,klev+1), |
---|
| 134 | * ZRI(NDLO2,klev+1), |
---|
| 135 | * ZpsI(NDLO2,klev+1), |
---|
| 136 | * Zzdep(NDLO2,klev) |
---|
[38] | 137 | REAL ZDUDT(NDLO2), |
---|
| 138 | * ZDVDT(NDLO2), |
---|
| 139 | * ZDTDT(NDLO2), |
---|
| 140 | * ZDEDT(NDLO2), |
---|
| 141 | * ZVIDIS(NDLO2), |
---|
| 142 | * ZTFR(NDLO2), |
---|
| 143 | * Znu(NDLO2), |
---|
| 144 | * Zd1(NDLO2), |
---|
| 145 | * Zd2(NDLO2), |
---|
| 146 | * Zdmod(NDLO2) |
---|
| 147 | C |
---|
| 148 | C------------------------------------------------------------------ |
---|
| 149 | C |
---|
| 150 | C* 1. INITIALIZATION |
---|
| 151 | C -------------- |
---|
| 152 | C |
---|
| 153 | 100 CONTINUE |
---|
| 154 | C |
---|
| 155 | C ------------------------------------------------------------------ |
---|
| 156 | C |
---|
| 157 | C* 1.1 COMPUTATIONAL CONSTANTS |
---|
| 158 | C ----------------------- |
---|
| 159 | C |
---|
| 160 | 110 CONTINUE |
---|
| 161 | C |
---|
[1047] | 162 | kfdia=NDLO2 |
---|
| 163 | |
---|
[38] | 164 | c ZTMST=TWODT |
---|
| 165 | c IF(NSTEP.EQ.NSTART) ZTMST=0.5*TWODT |
---|
| 166 | KLEVM1=KLEV-1 |
---|
| 167 | ZTMST=PTSPHY |
---|
| 168 | ZRTMST=1./ZTMST |
---|
| 169 | C ------------------------------------------------------------------ |
---|
| 170 | C |
---|
| 171 | 120 CONTINUE |
---|
| 172 | C |
---|
| 173 | C ------------------------------------------------------------------ |
---|
| 174 | C |
---|
| 175 | C* 1.3 CHECK WHETHER ROW CONTAINS POINT FOR PRINTING |
---|
| 176 | C --------------------------------------------- |
---|
| 177 | C |
---|
| 178 | 130 CONTINUE |
---|
| 179 | C |
---|
| 180 | C ------------------------------------------------------------------ |
---|
| 181 | C |
---|
| 182 | C* 2. PRECOMPUTE BASIC STATE VARIABLES. |
---|
| 183 | C* ---------- ----- ----- ---------- |
---|
| 184 | C* DEFINE LOW LEVEL WIND, PROJECT WINDS IN PLANE OF |
---|
| 185 | C* LOW LEVEL WIND, DETERMINE SECTOR IN WHICH TO TAKE |
---|
| 186 | C* THE VARIANCE AND SET INDICATOR FOR CRITICAL LEVELS. |
---|
| 187 | C |
---|
| 188 | 200 CONTINUE |
---|
| 189 | C |
---|
| 190 | C |
---|
| 191 | C |
---|
| 192 | CALL OROSETUP |
---|
| 193 | * ( klon, klev , KTEST |
---|
| 194 | * , IKCRIT, IKCRITH, ICRIT, ISECT, IKHLIM, ikenvh,IKNU,iknu2 |
---|
| 195 | * , PAPHM1, PAPM1 , PUM1 , PVM1 , PTM1 , PGEOM1, pvaror |
---|
| 196 | * , ZRHO , ZRI , ZSTAB , ZTAU , ZVPH , zpsi, zzdep |
---|
| 197 | * , PULOW, PVLOW |
---|
| 198 | * , ptheta,pgamma,znu ,zd1, zd2, zdmod ) |
---|
| 199 | C |
---|
| 200 | C |
---|
| 201 | C |
---|
| 202 | C*********************************************************** |
---|
| 203 | C |
---|
| 204 | C |
---|
| 205 | C* 3. COMPUTE LOW LEVEL STRESSES USING SUBCRITICAL AND |
---|
| 206 | C* SUPERCRITICAL FORMS.COMPUTES ANISOTROPY COEFFICIENT |
---|
| 207 | C* AS MEASURE OF OROGRAPHIC TWODIMENSIONALITY. |
---|
| 208 | C |
---|
| 209 | 300 CONTINUE |
---|
| 210 | C |
---|
| 211 | CALL GWSTRESS |
---|
| 212 | * ( klon , klev |
---|
| 213 | * , IKCRIT, ISECT, IKHLIM, KTEST, IKCRITH, ICRIT, ikenvh, IKNU |
---|
| 214 | * , ZRHO , ZSTAB, ZVPH , PVAR , pvaror, psig |
---|
| 215 | * , ZTFR , ZTAU |
---|
| 216 | * , pgeom1,pgamma,zd1,zd2,zdmod,znu) |
---|
| 217 | C |
---|
| 218 | C* 4. COMPUTE STRESS PROFILE. |
---|
| 219 | C* ------- ------ -------- |
---|
| 220 | C |
---|
| 221 | 400 CONTINUE |
---|
| 222 | C |
---|
| 223 | C |
---|
| 224 | CALL GWPROFIL |
---|
| 225 | * ( klon , klev |
---|
| 226 | * , kgwd , kdx , KTEST |
---|
| 227 | * , IKCRIT, IKCRITH, ICRIT , ikenvh, IKNU |
---|
| 228 | * ,iknu2 , pAPHM1, ZRHO , ZSTAB , ZTFR , ZVPH |
---|
| 229 | * , ZRI , ZTAU , ztauf |
---|
| 230 | * , zdmod , znu , psig , pgamma , pvaror ) |
---|
| 231 | C |
---|
| 232 | C |
---|
| 233 | C* 5. COMPUTE TENDENCIES. |
---|
| 234 | C* ------------------- |
---|
| 235 | C |
---|
| 236 | 500 CONTINUE |
---|
| 237 | C |
---|
| 238 | C EXPLICIT SOLUTION AT ALL LEVELS FOR THE GRAVITY WAVE |
---|
| 239 | C IMPLICIT SOLUTION FOR THE BLOCKED LEVELS |
---|
| 240 | |
---|
| 241 | DO 510 JL=KIDIA,KFDIA |
---|
| 242 | ZVIDIS(JL)=0.0 |
---|
| 243 | ZDUDT(JL)=0.0 |
---|
| 244 | ZDVDT(JL)=0.0 |
---|
| 245 | ZDTDT(JL)=0.0 |
---|
| 246 | 510 CONTINUE |
---|
| 247 | C |
---|
| 248 | ILEVP1=KLEV+1 |
---|
| 249 | C |
---|
| 250 | C |
---|
| 251 | DO 524 JK=1,klev |
---|
| 252 | C |
---|
| 253 | CDIR$ IVDEP |
---|
| 254 | C |
---|
| 255 | C GKWAKE=0.5 |
---|
| 256 | C |
---|
| 257 | C NOW SET IN SUGWD.F |
---|
| 258 | C |
---|
| 259 | DO 523 JL=1,KGWD |
---|
| 260 | JI=KDX(JL) |
---|
| 261 | ZDELP=pAPHM1(Ji,JK+1)-pAPHM1(Ji,JK) |
---|
| 262 | ZTEMP=-g*(ZTAU(Ji,JK+1)-ZTAU(Ji,JK))/(ZVPH(Ji,ILEVP1)*ZDELP) |
---|
| 263 | ZDUDT(JI)=(PULOW(JI)*Zd1(ji)-pvlow(ji)*zd2(ji))*ztemp/zdmod(ji) |
---|
| 264 | ZDVDT(JI)=(pvLOW(JI)*Zd1(ji)+pulow(ji)*zd2(ji))*ztemp/zdmod(ji) |
---|
| 265 | if(jk.ge.ikenvh(ji)) then |
---|
| 266 | zb=1.0-0.18*pgamma(ji)-0.04*pgamma(ji)**2 |
---|
| 267 | zc=0.48*pgamma(ji)+0.3*pgamma(ji)**2 |
---|
| 268 | zconb=2.*ztmst*GKWAKE*psig(ji)/(4.*pvaror(ji)) |
---|
| 269 | zabsv=sqrt(PUM1(JI,JK)**2+PVM1(JI,JK)**2)/2. |
---|
| 270 | zzd1=zb*cos(zpsi(ji,jk))**2+zc*sin(zpsi(ji,jk))**2 |
---|
| 271 | ratio=(cos(zpsi(ji,jk))**2+pgamma(ji)*sin(zpsi(ji,jk))**2)/ |
---|
| 272 | * (pgamma(ji)*cos(zpsi(ji,jk))**2+sin(zpsi(ji,jk))**2) |
---|
| 273 | zbet=max(0.,2.-1./ratio)*zconb*zzdep(ji,jk)*zzd1*zabsv |
---|
| 274 | zdudt(ji)=-pum1(ji,jk)/ztmst |
---|
| 275 | zdvdt(ji)=-pvm1(ji,jk)/ztmst |
---|
| 276 | zdudt(ji)=zdudt(ji)*(zbet/(1.+zbet)) |
---|
| 277 | zdvdt(ji)=zdvdt(ji)*(zbet/(1.+zbet)) |
---|
| 278 | end if |
---|
| 279 | PVOM(JI,JK)=ZDUDT(JI) |
---|
| 280 | PVOL(JI,JK)=ZDVDT(JI) |
---|
| 281 | ZUST=PUM1(JI,JK)+ZTMST*ZDUDT(JI) |
---|
| 282 | ZVST=PVM1(JI,JK)+ZTMST*ZDVDT(JI) |
---|
| 283 | ZDIS=0.5*(PUM1(JI,JK)**2+PVM1(JI,JK)**2-ZUST**2-ZVST**2) |
---|
| 284 | ZDEDT(JI)=ZDIS/ZTMST |
---|
| 285 | ZVIDIS(JI)=ZVIDIS(JI)+ZDIS*ZDELP |
---|
| 286 | ZDTDT(JI)=ZDEDT(JI)/cpp |
---|
| 287 | PTE(JI,JK)=ZDTDT(JI) |
---|
| 288 | |
---|
| 289 | 523 CONTINUE |
---|
| 290 | |
---|
| 291 | 524 CONTINUE |
---|
| 292 | C |
---|
| 293 | C |
---|
[1912] | 294 | |
---|
| 295 | END SUBROUTINE ORODRAG |
---|
| 296 | |
---|
| 297 | END MODULE orodrag_mod |
---|