14 |
! que la longitude varie de - pi à pi, la latitude de pi/2 à |
! que la longitude varie de - pi à pi, la latitude de pi/2 à |
15 |
! - pi/2 et pour que la coordonnée pression soit décroissante. |
! - pi/2 et pour que la coordonnée pression soit décroissante. |
16 |
|
|
17 |
use comconst, only: pi |
use nr_util, only: assert_eq, pi |
|
use numer_rec, only: assert_eq |
|
18 |
|
|
19 |
REAL, intent(in):: xd(:), yd(:) ! longitudes et latitudes initiales |
REAL, intent(in):: xd(:), yd(:) ! longitudes et latitudes initiales, en rad |
20 |
REAL, intent(in):: zd(:) ! pressure levels, in Pa or hPa |
REAL, intent(in):: zd(:) ! pressure levels, in Pa or hPa |
21 |
|
|
22 |
REAL, intent(out):: xf(:) ! longitude, in rad, - pi to pi |
REAL, intent(out):: xf(:) ! longitude, in rad, - pi to pi |
27 |
! Variables locales : |
! Variables locales : |
28 |
|
|
29 |
INTEGER lons, lats, levs |
INTEGER lons, lats, levs |
30 |
LOGICAL radianlon, invlon , radianlat |
LOGICAL invlon |
31 |
REAL rlatmin, rlatmax, oldxd1 |
REAL rlatmin, rlatmax, oldxd1 |
32 |
INTEGER i |
INTEGER i |
33 |
|
|
38 |
levs = assert_eq(size(zd), size(zf), size(champd, 3), "conf_dat3d levs") |
levs = assert_eq(size(zd), size(zf), size(champd, 3), "conf_dat3d levs") |
39 |
|
|
40 |
IF (xd(1) >= - pi - 0.5 .AND. xd(lons) <= pi + 0.5) THEN |
IF (xd(1) >= - pi - 0.5 .AND. xd(lons) <= pi + 0.5) THEN |
|
radianlon = .TRUE. |
|
41 |
invlon = .FALSE. |
invlon = .FALSE. |
42 |
ELSE IF (xd(1) >= -0.5 .AND. xd(lons) <= 2 * pi+0.5) THEN |
ELSE IF (xd(1) >= -0.5 .AND. xd(lons) <= 2 * pi+0.5) THEN |
|
radianlon = .TRUE. |
|
|
invlon = .TRUE. |
|
|
ELSE IF (xd(1) >= -180.5 .AND. xd(lons) <= 180.5) THEN |
|
|
radianlon = .FALSE. |
|
|
invlon = .FALSE. |
|
|
ELSE IF (xd(1) >= -0.5 .AND. xd(lons) <= 360.5) THEN |
|
|
radianlon = .FALSE. |
|
43 |
invlon = .TRUE. |
invlon = .TRUE. |
44 |
ELSE |
ELSE |
45 |
print *, 'Problème sur les longitudes des données' |
print *, 'Problème sur les longitudes des données' |
49 |
rlatmin = MIN(yd(1), yd(lats)) |
rlatmin = MIN(yd(1), yd(lats)) |
50 |
rlatmax = MAX(yd(1), yd(lats)) |
rlatmax = MAX(yd(1), yd(lats)) |
51 |
|
|
52 |
IF (rlatmin >= -pi / 2 - 0.5 .AND. rlatmax <= pi / 2 + 0.5) THEN |
IF (rlatmin < -pi / 2 - 0.5 .or. rlatmax > pi / 2 + 0.5) THEN |
|
radianlat = .TRUE. |
|
|
ELSE IF (rlatmin >= - 90. - 0.5 .AND. rlatmax <= 90. + 0.5) THEN |
|
|
radianlat = .FALSE. |
|
|
ELSE |
|
53 |
print *, ' Problème sur les latitudes des données' |
print *, ' Problème sur les latitudes des données' |
54 |
stop 1 |
stop 1 |
55 |
ENDIF |
ENDIF |
56 |
|
|
57 |
IF (radianlon) THEN |
xf(:) = xd(:) |
58 |
xf(:) = xd(:) |
yf(:) = yd(:) |
|
else |
|
|
xf(:) = xd(:) * pi / 180. |
|
|
ENDIF |
|
|
|
|
|
IF (radianlat) THEN |
|
|
yf(:) = yd(:) |
|
|
else |
|
|
yf(:) = yd(:) * pi / 180. |
|
|
ENDIF |
|
59 |
|
|
60 |
IF (invlon) THEN |
IF (invlon) THEN |
61 |
! On tourne les longitudes pour avoir - pi à pi |
! On tourne les longitudes pour avoir - pi à pi |