/[lmdze]/trunk/libf/dyn3d/inigeom.f90
ViewVC logotype

Contents of /trunk/libf/dyn3d/inigeom.f90

Parent Directory Parent Directory | Revision Log Revision Log


Revision 38 - (show annotations)
Thu Jan 6 17:52:19 2011 UTC (13 years, 4 months ago) by guez
File size: 18293 byte(s)
Extracted ASCII art from "inigeom" into a separate text file in the
documentation.

"test_disvert" now creates a separate file for layer thicknesses.

Moved variables from module "yomcst" to module "suphec_m" because this
is where those variables are defined. Kept in "yomcst" only parameters
of Earth orbit. Gave the attribute "parameter" to some variables of
module "suphec_m".

Variables of module "yoethf" were defined in procedure "suphec". Moved
these definitions to a new procedure "yoethf" in module "yoethf_m".

1 module inigeom_m
2
3 IMPLICIT NONE
4
5 contains
6
7 SUBROUTINE inigeom
8
9 ! Auteur : P. Le Van
10 ! Version du 01/04/2001
11
12 ! Calcul des élongations cuij1, ..., cuij4, cvij1, ..., cvij4 aux mêmes
13 ! endroits que les aires aireij1_2d, ..., aireij4_2d.
14
15 ! Choix entre une fonction "f(y)" à dérivée sinusoïdale ou à dérivée
16 ! tangente hyperbolique
17 ! calcul des coefficients (cu_2d, cv_2d, 1./cu_2d**2, 1./cv_2d**2)
18
19 ! les coef. (cu_2d, cv_2d) permettent de passer des vitesses naturelles
20 ! aux vitesses covariantes et contravariantes, ou vice-versa
21
22 ! on a :
23 ! u (covariant) = cu_2d * u (naturel), u(contrav)= u(nat)/cu_2d
24 ! v (covariant) = cv_2d * v (naturel), v(contrav)= v(nat)/cv_2d
25
26 ! on en tire :
27 ! u(covariant) = cu_2d * cu_2d * u(contravariant)
28 ! v(covariant) = cv_2d * cv_2d * v(contravariant)
29
30 ! on a l'application (x(X), y(Y)) avec - im/2 +1 <= X <= im/2
31 ! et - jm/2 <= Y <= jm/2
32
33 ! x est la longitude du point en radians.
34 ! y est la latitude du point en radians.
35 !
36 ! on a : cu_2d(i, j) = rad * cos(y) * dx/dX
37 ! cv(j) = rad * dy/dY
38 ! aire_2d(i, j) = cu_2d(i, j) * cv(j)
39 !
40 ! y, dx/dX, dy/dY calcules aux points concernes
41 ! cv, bien que dependant de j uniquement, sera ici indice aussi en i
42 ! pour un adressage plus facile en ij.
43
44 ! aux points u et v,
45 ! xprimu et xprimv sont respectivement les valeurs de dx/dX
46 ! yprimu et yprimv sont respectivement les valeurs de dy/dY
47 ! rlatu et rlatv sont respectivement les valeurs de la latitude
48 ! cvu et cv_2d sont respectivement les valeurs de cv_2d
49
50 ! aux points u, v, scalaires, et z
51 ! cu_2d, cuv, cuscal, cuz sont respectivement les valeurs de cu_2d
52 ! Cf. "inigeom.txt".
53
54 USE dimens_m, ONLY : iim, jjm
55 USE paramet_m, ONLY : iip1, jjp1
56 USE comconst, ONLY : g, omeg, pi, rad
57 USE comdissnew, ONLY : coefdis, nitergdiv, nitergrot, niterh
58 USE logic, ONLY : fxyhypb, ysinus
59 USE comgeom, ONLY : airesurg_2d, aireu_2d, airev_2d, aire_2d, &
60 alpha1p2_2d, alpha1p4_2d, alpha1_2d, &
61 alpha2p3_2d, alpha2_2d, alpha3p4_2d, alpha3_2d, alpha4_2d, apoln, &
62 apols, constang_2d, cuscvugam_2d, cusurcvu_2d, cuvscvgam1_2d, &
63 cuvscvgam2_2d, cuvsurcv_2d, cu_2d, cvscuvgam_2d, cvsurcuv_2d, &
64 cvuscugam1_2d, cvuscugam2_2d, cvusurcu_2d, cv_2d, fext_2d, rlatu, &
65 rlatv, rlonu, rlonv, unsairez_2d, unsaire_2d, unsairz_gam_2d, &
66 unsair_gam1_2d, unsair_gam2_2d, unsapolnga1, unsapolnga2, &
67 unsapolsga1, unsapolsga2, unscu2_2d, unscv2_2d, xprimu, xprimv
68 USE serre, ONLY : alphax, alphay, clat, clon, dzoomx, dzoomy, grossismx, &
69 grossismy, pxo, pyo, taux, tauy, transx, transy
70
71 ! Variables locales
72
73 INTEGER i, j, itmax, itmay, iter
74 REAL cvu(iip1, jjp1), cuv(iip1, jjm)
75 REAL ai14, ai23, airez, rlatp, rlatm, xprm, xprp, un4rad2, yprp, yprm
76 REAL eps, x1, xo1, f, df, xdm, y1, yo1, ydm
77 REAL coslatm, coslatp, radclatm, radclatp
78 REAL cuij1(iip1, jjp1), cuij2(iip1, jjp1), cuij3(iip1, jjp1), &
79 cuij4(iip1, jjp1)
80 REAL cvij1(iip1, jjp1), cvij2(iip1, jjp1), cvij3(iip1, jjp1), &
81 cvij4(iip1, jjp1)
82 REAL rlonvv(iip1), rlatuu(jjp1)
83 REAL rlatu1(jjm), yprimu1(jjm), rlatu2(jjm), yprimu2(jjm), yprimv(jjm), &
84 yprimu(jjp1)
85 REAL gamdi_gdiv, gamdi_grot, gamdi_h
86
87 REAL rlonm025(iip1), xprimm025(iip1), rlonp025(iip1), xprimp025(iip1)
88 SAVE rlatu1, yprimu1, rlatu2, yprimu2, yprimv, yprimu
89 SAVE rlonm025, xprimm025, rlonp025, xprimp025
90
91 real aireij1_2d(iim + 1, jjm + 1)
92 real aireij2_2d(iim + 1, jjm + 1)
93 real aireij3_2d(iim + 1, jjm + 1), aireij4_2d(iim + 1, jjm + 1)
94 real airuscv2_2d(iim + 1, jjm)
95 real airvscu2_2d(iim + 1, jjm), aiuscv2gam_2d(iim + 1, jjm)
96 real aivscu2gam_2d(iim + 1, jjm)
97
98 !------------------------------------------------------------------
99
100 PRINT *, 'Call sequence information: inigeom'
101
102 IF (nitergdiv/=2) THEN
103 gamdi_gdiv = coefdis/(real(nitergdiv)-2.)
104 ELSE
105 gamdi_gdiv = 0.
106 END IF
107 IF (nitergrot/=2) THEN
108 gamdi_grot = coefdis/(real(nitergrot)-2.)
109 ELSE
110 gamdi_grot = 0.
111 END IF
112 IF (niterh/=2) THEN
113 gamdi_h = coefdis/(real(niterh)-2.)
114 ELSE
115 gamdi_h = 0.
116 END IF
117
118 print *, 'gamdi_gdiv = ', gamdi_gdiv
119 print *, "gamdi_grot = ", gamdi_grot
120 print *, "gamdi_h = ", gamdi_h
121
122 WRITE (6, 990)
123
124 IF (.NOT. fxyhypb) THEN
125 IF (ysinus) THEN
126 print *, ' Inigeom, Y = Sinus (Latitude) '
127 ! utilisation de f(x, y) avec y = sinus de la latitude
128 CALL fxysinus(rlatu, yprimu, rlatv, yprimv, rlatu1, yprimu1, &
129 rlatu2, yprimu2, rlonu, xprimu, rlonv, xprimv, rlonm025, &
130 xprimm025, rlonp025, xprimp025)
131 ELSE
132 print *, 'Inigeom, Y = Latitude, der. sinusoid .'
133 ! utilisation de f(x, y) a tangente sinusoidale, y etant la latit
134
135 pxo = clon*pi/180.
136 pyo = 2.*clat*pi/180.
137
138 ! determination de transx (pour le zoom) par Newton-Raphson
139
140 itmax = 10
141 eps = .1E-7
142
143 xo1 = 0.
144 DO iter = 1, itmax
145 x1 = xo1
146 f = x1 + alphax*sin(x1-pxo)
147 df = 1. + alphax*cos(x1-pxo)
148 x1 = x1 - f/df
149 xdm = abs(x1-xo1)
150 IF (xdm<=eps) EXIT
151 xo1 = x1
152 END DO
153
154 transx = xo1
155
156 itmay = 10
157 eps = .1E-7
158
159 yo1 = 0.
160 DO iter = 1, itmay
161 y1 = yo1
162 f = y1 + alphay*sin(y1-pyo)
163 df = 1. + alphay*cos(y1-pyo)
164 y1 = y1 - f/df
165 ydm = abs(y1-yo1)
166 IF (ydm<=eps) EXIT
167 yo1 = y1
168 END DO
169
170 transy = yo1
171
172 CALL fxy(rlatu, yprimu, rlatv, yprimv, rlatu1, yprimu1, rlatu2, &
173 yprimu2, rlonu, xprimu, rlonv, xprimv, rlonm025, xprimm025, &
174 rlonp025, xprimp025)
175 END IF
176 ELSE
177 ! Utilisation de fxyhyper, f(x, y) à dérivée tangente hyperbolique
178 print *, 'Inigeom, Y = Latitude, dérivée tangente hyperbolique'
179 CALL fxyhyper(clat, grossismy, dzoomy, tauy, clon, grossismx, dzoomx, &
180 taux, rlatu, yprimu, rlatv, yprimv, rlatu1, yprimu1, rlatu2, &
181 yprimu2, rlonu, xprimu, rlonv, xprimv, rlonm025, xprimm025, &
182 rlonp025, xprimp025)
183 END IF
184
185 rlatu(1) = asin(1.)
186 rlatu(jjp1) = -rlatu(1)
187
188 ! calcul aux poles
189
190 yprimu(1) = 0.
191 yprimu(jjp1) = 0.
192
193 un4rad2 = 0.25*rad*rad
194
195 ! calcul des aires (aire_2d, aireu_2d, airev_2d, 1./aire_2d, 1./airez)
196 ! - et de fext_2d, force de coriolis extensive
197
198 ! A 1 point scalaire P (i, j) de la grille, reguliere en (X, Y), sont
199 ! affectees 4 aires entourant P, calculees respectivement aux points
200 ! (i + 1/4, j - 1/4) : aireij1_2d (i, j)
201 ! (i + 1/4, j + 1/4) : aireij2_2d (i, j)
202 ! (i - 1/4, j + 1/4) : aireij3_2d (i, j)
203 ! (i - 1/4, j - 1/4) : aireij4_2d (i, j)
204
205 !,
206 ! Les cotes de chacun de ces 4 carres etant egaux a 1/2 suivant (X, Y).
207 ! Chaque aire centree en 1 point scalaire P(i, j) est egale a la somme
208 ! des 4 aires aireij1_2d, aireij2_2d, aireij3_2d, aireij4_2d qui sont
209 ! affectees au
210 ! point (i, j).
211 ! On definit en outre les coefficients alpha comme etant egaux a
212 ! (aireij / aire_2d), c.a.d par exp.
213 ! alpha1_2d(i, j)=aireij1_2d(i, j)/aire_2d(i, j)
214
215 ! De meme, toute aire centree en 1 point U est egale a la somme des
216 ! 4 aires aireij1_2d, aireij2_2d, aireij3_2d, aireij4_2d entourant
217 ! le point U.
218 ! Idem pour airev_2d, airez.
219
220 ! On a, pour chaque maille : dX = dY = 1
221
222 ! V
223
224 ! aireij4_2d . . aireij1_2d
225
226 ! U . . P . U
227
228 ! aireij3_2d . . aireij2_2d
229
230 ! V
231
232 ! Calcul des 4 aires elementaires aireij1_2d, aireij2_2d,
233 ! aireij3_2d, aireij4_2d
234 ! qui entourent chaque aire_2d(i, j), ainsi que les 4 elongations
235 ! elementaires
236 ! cuij et les 4 elongat. cvij qui sont calculees aux memes
237 ! endroits que les aireij.
238
239 ! do 35 : boucle sur les jjm + 1 latitudes
240
241 DO j = 1, jjp1
242
243 IF (j==1) THEN
244
245 yprm = yprimu1(j)
246 rlatm = rlatu1(j)
247
248 coslatm = cos(rlatm)
249 radclatm = 0.5*rad*coslatm
250
251 DO i = 1, iim
252 xprp = xprimp025(i)
253 xprm = xprimm025(i)
254 aireij2_2d(i, 1) = un4rad2*coslatm*xprp*yprm
255 aireij3_2d(i, 1) = un4rad2*coslatm*xprm*yprm
256 cuij2(i, 1) = radclatm*xprp
257 cuij3(i, 1) = radclatm*xprm
258 cvij2(i, 1) = 0.5*rad*yprm
259 cvij3(i, 1) = cvij2(i, 1)
260 END DO
261
262 DO i = 1, iim
263 aireij1_2d(i, 1) = 0.
264 aireij4_2d(i, 1) = 0.
265 cuij1(i, 1) = 0.
266 cuij4(i, 1) = 0.
267 cvij1(i, 1) = 0.
268 cvij4(i, 1) = 0.
269 END DO
270
271 END IF
272
273 IF (j==jjp1) THEN
274 yprp = yprimu2(j-1)
275 rlatp = rlatu2(j-1)
276
277 coslatp = cos(rlatp)
278 radclatp = 0.5*rad*coslatp
279
280 DO i = 1, iim
281 xprp = xprimp025(i)
282 xprm = xprimm025(i)
283 aireij1_2d(i, jjp1) = un4rad2*coslatp*xprp*yprp
284 aireij4_2d(i, jjp1) = un4rad2*coslatp*xprm*yprp
285 cuij1(i, jjp1) = radclatp*xprp
286 cuij4(i, jjp1) = radclatp*xprm
287 cvij1(i, jjp1) = 0.5*rad*yprp
288 cvij4(i, jjp1) = cvij1(i, jjp1)
289 END DO
290
291 DO i = 1, iim
292 aireij2_2d(i, jjp1) = 0.
293 aireij3_2d(i, jjp1) = 0.
294 cvij2(i, jjp1) = 0.
295 cvij3(i, jjp1) = 0.
296 cuij2(i, jjp1) = 0.
297 cuij3(i, jjp1) = 0.
298 END DO
299
300 END IF
301
302 IF (j>1 .AND. j<jjp1) THEN
303
304 rlatp = rlatu2(j-1)
305 yprp = yprimu2(j-1)
306 rlatm = rlatu1(j)
307 yprm = yprimu1(j)
308
309 coslatm = cos(rlatm)
310 coslatp = cos(rlatp)
311 radclatp = 0.5*rad*coslatp
312 radclatm = 0.5*rad*coslatm
313
314 DO i = 1, iim
315 xprp = xprimp025(i)
316 xprm = xprimm025(i)
317
318 ai14 = un4rad2*coslatp*yprp
319 ai23 = un4rad2*coslatm*yprm
320 aireij1_2d(i, j) = ai14*xprp
321 aireij2_2d(i, j) = ai23*xprp
322 aireij3_2d(i, j) = ai23*xprm
323 aireij4_2d(i, j) = ai14*xprm
324 cuij1(i, j) = radclatp*xprp
325 cuij2(i, j) = radclatm*xprp
326 cuij3(i, j) = radclatm*xprm
327 cuij4(i, j) = radclatp*xprm
328 cvij1(i, j) = 0.5*rad*yprp
329 cvij2(i, j) = 0.5*rad*yprm
330 cvij3(i, j) = cvij2(i, j)
331 cvij4(i, j) = cvij1(i, j)
332 END DO
333
334 END IF
335
336 ! periodicite
337
338 cvij1(iip1, j) = cvij1(1, j)
339 cvij2(iip1, j) = cvij2(1, j)
340 cvij3(iip1, j) = cvij3(1, j)
341 cvij4(iip1, j) = cvij4(1, j)
342 cuij1(iip1, j) = cuij1(1, j)
343 cuij2(iip1, j) = cuij2(1, j)
344 cuij3(iip1, j) = cuij3(1, j)
345 cuij4(iip1, j) = cuij4(1, j)
346 aireij1_2d(iip1, j) = aireij1_2d(1, j)
347 aireij2_2d(iip1, j) = aireij2_2d(1, j)
348 aireij3_2d(iip1, j) = aireij3_2d(1, j)
349 aireij4_2d(iip1, j) = aireij4_2d(1, j)
350
351 END DO
352
353 DO j = 1, jjp1
354 DO i = 1, iim
355 aire_2d(i, j) = aireij1_2d(i, j) + aireij2_2d(i, j) &
356 + aireij3_2d(i, j) + aireij4_2d(i, j)
357 alpha1_2d(i, j) = aireij1_2d(i, j)/aire_2d(i, j)
358 alpha2_2d(i, j) = aireij2_2d(i, j)/aire_2d(i, j)
359 alpha3_2d(i, j) = aireij3_2d(i, j)/aire_2d(i, j)
360 alpha4_2d(i, j) = aireij4_2d(i, j)/aire_2d(i, j)
361 alpha1p2_2d(i, j) = alpha1_2d(i, j) + alpha2_2d(i, j)
362 alpha1p4_2d(i, j) = alpha1_2d(i, j) + alpha4_2d(i, j)
363 alpha2p3_2d(i, j) = alpha2_2d(i, j) + alpha3_2d(i, j)
364 alpha3p4_2d(i, j) = alpha3_2d(i, j) + alpha4_2d(i, j)
365 END DO
366
367 aire_2d(iip1, j) = aire_2d(1, j)
368 alpha1_2d(iip1, j) = alpha1_2d(1, j)
369 alpha2_2d(iip1, j) = alpha2_2d(1, j)
370 alpha3_2d(iip1, j) = alpha3_2d(1, j)
371 alpha4_2d(iip1, j) = alpha4_2d(1, j)
372 alpha1p2_2d(iip1, j) = alpha1p2_2d(1, j)
373 alpha1p4_2d(iip1, j) = alpha1p4_2d(1, j)
374 alpha2p3_2d(iip1, j) = alpha2p3_2d(1, j)
375 alpha3p4_2d(iip1, j) = alpha3p4_2d(1, j)
376 END DO
377
378 DO j = 1, jjp1
379 DO i = 1, iim
380 aireu_2d(i, j) = aireij1_2d(i, j) + aireij2_2d(i, j) + &
381 aireij4_2d(i+1, j) + aireij3_2d(i+1, j)
382 unsaire_2d(i, j) = 1./aire_2d(i, j)
383 unsair_gam1_2d(i, j) = unsaire_2d(i, j)**(-gamdi_gdiv)
384 unsair_gam2_2d(i, j) = unsaire_2d(i, j)**(-gamdi_h)
385 airesurg_2d(i, j) = aire_2d(i, j)/g
386 END DO
387 aireu_2d(iip1, j) = aireu_2d(1, j)
388 unsaire_2d(iip1, j) = unsaire_2d(1, j)
389 unsair_gam1_2d(iip1, j) = unsair_gam1_2d(1, j)
390 unsair_gam2_2d(iip1, j) = unsair_gam2_2d(1, j)
391 airesurg_2d(iip1, j) = airesurg_2d(1, j)
392 END DO
393
394 DO j = 1, jjm
395
396 DO i = 1, iim
397 airev_2d(i, j) = aireij2_2d(i, j) + aireij3_2d(i, j) + &
398 aireij1_2d(i, j+1) + aireij4_2d(i, j+1)
399 END DO
400 DO i = 1, iim
401 airez = aireij2_2d(i, j) + aireij1_2d(i, j+1) + aireij3_2d(i+1, j) &
402 + aireij4_2d(i+1, j+1)
403 unsairez_2d(i, j) = 1./airez
404 unsairz_gam_2d(i, j) = unsairez_2d(i, j)**(-gamdi_grot)
405 fext_2d(i, j) = airez*sin(rlatv(j))*2.*omeg
406 END DO
407 airev_2d(iip1, j) = airev_2d(1, j)
408 unsairez_2d(iip1, j) = unsairez_2d(1, j)
409 fext_2d(iip1, j) = fext_2d(1, j)
410 unsairz_gam_2d(iip1, j) = unsairz_gam_2d(1, j)
411
412 END DO
413
414 ! Calcul des elongations cu_2d, cv_2d, cvu
415
416 DO j = 1, jjm
417 DO i = 1, iim
418 cv_2d(i, j) = 0.5 * &
419 (cvij2(i, j) + cvij3(i, j) + cvij1(i, j+1) + cvij4(i, j+1))
420 cvu(i, j) = 0.5*(cvij1(i, j)+cvij4(i, j)+cvij2(i, j)+cvij3(i, j))
421 cuv(i, j) = 0.5*(cuij2(i, j)+cuij3(i, j)+cuij1(i, j+1)+cuij4(i, j+1))
422 unscv2_2d(i, j) = 1./(cv_2d(i, j)*cv_2d(i, j))
423 END DO
424 DO i = 1, iim
425 cuvsurcv_2d(i, j) = airev_2d(i, j)*unscv2_2d(i, j)
426 cvsurcuv_2d(i, j) = 1./cuvsurcv_2d(i, j)
427 cuvscvgam1_2d(i, j) = cuvsurcv_2d(i, j)**(-gamdi_gdiv)
428 cuvscvgam2_2d(i, j) = cuvsurcv_2d(i, j)**(-gamdi_h)
429 cvscuvgam_2d(i, j) = cvsurcuv_2d(i, j)**(-gamdi_grot)
430 END DO
431 cv_2d(iip1, j) = cv_2d(1, j)
432 cvu(iip1, j) = cvu(1, j)
433 unscv2_2d(iip1, j) = unscv2_2d(1, j)
434 cuv(iip1, j) = cuv(1, j)
435 cuvsurcv_2d(iip1, j) = cuvsurcv_2d(1, j)
436 cvsurcuv_2d(iip1, j) = cvsurcuv_2d(1, j)
437 cuvscvgam1_2d(iip1, j) = cuvscvgam1_2d(1, j)
438 cuvscvgam2_2d(iip1, j) = cuvscvgam2_2d(1, j)
439 cvscuvgam_2d(iip1, j) = cvscuvgam_2d(1, j)
440 END DO
441
442 DO j = 2, jjm
443 DO i = 1, iim
444 cu_2d(i, j) = 0.5 * (cuij1(i, j) + cuij4(i+1, j) + cuij2(i, j) &
445 + cuij3(i+1, j))
446 unscu2_2d(i, j) = 1./(cu_2d(i, j)*cu_2d(i, j))
447 cvusurcu_2d(i, j) = aireu_2d(i, j)*unscu2_2d(i, j)
448 cusurcvu_2d(i, j) = 1./cvusurcu_2d(i, j)
449 cvuscugam1_2d(i, j) = cvusurcu_2d(i, j)**(-gamdi_gdiv)
450 cvuscugam2_2d(i, j) = cvusurcu_2d(i, j)**(-gamdi_h)
451 cuscvugam_2d(i, j) = cusurcvu_2d(i, j)**(-gamdi_grot)
452 END DO
453 cu_2d(iip1, j) = cu_2d(1, j)
454 unscu2_2d(iip1, j) = unscu2_2d(1, j)
455 cvusurcu_2d(iip1, j) = cvusurcu_2d(1, j)
456 cusurcvu_2d(iip1, j) = cusurcvu_2d(1, j)
457 cvuscugam1_2d(iip1, j) = cvuscugam1_2d(1, j)
458 cvuscugam2_2d(iip1, j) = cvuscugam2_2d(1, j)
459 cuscvugam_2d(iip1, j) = cuscvugam_2d(1, j)
460 END DO
461
462 ! calcul aux poles
463
464 DO i = 1, iip1
465 cu_2d(i, 1) = 0.
466 unscu2_2d(i, 1) = 0.
467 cvu(i, 1) = 0.
468
469 cu_2d(i, jjp1) = 0.
470 unscu2_2d(i, jjp1) = 0.
471 cvu(i, jjp1) = 0.
472 END DO
473
474 DO j = 1, jjm
475 DO i = 1, iim
476 airvscu2_2d(i, j) = airev_2d(i, j)/(cuv(i, j)*cuv(i, j))
477 aivscu2gam_2d(i, j) = airvscu2_2d(i, j)**(-gamdi_grot)
478 END DO
479 airvscu2_2d(iip1, j) = airvscu2_2d(1, j)
480 aivscu2gam_2d(iip1, j) = aivscu2gam_2d(1, j)
481 END DO
482
483 DO j = 2, jjm
484 DO i = 1, iim
485 airuscv2_2d(i, j) = aireu_2d(i, j)/(cvu(i, j)*cvu(i, j))
486 aiuscv2gam_2d(i, j) = airuscv2_2d(i, j)**(-gamdi_grot)
487 END DO
488 airuscv2_2d(iip1, j) = airuscv2_2d(1, j)
489 aiuscv2gam_2d(iip1, j) = aiuscv2gam_2d(1, j)
490 END DO
491
492 ! calcul des aires aux poles :
493
494 apoln = sum(aire_2d(:iim, 1))
495 apols = sum(aire_2d(:iim, jjp1))
496 unsapolnga1 = 1./(apoln**(-gamdi_gdiv))
497 unsapolsga1 = 1./(apols**(-gamdi_gdiv))
498 unsapolnga2 = 1./(apoln**(-gamdi_h))
499 unsapolsga2 = 1./(apols**(-gamdi_h))
500
501 ! changement F. Hourdin calcul conservatif pour fext_2d
502 ! constang_2d contient le produit a * cos (latitude) * omega
503
504 DO i = 1, iim
505 constang_2d(i, 1) = 0.
506 END DO
507 DO j = 1, jjm - 1
508 DO i = 1, iim
509 constang_2d(i, j+1) = rad*omeg*cu_2d(i, j+1)*cos(rlatu(j+1))
510 END DO
511 END DO
512 DO i = 1, iim
513 constang_2d(i, jjp1) = 0.
514 END DO
515
516 ! periodicite en longitude
517
518 DO j = 1, jjm
519 fext_2d(iip1, j) = fext_2d(1, j)
520 END DO
521 DO j = 1, jjp1
522 constang_2d(iip1, j) = constang_2d(1, j)
523 END DO
524
525 ! fin du changement
526
527 print *, ' Coordonnees de la grille '
528 WRITE (6, 995)
529
530 print *, ' LONGITUDES aux pts. V (degres) '
531 WRITE (6, 995)
532 DO i = 1, iip1
533 rlonvv(i) = rlonv(i)*180./pi
534 END DO
535 WRITE (6, 400) rlonvv
536
537 WRITE (6, 995)
538 print *, ' LATITUDES aux pts. V (degres) '
539 WRITE (6, 995)
540 DO i = 1, jjm
541 rlatuu(i) = rlatv(i)*180./pi
542 END DO
543 WRITE (6, 400) (rlatuu(i), i=1, jjm)
544
545 DO i = 1, iip1
546 rlonvv(i) = rlonu(i)*180./pi
547 END DO
548 WRITE (6, 995)
549 print *, ' LONGITUDES aux pts. U (degres) '
550 WRITE (6, 995)
551 WRITE (6, 400) rlonvv
552 WRITE (6, 995)
553
554 print *, ' LATITUDES aux pts. U (degres) '
555 WRITE (6, 995)
556 DO i = 1, jjp1
557 rlatuu(i) = rlatu(i)*180./pi
558 END DO
559 WRITE (6, 400) (rlatuu(i), i=1, jjp1)
560 WRITE (6, 995)
561
562 400 FORMAT (1X, 8F8.2)
563 990 FORMAT (//)
564 995 FORMAT (/)
565
566 END SUBROUTINE inigeom
567
568 end module inigeom_m

  ViewVC Help
Powered by ViewVC 1.1.21