/[lmdze]/trunk/dyn3d/dist_sphe.f
ViewVC logotype

Contents of /trunk/dyn3d/dist_sphe.f

Parent Directory Parent Directory | Revision Log Revision Log


Revision 254 - (show annotations)
Mon Feb 5 10:39:38 2018 UTC (6 years, 3 months ago) by guez
File size: 1461 byte(s)
Move Sources/* to root directory.
1 module dist_sphe_m
2
3 ! From grid_atob.F, v 1.1.1.1 2004/05/19 12:53:05
4
5 IMPLICIT none
6
7 contains
8
9 SUBROUTINE dist_sphe(rf_lon, rf_lat, rlon, rlat, im, jm, distance)
10
11 ! Auteur: Laurent Li (le 30 decembre 1996)
12
13 ! Ce programme calcule la distance minimale (selon le grand cercle)
14 ! entre deux points sur la terre
15
16 use nr_util, only: pi
17
18 INTEGER, intent(in):: im, jm ! dimensions
19 REAL, intent(in):: rf_lon ! longitude du point de reference (degres)
20 REAL, intent(in):: rf_lat ! latitude du point de reference (degres)
21 REAL, intent(in):: rlon(im), rlat(jm) ! longitude et latitude des points
22
23 REAL, intent(out):: distance(im, jm) ! distances en metre
24
25 REAL rlon1, rlat1
26 REAL rlon2, rlat2
27 REAL dist
28 REAL pa, pb, p
29
30 REAL radius
31 PARAMETER (radius=6371229.)
32 integer i, j
33
34 !---------------------------------------------------------------------
35
36 DO j = 1, jm
37 DO i = 1, im
38 rlon1=rf_lon
39 rlat1=rf_lat
40 rlon2=rlon(i)
41 rlat2=rlat(j)
42 pa = pi/2.0 - rlat1*pi/180.0 ! dist. entre pole n et point a
43 pb = pi/2.0 - rlat2*pi/180.0 ! dist. entre pole n et point b
44 p = (rlon1-rlon2)*pi/180.0 ! angle entre a et b (leurs meridiens)
45
46 dist = ACOS(COS(pa)*COS(pb) + SIN(pa)*SIN(pb)*COS(p))
47 dist = radius * dist
48 distance(i, j) = dist
49 end DO
50 end DO
51
52 END SUBROUTINE dist_sphe
53
54 end module dist_sphe_m

  ViewVC Help
Powered by ViewVC 1.1.21