source: TOOLS/MOZAIC/src/MOZAIC/formula.f90 @ 3326

Last change on this file since 3326 was 3326, checked in by omamce, 7 years ago

O.M. : Utility to generate interpolatio weights for OASIS-MCT

File size: 2.2 KB
Line 
1! -*- Mode: f90 -*-
2MODULE formula
3   USE declare
4   USE modeles
5CONTAINS
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!$$$  !!
61END MODULE formula
62
Note: See TracBrowser for help on using the repository browser.