source: dynamico_lmdz/simple_physics/phyparam/param/iniorbit.F @ 4181

Last change on this file since 4181 was 4176, checked in by dubos, 6 years ago

simple_physics : copy code from FH

File size: 2.6 KB
Line 
1      SUBROUTINE iniorbit
2     $     (paphelie,pperiheli,pyear_day,pperi_day,pobliq)
3      IMPLICIT NONE
4
5c=======================================================================
6c
7c   Auteur:
8c   -------
9c     Frederic Hourdin      22 Fevrier 1991
10c
11c   Objet:
12c   ------
13c    Initialisation du sous programme orbite qui calcule
14c    a une date donnee de l'annee de duree year_day commencant
15c    a l'equinoxe de printemps et dont le perihelie se situe
16c    a la date peri_day, la distance au soleil et la declinaison.
17c
18c   Interface:
19c   ----------
20c   - Doit etre appele avant d'utiliser orbite.
21c   - initialise le common comorbit
22c
23c   Arguments:
24c   ----------
25c
26c   Input:
27c   ------
28c   aphelie       \   aphelie et perihelie de l'orbite
29c   periheli      /   en millions de kilometres.
30c
31c=======================================================================
32
33c-----------------------------------------------------------------------
34c   Declarations:
35c   -------------
36
37#include "comorbit.h"
38
39c   Arguments:
40c   ----------
41
42      REAL paphelie,pperiheli,pyear_day,pperi_day,pobliq
43
44c   Local:
45c   ------
46
47      REAL zxref,zanom,zz,zx0,zdx
48      INTEGER iter
49
50c-----------------------------------------------------------------------
51
52      aphelie =paphelie
53      periheli=pperiheli
54      year_day=pyear_day
55      obliquit=pobliq
56      peri_day=pperi_day
57
58      pi=2.*asin(1.)
59      PRINT*,'Perihelie en Mkm  ',periheli
60      PRINT*,'Aphelise  en Mkm  ',aphelie
61      PRINT*,'obliquite en degres  :',obliquit
62      unitastr=149.597927
63      e_elips=(aphelie-periheli)/(periheli+aphelie)
64      p_elips=0.5*(periheli+aphelie)*(1-e_elips*e_elips)/unitastr
65
66      print*,'e_elips',e_elips
67      print*,'p_elips',p_elips
68
69c-----------------------------------------------------------------------
70c calcul de l'angle polaire et de la distance au soleil :
71c -------------------------------------------------------
72
73c  calcul de l'zanomalie moyenne
74
75      zz=(year_day-pperi_day)/year_day
76      zanom=2.*pi*(zz-nint(zz))
77      zxref=abs(zanom)
78      PRINT*,'zanom  ',zanom
79
80c  resolution de l'equation horaire  zx0 - e * sin (zx0) = zxref
81c  methode de Newton
82
83      zx0=zxref+e_elips*sin(zxref)
84      DO 110 iter=1,100
85         zdx=-(zx0-e_elips*sin(zx0)-zxref)/(1.-e_elips*cos(zx0))
86         if(abs(zdx).le.(1.e-12)) goto 120
87         zx0=zx0+zdx
88110   continue
89120   continue
90      zx0=zx0+zdx
91      if(zanom.lt.0.) zx0=-zx0
92      PRINT*,'zx0   ',zx0
93
94c zteta est la longitude solaire
95
96      timeperi=2.*atan(sqrt((1.+e_elips)/(1.-e_elips))*tan(zx0/2.))
97      PRINT*,'longitude solaire du perihelie timeperi = ',timeperi
98
99      RETURN
100      END
Note: See TracBrowser for help on using the repository browser.