Ignore:
Timestamp:
Dec 20, 2019, 12:41:10 AM (6 years ago)
Author:
dubos
Message:

simple_physics : cleanup astronomy

File:
1 edited

Legend:

Unmodified
Added
Removed
  • dynamico_lmdz/simple_physics/phyparam/physics/astronomy.F90

    r4190 r4191  
    8585  END SUBROUTINE solarlong
    8686 
     87  SUBROUTINE iniorbit
     88    !=======================================================================
     89    !
     90    !   Auteur:
     91    !   -------
     92    !     Frederic Hourdin      22 Fevrier 1991
     93    !
     94    !   Objet:
     95    !   ------
     96    !    Initialisation du sous programme orbite qui calcule
     97    !    a une date donnee de l'annee de duree year_day commencant
     98    !    a l'equinoxe de printemps et dont le perihelie se situe
     99    !    a la date peri_day, la distance au soleil et la declinaison.
     100    !
     101    !   Interface:
     102    !   ----------
     103    !   - initialise certaines variables de ce module
     104    !   - Doit etre appele avant d'utiliser orbite.
     105    !
     106    !   Arguments:
     107    !   ----------
     108    !
     109    !   Input:
     110    !   ------
     111    !   aphelie       \   aphelie et perihelie de l'orbite
     112    !   periheli      /   en millions de kilometres.
     113    !
     114    !=======================================================================
     115   
     116    !-----------------------------------------------------------------------
     117   
     118    !   Local:
     119    !   ------
     120    REAL zxref,zanom,zz,zx0,zdx
     121    INTEGER iter
     122   
     123    !-----------------------------------------------------------------------
     124   
     125    PRINT*,'Perihelie en Mkm  ',periheli
     126    PRINT*,'Aphelise  en Mkm  ',aphelie
     127    PRINT*,'obliquite en degres  :',obliquit
     128   
     129    e_elips=(aphelie-periheli)/(periheli+aphelie)
     130    p_elips=0.5*(periheli+aphelie)*(1-e_elips*e_elips)/unitastr
     131   
     132    print*,'e_elips',e_elips
     133    print*,'p_elips',p_elips
     134   
     135    !-----------------------------------------------------------------------
     136    ! calcul de l'angle polaire et de la distance au soleil :
     137    ! -------------------------------------------------------
     138   
     139    !  calcul de l'zanomalie moyenne
     140   
     141    zz=(year_day-peri_day)/year_day
     142    zanom=2.*pi*(zz-nint(zz))
     143    zxref=abs(zanom)
     144    PRINT*,'zanom  ',zanom
     145   
     146    !  resolution de l'equation horaire  zx0 - e * sin (zx0) = zxref
     147    !  methode de Newton
     148   
     149    zx0=zxref+e_elips*sin(zxref)
     150    DO  iter=1,100
     151       zdx=-(zx0-e_elips*sin(zx0)-zxref)/(1.-e_elips*cos(zx0))
     152!       if(abs(zdx).le.(1.e-12)) goto 120
     153       zx0=zx0+zdx
     154    END DO
     155   
     156    zx0=zx0+zdx
     157    if(zanom.lt.0.) zx0=-zx0
     158    PRINT*,'zx0   ',zx0
     159   
     160    ! zteta est la longitude solaire
     161   
     162    timeperi=2.*atan(sqrt((1.+e_elips)/(1.-e_elips))*tan(zx0/2.))
     163    PRINT*,'longitude solaire du perihelie timeperi = ',timeperi
     164   
     165   
     166  END SUBROUTINE iniorbit
     167
    87168END MODULE astronomy
     169
Note: See TracChangeset for help on using the changeset viewer.