1 |
guez |
22 |
MODULE orbite_m |
2 |
guez |
3 |
|
3 |
|
|
! From phylmd/orbite.F, v 1.1.1.1 2004/05/19 12:53:08 |
4 |
|
|
|
5 |
guez |
22 |
IMPLICIT NONE |
6 |
guez |
3 |
|
7 |
guez |
22 |
CONTAINS |
8 |
guez |
3 |
|
9 |
|
|
SUBROUTINE orbite(xjour, longi, dist) |
10 |
|
|
|
11 |
guez |
22 |
USE yomcst, ONLY : r_ecc, r_peri |
12 |
guez |
36 |
use nr_util, only: pi |
13 |
guez |
3 |
|
14 |
guez |
22 |
! Auteur(s): Z.X. Li (LMD/CNRS) |
15 |
|
|
! Date: 1993/08/18 |
16 |
|
|
! Pour un jour donné, calcule la longitude vraie de la Terre (par |
17 |
|
|
! rapport au point vernal, 21 mars) dans son orbite solaire. Calcule aussi |
18 |
guez |
3 |
! la distance Terre-Soleil, c'est-à-dire l'unité astronomique. |
19 |
|
|
|
20 |
guez |
22 |
REAL, INTENT (IN):: xjour ! jour de l'année à compter du premier janvier |
21 |
guez |
3 |
|
22 |
guez |
22 |
REAL, INTENT (OUT):: longi |
23 |
|
|
! longitude vraie de la Terre dans son orbite solaire, par |
24 |
|
|
! rapport au point vernal (21 mars), en degrés |
25 |
guez |
3 |
|
26 |
guez |
22 |
REAL, INTENT (OUT), OPTIONAL:: dist |
27 |
|
|
! distance terre-soleil (par rapport a la moyenne) |
28 |
guez |
3 |
|
29 |
|
|
! Variables locales |
30 |
guez |
22 |
REAL pir, xl, xllp, xee, xse, xlam, anm, ranm, ranv |
31 |
guez |
3 |
|
32 |
|
|
!---------------------------------------------------------------------- |
33 |
|
|
|
34 |
guez |
22 |
pir = pi / 180. |
35 |
|
|
xl = r_peri + 180. |
36 |
|
|
xllp = xl * pir |
37 |
|
|
xee = r_ecc * r_ecc |
38 |
|
|
xse = sqrt(1. - xee) |
39 |
|
|
xlam = (r_ecc / 2 + r_ecc * xee / 8.) * (1. + xse) * sin(xllp) & |
40 |
|
|
- xee / 4. * (0.5 + xse) * sin(2.*xllp) & |
41 |
|
|
+ r_ecc * xee / 8. * (1. / 3. + xse) * sin(3.*xllp) |
42 |
|
|
xlam = 2. * xlam / pir |
43 |
|
|
anm = xlam + (xjour - 81.) - xl |
44 |
|
|
ranm = anm * pir |
45 |
|
|
xee = xee * r_ecc |
46 |
|
|
ranv = ranm + (2. * r_ecc - xee / 4.) * sin(ranm) + & |
47 |
|
|
5. / 4. * r_ecc * r_ecc * sin(2 * ranm) & |
48 |
|
|
+ 13. / 12. * xee * sin(3.*ranm) |
49 |
guez |
3 |
|
50 |
guez |
22 |
longi = ranv / pir + xl |
51 |
guez |
3 |
|
52 |
guez |
22 |
IF (present(dist)) then |
53 |
|
|
dist = (1 - r_ecc*r_ecc) & |
54 |
|
|
/ (1 + r_ecc*cos(pir*(longi - (r_peri + 180.)))) |
55 |
|
|
end IF |
56 |
guez |
3 |
|
57 |
|
|
END SUBROUTINE orbite |
58 |
|
|
|
59 |
guez |
22 |
END MODULE orbite_m |