[1056] | 1 | |
---|
| 2 | C SUBROUTINE DE PARAMETRISATION DES MONTAGNES D ECHELLE SOUS MAILLE |
---|
| 3 | |
---|
| 4 | SUBROUTINE drag_noro (nlon,nlev,dtime,paprs,pplay,pgeop,pn2, |
---|
| 5 | e pmea,pstd, psig, pgam, pthe,ppic,pval, |
---|
| 6 | e kgwd,kdx,ktest, |
---|
| 7 | e t, u, v, |
---|
| 8 | s pulow, pvlow, pustr, pvstr, |
---|
| 9 | s d_t, d_u, d_v) |
---|
| 10 | c |
---|
| 11 | use dimphy |
---|
| 12 | IMPLICIT none |
---|
| 13 | |
---|
| 14 | #include "dimensions.h" |
---|
| 15 | #include "paramet.h" |
---|
| 16 | |
---|
| 17 | c====================================================================== |
---|
| 18 | c Auteur(s): F.Lott (LMD/CNRS) date: 19950201 |
---|
| 19 | c Object: Mountain drag interface. Made necessary because: |
---|
| 20 | C 1. in the LMD-GCM Layers are from bottom to top, |
---|
| 21 | C contrary to most European GCM. |
---|
| 22 | c 2. the altitude above ground of each model layers |
---|
| 23 | c needs to be known (variable zgeom) |
---|
| 24 | c====================================================================== |
---|
| 25 | c Explicit Arguments: |
---|
| 26 | c ================== |
---|
| 27 | c nlon----input-I-Total number of horizontal points that get into physics |
---|
| 28 | c nlev----input-I-Number of vertical levels |
---|
| 29 | c dtime---input-R-Time-step (s) |
---|
| 30 | c paprs---input-R-Pressure in semi layers (Pa) |
---|
| 31 | c pplay---input-R-Pressure model-layers (Pa) |
---|
| 32 | c pgeop---input-R-Geopotential model layers (m) |
---|
| 33 | c pn2-----input-R-Brunt-Vaisala freq.^2 at 1/2 layers |
---|
| 34 | c t-------input-R-temperature (K) |
---|
| 35 | c u-------input-R-Horizontal wind (m/s) |
---|
| 36 | c v-------input-R-Meridional wind (m/s) |
---|
| 37 | c pmea----input-R-Mean Orography (m) |
---|
| 38 | C pstd----input-R-SSO standard deviation (m) |
---|
| 39 | c psig----input-R-SSO slope |
---|
| 40 | c pgam----input-R-SSO Anisotropy |
---|
| 41 | c pthe----input-R-SSO Angle |
---|
| 42 | c ppic----input-R-SSO Peacks elevation (m) |
---|
| 43 | c pval----input-R-SSO Valleys elevation (m) |
---|
| 44 | c |
---|
| 45 | c kgwd- -input-I: Total nb of points where the orography schemes are active |
---|
| 46 | c ktest--input-I: Flags to indicate active points |
---|
| 47 | c kdx----input-I: Locate the physical location of an active point. |
---|
| 48 | |
---|
| 49 | c pulow, pvlow -output-R: Low-level wind |
---|
| 50 | c pustr, pvstr -output-R: Surface stress due to SSO drag (Pa) |
---|
| 51 | c |
---|
| 52 | c d_t-----output-R: T increment |
---|
| 53 | c d_u-----output-R: U increment |
---|
| 54 | c d_v-----output-R: V increment |
---|
| 55 | c |
---|
| 56 | c Implicit Arguments: |
---|
| 57 | c =================== |
---|
| 58 | c |
---|
| 59 | c iim--common-I: Number of longitude intervals |
---|
| 60 | c jjm--common-I: Number of latitude intervals |
---|
| 61 | c klon-common-I: Number of points seen by the physics |
---|
| 62 | c (iim+1)*(jjm+1) for instance |
---|
| 63 | c klev-common-I: Number of vertical layers |
---|
| 64 | c====================================================================== |
---|
| 65 | c Local Variables: |
---|
| 66 | c ================ |
---|
| 67 | c |
---|
| 68 | c zgeom-----R: Altitude of layer above ground |
---|
| 69 | c pt, pu, pv --R: t u v from top to bottom |
---|
| 70 | c pdtdt, pdudt, pdvdt --R: t u v tendencies (from top to bottom) |
---|
| 71 | c papmf: pressure at model layer (from top to bottom) |
---|
| 72 | c papmh: pressure at model 1/2 layer (from top to bottom) |
---|
| 73 | c |
---|
| 74 | c====================================================================== |
---|
| 75 | |
---|
| 76 | #include "YOMCST.h" |
---|
| 77 | #include "YOEGWD.h" |
---|
| 78 | |
---|
| 79 | c ARGUMENTS |
---|
| 80 | c |
---|
| 81 | INTEGER nlon,nlev |
---|
| 82 | REAL dtime |
---|
| 83 | REAL paprs(nlon,nlev+1) |
---|
| 84 | REAL pplay(nlon,nlev) |
---|
| 85 | REAL pgeop(nlon,nlev),pn2(nlon,nlev) |
---|
| 86 | REAL pmea(nlon),pstd(nlon),psig(nlon),pgam(nlon),pthe(nlon) |
---|
| 87 | REAL ppic(nlon),pval(nlon) |
---|
| 88 | REAL pulow(nlon),pvlow(nlon),pustr(nlon),pvstr(nlon) |
---|
| 89 | REAL t(nlon,nlev), u(nlon,nlev), v(nlon,nlev) |
---|
| 90 | REAL d_t(nlon,nlev), d_u(nlon,nlev), d_v(nlon,nlev) |
---|
| 91 | c |
---|
| 92 | INTEGER i, k, kgwd, kdx(nlon), ktest(nlon) |
---|
| 93 | c |
---|
| 94 | c LOCAL VARIABLES: |
---|
| 95 | c |
---|
| 96 | REAL zgeom(klon,klev),zn2(klon,klev) |
---|
| 97 | REAL pdtdt(klon,klev), pdudt(klon,klev), pdvdt(klon,klev) |
---|
| 98 | REAL pt(klon,klev), pu(klon,klev), pv(klon,klev) |
---|
| 99 | REAL papmf(klon,klev),papmh(klon,klev+1) |
---|
| 100 | c |
---|
| 101 | c INITIALIZE OUTPUT VARIABLES |
---|
| 102 | c |
---|
| 103 | DO i = 1,klon |
---|
| 104 | pulow(i) = 0.0 |
---|
| 105 | pvlow(i) = 0.0 |
---|
| 106 | pustr(i) = 0.0 |
---|
| 107 | pvstr(i) = 0.0 |
---|
| 108 | ENDDO |
---|
| 109 | DO k = 1, klev |
---|
| 110 | DO i = 1, klon |
---|
| 111 | d_t(i,k) = 0.0 |
---|
| 112 | d_u(i,k) = 0.0 |
---|
| 113 | d_v(i,k) = 0.0 |
---|
| 114 | pdudt(i,k)=0.0 |
---|
| 115 | pdvdt(i,k)=0.0 |
---|
| 116 | pdtdt(i,k)=0.0 |
---|
| 117 | ENDDO |
---|
| 118 | ENDDO |
---|
| 119 | c |
---|
| 120 | c PREPARE INPUT VARIABLES FOR ORODRAG (i.e., ORDERED FROM TOP TO BOTTOM) |
---|
| 121 | C CALCULATE LAYERS HEIGHT ABOVE GROUND) |
---|
| 122 | c |
---|
| 123 | DO k = 1, klev |
---|
| 124 | DO i = 1, klon |
---|
| 125 | pt(i,k) = t(i,klev-k+1) |
---|
| 126 | pu(i,k) = u(i,klev-k+1) |
---|
| 127 | pv(i,k) = v(i,klev-k+1) |
---|
| 128 | papmf(i,k) = pplay(i,klev-k+1) |
---|
| 129 | ENDDO |
---|
| 130 | ENDDO |
---|
| 131 | DO k = 1, klev+1 |
---|
| 132 | DO i = 1, klon |
---|
| 133 | papmh(i,k) = paprs(i,klev-k+2) |
---|
| 134 | ENDDO |
---|
| 135 | ENDDO |
---|
| 136 | |
---|
| 137 | DO k = klev, 1, -1 |
---|
| 138 | DO i = 1, klon |
---|
| 139 | zgeom(i,k) = pgeop(i,klev-k+1) |
---|
| 140 | zn2(i,k) = pn2(i,klev-k+1) |
---|
| 141 | ENDDO |
---|
| 142 | ENDDO |
---|
| 143 | |
---|
| 144 | c CALL SSO DRAG ROUTINES |
---|
| 145 | c |
---|
| 146 | CALL orodrag(klon,klev,kgwd,kdx,ktest, |
---|
| 147 | . dtime, |
---|
| 148 | . papmh, papmf, zgeom, zn2, |
---|
| 149 | . pt, pu, pv, |
---|
| 150 | . pmea, pstd, psig, pgam, pthe, ppic,pval, |
---|
| 151 | . pulow,pvlow, |
---|
| 152 | . pdudt,pdvdt,pdtdt) |
---|
| 153 | C |
---|
| 154 | C COMPUTE INCREMENTS AND STRESS FROM TENDENCIES |
---|
| 155 | |
---|
| 156 | DO k = 1, klev |
---|
| 157 | DO i = 1, klon |
---|
| 158 | d_u(i,klev+1-k) = dtime*pdudt(i,k) |
---|
| 159 | d_v(i,klev+1-k) = dtime*pdvdt(i,k) |
---|
| 160 | d_t(i,klev+1-k) = dtime*pdtdt(i,k) |
---|
| 161 | pustr(i) = pustr(i) |
---|
| 162 | . +pdudt(i,k)*(papmh(i,k+1)-papmh(i,k))/rg |
---|
| 163 | pvstr(i) = pvstr(i) |
---|
| 164 | . +pdvdt(i,k)*(papmh(i,k+1)-papmh(i,k))/rg |
---|
| 165 | ENDDO |
---|
| 166 | ENDDO |
---|
| 167 | c |
---|
| 168 | RETURN |
---|
| 169 | END |
---|
| 170 | |
---|