1 |
SUBROUTINE fxyhyper (yzoom, grossy, dzoomy, tauy, xzoom, grossx, dzoomx, taux, & |
2 |
rlatu, yprimu, rlatv, yprimv, rlatu1, yprimu1, rlatu2, yprimu2, & |
3 |
rlonu, xprimu, rlonv, xprimv, rlonm025, xprimm025, rlonp025, xprimp025) |
4 |
|
5 |
! From dyn3d/fxyhyper.F, v 1.1.1.1 2004/05/19 12:53:06 |
6 |
|
7 |
use dimens_m |
8 |
use paramet_m |
9 |
|
10 |
IMPLICIT NONE |
11 |
|
12 |
! Auteur : P. Le Van. |
13 |
! d'apres formulations de R. Sadourny. |
14 |
|
15 |
! Cette procédure calcule les latitudes (routine fyhyp) et |
16 |
! longitudes (fxhyp) par des fonctions a tangente hyperbolique. |
17 |
|
18 |
! Il y a 3 parametres, en plus des coordonnees du centre du zoom (xzoom |
19 |
! et yzoom) : |
20 |
|
21 |
! a) le grossissement du zoom : grossy (en y) et grossx (en x) |
22 |
! b) l' extension du zoom : dzoomy (en y) et dzoomx (en x) |
23 |
! c) la raideur de la transition du zoom : taux et tauy |
24 |
|
25 |
! N.B : Il vaut mieux avoir : grossx * dzoomx < pi (radians) |
26 |
! et grossy * dzoomy < pi/2 (radians) |
27 |
|
28 |
! Arguments |
29 |
|
30 |
REAL xzoom, yzoom, grossx, grossy, dzoomx, dzoomy, taux, tauy |
31 |
REAL rlatu(jjp1), yprimu(jjp1), rlatv(jjm), yprimv(jjm) |
32 |
real rlatu1(jjm), yprimu1(jjm), rlatu2(jjm), yprimu2(jjm) |
33 |
REAL rlonu(iip1), xprimu(iip1), rlonv(iip1), xprimv(iip1) |
34 |
REAL rlonm025(iip1), xprimm025(iip1), rlonp025(iip1), xprimp025(iip1) |
35 |
double precision dxmin, dxmax, dymin, dymax |
36 |
|
37 |
! variables locales |
38 |
|
39 |
INTEGER i, j |
40 |
|
41 |
!---------------------------------------------------------- |
42 |
|
43 |
CALL fyhyp(yzoom, grossy, dzoomy, tauy, & |
44 |
rlatu, yprimu, rlatv, yprimv, rlatu2, yprimu2, rlatu1, yprimu1, & |
45 |
dymin, dymax) |
46 |
|
47 |
CALL fxhyp(xzoom, grossx, dzoomx, taux, rlonm025, xprimm025, rlonv, & |
48 |
xprimv, rlonu, xprimu, rlonp025, xprimp025, dxmin, dxmax) |
49 |
|
50 |
DO i = 1, iip1 |
51 |
IF(rlonp025(i).LT.rlonv(i)) THEN |
52 |
print *, ' Attention ! rlonp025 < rlonv', i |
53 |
STOP 1 |
54 |
ENDIF |
55 |
|
56 |
IF(rlonv(i).LT.rlonm025(i)) THEN |
57 |
print *, ' Attention ! rlonm025 > rlonv', i |
58 |
STOP 1 |
59 |
ENDIF |
60 |
|
61 |
IF(rlonp025(i).GT.rlonu(i)) THEN |
62 |
print *, ' Attention ! rlonp025 > rlonu', i |
63 |
STOP 1 |
64 |
ENDIF |
65 |
ENDDO |
66 |
|
67 |
print *, ' TEST DE COHERENCE OK POUR FX ' |
68 |
|
69 |
DO j = 1, jjm |
70 |
IF(rlatu1(j).LE.rlatu2(j)) THEN |
71 |
print *, 'Attention ! rlatu1 < rlatu2 ', rlatu1(j), rlatu2(j), j |
72 |
STOP 13 |
73 |
ENDIF |
74 |
|
75 |
IF(rlatu2(j).LE.rlatu(j+1)) THEN |
76 |
print *, 'Attention ! rlatu2 < rlatup1 ', rlatu2(j), rlatu(j+1), j |
77 |
STOP 14 |
78 |
ENDIF |
79 |
|
80 |
IF(rlatu(j).LE.rlatu1(j)) THEN |
81 |
print *, ' Attention ! rlatu < rlatu1 ', rlatu(j), rlatu1(j), j |
82 |
STOP 15 |
83 |
ENDIF |
84 |
|
85 |
IF(rlatv(j).LE.rlatu2(j)) THEN |
86 |
print *, ' Attention ! rlatv < rlatu2 ', rlatv(j), rlatu2(j), j |
87 |
STOP 16 |
88 |
ENDIF |
89 |
|
90 |
IF(rlatv(j).ge.rlatu1(j)) THEN |
91 |
print *, ' Attention ! rlatv > rlatu1 ', rlatv(j), rlatu1(j), j |
92 |
STOP 17 |
93 |
ENDIF |
94 |
|
95 |
IF(rlatv(j).ge.rlatu(j)) THEN |
96 |
print *, ' Attention ! rlatv > rlatu ', rlatv(j), rlatu(j), j |
97 |
STOP 18 |
98 |
ENDIF |
99 |
ENDDO |
100 |
|
101 |
print *, ' TEST DE COHERENCE OK POUR FY ' |
102 |
|
103 |
print *, ' Latitudes ' |
104 |
print 3, dymin, dymax |
105 |
print *, ' Si cette derniere est trop lache, modifiez les parametres grossism, tau, dzoom pour Y et repasser ! ' |
106 |
|
107 |
print *, ' Longitudes ' |
108 |
print 3, dxmin, dxmax |
109 |
print *, ' Si cette derniere est trop lache, modifiez les parametres grossism, tau, dzoom pour Y et repasser ! ' |
110 |
|
111 |
3 Format(1x, ' Au centre du zoom, la longueur de la maille est', & |
112 |
' d environ ', f0.2, ' degres ', /, & |
113 |
' alors que la maille en dehors de la zone du zoom est ', & |
114 |
"d'environ", f0.2, ' degres ') |
115 |
|
116 |
END SUBROUTINE fxyhyper |