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 | |
---|