1 | ! -*- Mode: f90 -*- |
---|
2 | MODULE formula |
---|
3 | USE declare |
---|
4 | USE modeles |
---|
5 | CONTAINS |
---|
6 | ELEMENTAL FUNCTION dedans (pa, x1, x2) !> TRUE if one point is between to others |
---|
7 | IMPLICIT NONE |
---|
8 | LOGICAL :: dedans |
---|
9 | REAL (kind=rl), INTENT (in) :: pa, x1, x2 |
---|
10 | dedans = (pa > MIN (x1, x2)) .AND. (pa <= MAX (x1, x2)) |
---|
11 | RETURN |
---|
12 | END FUNCTION dedans |
---|
13 | ! ---------------------------------------------------------------------------- |
---|
14 | ELEMENTAL FUNCTION dehors (pa1, pa2, x1, x2) !> TRUE if one segment is disconnected from the other |
---|
15 | IMPLICIT NONE |
---|
16 | LOGICAL :: dehors |
---|
17 | REAL (kind=rl), INTENT (in) :: pa1, pa2, x1, x2 |
---|
18 | dehors = (MAX (pa1, pa2) < MIN (x1, x2)) .OR. (MIN (pa1, pa2) > MAX (x1, x2)) |
---|
19 | RETURN |
---|
20 | END FUNCTION dehors |
---|
21 | ! ---------------------------------------------------------------------------- |
---|
22 | ELEMENTAL FUNCTION clo_lon (zlon, zlon0) !> Find closest longitude |
---|
23 | IMPLICIT NONE |
---|
24 | REAL (kind=rl) :: clo_lon |
---|
25 | REAL (kind=rl), INTENT (in) :: zlon, zlon0 |
---|
26 | REAL (kind=rl) :: zz, zp, zm, z0 |
---|
27 | INTEGER (kind=il) :: jn |
---|
28 | z0 = zlon |
---|
29 | DO jn = 1_il, 2_il |
---|
30 | zz = ABS ((z0 ) - zlon0) |
---|
31 | zp = ABS ((z0 + 360.0_rl) - zlon0) |
---|
32 | zm = ABS ((z0 - 360.0_rl) - zlon0) |
---|
33 | IF ( zp < MIN (zm, zz)) THEN |
---|
34 | z0 = z0 + 360.0_rl |
---|
35 | ELSE IF (zm < MIN (zp, zz)) THEN |
---|
36 | z0 = z0 - 360.0_rl |
---|
37 | END IF |
---|
38 | END DO |
---|
39 | clo_lon = z0 |
---|
40 | END FUNCTION clo_lon |
---|
41 | ! ---------------------------------------------------------------------------- |
---|
42 | ELEMENTAL FUNCTION lon_180 (zlon) !> Set lon in [0-360] |
---|
43 | REAL (kind=rl) :: lon_180 |
---|
44 | REAL (kind=rl), INTENT (in) :: zlon |
---|
45 | REAL (kind=rl) :: z0 |
---|
46 | z0 = zlon |
---|
47 | IF ( z0 < 0.0_rl) z0 = z0 + 360.0_rl |
---|
48 | IF ( z0 > 360.0_rl) z0 = z0 - 360.0_rl |
---|
49 | lon_180 = z0 |
---|
50 | END FUNCTION lon_180 |
---|
51 | |
---|
52 | ! ---------------------------------------------------------------------------- |
---|
53 | !$$$ FUNCTION tri_surf (plon, plat) !> Surface of triangle on the sphere |
---|
54 | !$$$ USE declare |
---|
55 | !$$$ IMPLICIT NONE |
---|
56 | !$$$ REAL (kind=rl) :: tri_surf |
---|
57 | !$$$ REAL (kind=rl), DIMENSION (3), INTENT (in) :: plon, plat |
---|
58 | !$$$ tri_surf = 0.0_rl |
---|
59 | !$$$ END FUNCTION tri_surf |
---|
60 | !$$$ !! |
---|
61 | END MODULE formula |
---|
62 | |
---|