source: trunk/LMDZ.PLUTO.old/libf/phypluto/solarlong.F @ 3436

Last change on this file since 3436 was 3175, checked in by emillour, 11 months ago

Pluto PCM:
Add the old Pluto LMDZ for reference (required prior step to making
an LMDZ.PLUTO using the same framework as the other physics packages).
TB+EM

File size: 2.8 KB
Line 
1      SUBROUTINE solarlong(pday,psollong)
2      use planet_h         
3      IMPLICIT NONE
4
5c=======================================================================
6c
7c   Objet:
8c   ------
9c
10c      Calcul de la distance soleil-planete et de la declinaison
11c   en fonction du jour de l'annee.
12c
13c
14c   Methode:
15c   --------
16c
17c      Calcul complet de l'elipse
18c
19c   Interface:
20c   ----------
21c
22c      Uncommon comprenant les parametres orbitaux.
23c
24c   Arguments:
25c   ----------
26c
27c   Input:
28c   ------
29c   pday          jour de l'annee (le jour 0 correspondant a l'equinoxe)
30c
31c   Output:
32c   -------
33c   pdist_sol     distance entre le soleil et la planete
34c                 ( en unite astronomique pour utiliser la constante
35c                  solaire terrestre 1370 Wm-2 )
36c   pdecli        declinaison ( en radians )
37c
38c=======================================================================
39c-----------------------------------------------------------------------
40c   Declarations:
41c   -------------
42
43!#include "planete.h"
44#include "comcstfi.h"
45
46c arguments:
47c ----------
48
49      REAL pday,pdist_sol,pdecli,psollong
50      LOGICAL lwrite
51
52c Local:
53c ------
54
55      REAL zanom,xref,zx0,zdx,zteta,zz
56      INTEGER iter
57
58
59c-----------------------------------------------------------------------
60c calcul de l'angle polaire et de la distance au soleil :
61c -------------------------------------------------------
62
63c  TB16 : output some information . Sanity check
64c      write(*,*) 'solarlong : pday =',pday
65c      write(*,*) 'solarlong : periheli =',periheli
66c      write(*,*) 'solarlong : peri_day =',peri_day
67c      write(*,*) 'solarlong : e_elips =',e_elips
68c      write(*,*) 'solarlong : year_day = ',year_day
69c      write(*,*) 'solarlong : timeperi = ',timeperi
70
71c  calcul de l'zanomalie moyenne
72
73      zz=(pday-peri_day)/year_day
74      pi=2.*asin(1.)
75      zanom=2.*pi*(zz-nint(zz))
76      xref=abs(zanom)
77
78c  resolution de l'equation horaire  zx0 - e * sin (zx0) = xref
79c  methode de Newton
80
81      zx0=xref+e_elips*sin(xref)
82      DO 110 iter=1,10
83         zdx=-(zx0-e_elips*sin(zx0)-xref)/(1.-e_elips*cos(zx0))
84         if(abs(zdx).le.(1.e-7)) goto 120
85         zx0=zx0+zdx
86110   continue
87120   continue
88      zx0=zx0+zdx
89      if(zanom.lt.0.) zx0=-zx0
90
91c zteta est la longitude solaire
92
93      zteta=2.*atan(sqrt((1.+e_elips)/(1.-e_elips))*tan(zx0/2.))
94
95      psollong=zteta-timeperi
96
97      IF(psollong.LT.0.) psollong=psollong+2.*pi
98      IF(psollong.GT.2.*pi) psollong=psollong-2.*pi
99c-----------------------------------------------------------------------
100c   sorties eventuelles:
101c   ---------------------
102
103c     IF (lwrite) THEN
104c        PRINT*,'jour de l"annee   :',pday
105c        PRINT*,'distance au soleil (en unite astronomique) :',pdist_sol
106c        PRINT*,'declinaison (en degres) :',pdecli*180./pi
107c     ENDIF
108
109      RETURN
110      END
Note: See TracBrowser for help on using the repository browser.