iniorbit.f90 Source File


This file depends on

sourcefile~~iniorbit.f90~~EfferentGraph sourcefile~iniorbit.f90 iniorbit.f90 sourcefile~planete_mod_h.f90 planete_mod_h.f90 sourcefile~iniorbit.f90->sourcefile~planete_mod_h.f90 sourcefile~yomcst_mod_h.f90 yomcst_mod_h.f90 sourcefile~iniorbit.f90->sourcefile~yomcst_mod_h.f90

Contents

Source Code


Source Code

SUBROUTINE iniorbit(paphelie, pperiheli, pyear_day, pperi_day, pobliq)
  USE yomcst_mod_h
  USE planete_mod_h
IMPLICIT NONE

  ! =======================================================================

  ! Auteur:
  ! -------
  ! Frederic Hourdin      22 Fevrier 1991

  ! Objet:
  ! ------
  ! Initialisation du sous programme orbite qui calcule
  ! a une date donnee de l'annee de duree year_day commencant
  ! a l'equinoxe de printemps et dont le perihelie se situe
  ! a la date peri_day, la distance au soleil et la declinaison.

  ! Interface:
  ! ----------
  ! - Doit etre appele avant d'utiliser orbite.
  ! - initialise une partie du common planete.h

  ! Arguments:
  ! ----------

  ! Input:
  ! ------
  ! aphelie       \   aphelie et perihelie de l'orbite
  ! periheli      /   en millions de kilometres.

  ! =======================================================================

  ! -----------------------------------------------------------------------
  ! Declarations:
  ! -------------


  ! Arguments:
  ! ----------

  REAL paphelie, pperiheli, pyear_day, pperi_day, pobliq

  ! Local:
  ! ------

  REAL zxref, zanom, zz, zx0, zdx, pi
  INTEGER iter

  ! -----------------------------------------------------------------------

  pi = 2.*asin(1.)

  aphelie = paphelie
  periheli = pperiheli
  year_day = pyear_day
  obliquit = pobliq
  peri_day = pperi_day

  PRINT *, 'Perihelie en Mkm  ', periheli
  PRINT *, 'Aphelie  en Mkm   ', aphelie
  PRINT *, 'obliquite en degres  :', obliquit
  PRINT *, 'Jours dans l annee : ', year_day
  PRINT *, 'Date perihelie : ', peri_day
  unitastr = 149.597870
  e_elips = (aphelie-periheli)/(periheli+aphelie)
  p_elips = 0.5*(periheli+aphelie)*(1-e_elips*e_elips)/unitastr

  PRINT *, 'e_elips', e_elips
  PRINT *, 'p_elips', p_elips

  ! -----------------------------------------------------------------------
  ! calcul de l'angle polaire et de la distance au soleil :
  ! -------------------------------------------------------

  ! calcul de l'zanomalie moyenne

  zz = (year_day-pperi_day)/year_day
  zanom = 2.*pi*(zz-nint(zz))
  zxref = abs(zanom)
  PRINT *, 'zanom  ', zanom

  ! resolution de l'equation horaire  zx0 - e * sin (zx0) = zxref
  ! methode de Newton

  zx0 = zxref + r_ecc*sin(zxref)
  DO iter = 1, 100
    zdx = -(zx0-r_ecc*sin(zx0)-zxref)/(1.-r_ecc*cos(zx0))
    IF (abs(zdx)<=(1.E-12)) GO TO 120
    zx0 = zx0 + zdx
  END DO
120 CONTINUE
  zx0 = zx0 + zdx
  IF (zanom<0.) zx0 = -zx0
  PRINT *, 'zx0   ', zx0

  ! zteta est la longitude solaire

  timeperi = 2.*atan(sqrt((1.+r_ecc)/(1.-r_ecc))*tan(zx0/2.))
  PRINT *, 'longitude solaire du perihelie timeperi = ', timeperi

  RETURN
END SUBROUTINE iniorbit