Ignore:
Timestamp:
Mar 4, 2015, 5:00:33 PM (10 years ago)
Author:
emillour
Message:

Generic GCM:

  • Some code cleanup: turning comcstfi.h into module comcstfi_mod.F90

EM

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/LMDZ.GENERIC/libf/phystd/iniorbit.F

    r1308 r1384  
    44      USE planete_mod, only: apoastr, periastr, year_day, obliquit,
    55     &                       peri_day, e_elips, p_elips, timeperi
     6      use comcstfi_mod, only: pi
    67      IMPLICIT NONE
    78
    8 c=======================================================================
    9 c
    10 c   Auteur:
    11 c   -------
    12 c     Frederic Hourdin      22 Fevrier 1991
    13 c
    14 c   Objet:
    15 c   ------
    16 c    Initialisation du sous programme orbite qui calcule
    17 c    a une date donnee de l'annee de duree year_day commencant
    18 c    a l'equinoxe de printemps et dont le periastre se situe
    19 c    a la date peri_day, la distance au soleil et la declinaison.
    20 c
    21 c   Interface:
    22 c   ----------
    23 c   - Doit etre appele avant d'utiliser orbite.
    24 c   - initialise une partie du common planete_mod
    25 c
    26 c   Arguments:
    27 c   ----------
    28 c
    29 c   Input:
    30 c   ------
    31 c   apoastr       \   apoastron and periastron of the orbit in AU
    32 c   periastr      /   
    33 c
    34 c=======================================================================
    35 
    36 c-----------------------------------------------------------------------
    37 c   Declarations:
    38 c   -------------
    39 
    40 !#include "planete.h"
    41 #include "comcstfi.h"
     9!=======================================================================
     10! Initialisation of orbital parameters (stored in planete_h module)
     11!=======================================================================
    4212
    4313c   Arguments:
    4414c   ----------
    4515
    46       REAL papoastr,pperiastr,pyear_day,pperi_day,pobliq
     16      REAL,INTENT(IN) :: papoastr,pperiastr,pyear_day,pperi_day,pobliq
    4717
    4818c   Local:
     
    8050
    8151 
    82       PRINT*,'Periastron in AU  ',periastr
    83       PRINT*,'Apoastron in AU  ',apoastr
    84       PRINT*,'Obliquity in degrees  :',obliquit
     52      PRINT*,'iniorbit: Periastron in AU  ',periastr
     53      PRINT*,'iniorbit: Apoastron in AU  ',apoastr
     54      PRINT*,'iniorbit: Obliquity in degrees  :',obliquit
    8555
    8656
     
    8858      p_elips=0.5*(periastr+apoastr)*(1-e_elips*e_elips)
    8959
    90       print*,'e_elips',e_elips
    91       print*,'p_elips',p_elips
     60      print*,'iniorbit: e_elips',e_elips
     61      print*,'iniorbit: p_elips',p_elips
    9262
    93 c-----------------------------------------------------------------------
    94 c calcul de l'angle polaire et de la distance au soleil :
    95 c -------------------------------------------------------
     63!-----------------------------------------------------------------------
     64! compute polar angle and distance to the Sun:
     65! -------------------------------------------------------
    9666
    97 c  calcul de l'zanomalie moyenne
     67!  compute mean anomaly zanom
    9868
    9969      zz=(year_day-pperi_day)/year_day
    10070      zanom=2.*pi*(zz-nint(zz))
    10171      zxref=abs(zanom)
    102       PRINT*,'zanom  ',zanom
     72      PRINT*,'iniorbit: zanom  ',zanom
    10373
    104 c  resolution de l'equation horaire  zx0 - e * sin (zx0) = zxref
    105 c  methode de Newton
     74!  solve equation  zx0 - e * sin (zx0) = zxref for eccentric anomaly zx0
     75!  using Newton method
    10676
    10777      zx0=zxref+e_elips*sin(zxref)
    108       DO 110 iter=1,100
     78      DO iter=1,100
    10979         zdx=-(zx0-e_elips*sin(zx0)-zxref)/(1.-e_elips*cos(zx0))
    110          if(abs(zdx).le.(1.e-12)) goto 120
     80         if(abs(zdx).le.(1.e-12)) exit
    11181         zx0=zx0+zdx
    112 110   continue
    113 120   continue
     82      ENDDO
     83
    11484      zx0=zx0+zdx
    11585      if(zanom.lt.0.) zx0=-zx0
    116       PRINT*,'zx0   ',zx0
    117 
    118 c zteta est la longitude solaire
     86      PRINT*,'iniorbit: zx0   ',zx0
    11987
    12088      timeperi=2.*atan(sqrt((1.+e_elips)/(1.-e_elips))*tan(zx0/2.))
    121       PRINT*,'Solar longitude of periastron timeperi = ',timeperi
     89      PRINT*,'iniorbit: Perihelion solar long. Ls (deg)=',
     90     &       360.-timeperi*180./pi
    12291
    123       RETURN
    12492      END
Note: See TracChangeset for help on using the changeset viewer.