12 |
! Author: P. Le Van, from analysis by R. Sadourny |
! Author: P. Le Van, from analysis by R. Sadourny |
13 |
|
|
14 |
! Calcule les latitudes et dérivées dans la grille du GCM pour une |
! Calcule les latitudes et dérivées dans la grille du GCM pour une |
15 |
! fonction f(y) à tangente hyperbolique. |
! fonction f(y) tangente hyperbolique. |
16 |
|
|
17 |
! Nota bene : il vaut mieux avoir grossism * dzoom < pi / 2 (rad), |
! Nota bene : il vaut mieux avoir grossism * dzoom < pi / 2 (rad), |
18 |
! en latitude. |
! en latitude. |
19 |
|
|
20 |
USE dimens_m, only: jjm |
USE dimens_m, only: jjm |
|
USE paramet_m, only: JJP1 |
|
21 |
|
|
22 |
REAL, intent(in):: yzoomdeg |
REAL, intent(in):: yzoomdeg |
23 |
|
|
31 |
|
|
32 |
! arguments de sortie |
! arguments de sortie |
33 |
|
|
34 |
REAL rrlatu(jjp1), yyprimu(jjp1), rrlatv(jjm), yyprimv(jjm) |
REAL, intent(out):: rrlatu(jjm + 1), yyprimu(jjm + 1) |
35 |
real rlatu2(jjm), yprimu2(jjm), rlatu1(jjm), yprimu1(jjm) |
REAL, intent(out):: rrlatv(jjm), yyprimv(jjm) |
36 |
DOUBLE PRECISION champmin, champmax |
real, intent(out):: rlatu2(jjm), yprimu2(jjm), rlatu1(jjm), yprimu1(jjm) |
37 |
|
DOUBLE PRECISION, intent(out):: champmin, champmax |
38 |
|
|
39 |
! Local: |
! Local: |
40 |
|
|
41 |
INTEGER, PARAMETER:: nmax=30000, nmax2=2*nmax |
INTEGER, PARAMETER:: nmax=30000, nmax2=2*nmax |
42 |
REAL dzoom ! distance totale de la zone du zoom (en radians) |
REAL dzoom ! distance totale de la zone du zoom (en radians) |
43 |
DOUBLE PRECISION ylat(jjp1), yprim(jjp1) |
DOUBLE PRECISION ylat(jjm + 1), yprim(jjm + 1) |
44 |
DOUBLE PRECISION yuv |
DOUBLE PRECISION yuv |
45 |
DOUBLE PRECISION, save:: yt(0:nmax2) |
DOUBLE PRECISION, save:: yt(0:nmax2) |
46 |
DOUBLE PRECISION fhyp(0:nmax2), beta |
DOUBLE PRECISION fhyp(0:nmax2), beta |
48 |
DOUBLE PRECISION fxm(0:nmax2) |
DOUBLE PRECISION fxm(0:nmax2) |
49 |
DOUBLE PRECISION, save:: yf(0:nmax2) |
DOUBLE PRECISION, save:: yf(0:nmax2) |
50 |
DOUBLE PRECISION yypr(0:nmax2) |
DOUBLE PRECISION yypr(0:nmax2) |
51 |
DOUBLE PRECISION yvrai(jjp1), yprimm(jjp1), ylatt(jjp1) |
DOUBLE PRECISION yvrai(jjm + 1), yprimm(jjm + 1), ylatt(jjm + 1) |
52 |
DOUBLE PRECISION pi, pis2, epsilon, y0, pisjm |
DOUBLE PRECISION pi, pis2, epsilon, y0, pisjm |
53 |
DOUBLE PRECISION yo1, yi, ylon2, ymoy, yprimin |
DOUBLE PRECISION yo1, yi, ylon2, ymoy, yprimin |
54 |
DOUBLE PRECISION yfi, yf1, ffdy |
DOUBLE PRECISION yfi, yf1, ffdy |
245 |
|
|
246 |
IF (ik==1) THEN |
IF (ik==1) THEN |
247 |
ypn = pis2 |
ypn = pis2 |
248 |
DO j = jlat, 1, -1 |
DO j = jjm + 1, 1, -1 |
249 |
IF (yvrai(j)<=ypn) exit |
IF (yvrai(j)<=ypn) exit |
250 |
END DO |
END DO |
251 |
|
|
279 |
END DO |
END DO |
280 |
|
|
281 |
IF (ik==1) THEN |
IF (ik==1) THEN |
282 |
DO j = 1, jlat |
DO j = 1, jjm + 1 |
283 |
rrlatu(j) = ylat(j) |
rrlatu(j) = ylat(j) |
284 |
yyprimu(j) = yprim(j) |
yyprimu(j) = yprim(j) |
285 |
END DO |
END DO |
286 |
ELSE IF (ik==2) THEN |
ELSE IF (ik==2) THEN |
287 |
DO j = 1, jlat |
DO j = 1, jjm |
288 |
rrlatv(j) = ylat(j) |
rrlatv(j) = ylat(j) |
289 |
yyprimv(j) = yprim(j) |
yyprimv(j) = yprim(j) |
290 |
END DO |
END DO |
291 |
ELSE IF (ik==3) THEN |
ELSE IF (ik==3) THEN |
292 |
DO j = 1, jlat |
DO j = 1, jjm |
293 |
rlatu2(j) = ylat(j) |
rlatu2(j) = ylat(j) |
294 |
yprimu2(j) = yprim(j) |
yprimu2(j) = yprim(j) |
295 |
END DO |
END DO |
296 |
ELSE IF (ik==4) THEN |
ELSE IF (ik==4) THEN |
297 |
DO j = 1, jlat |
DO j = 1, jjm |
298 |
rlatu1(j) = ylat(j) |
rlatu1(j) = ylat(j) |
299 |
yprimu1(j) = yprim(j) |
yprimu1(j) = yprim(j) |
300 |
END DO |
END DO |