tgml.f 4.01 KB
      subroutine tgml (rgsm,thet,phi,tgl,ier)
c*
c***********************************************************************
c*
c*          "Copyright [c] CNES 98 - tous droits reserves"
c*          **********************************************
c*
c*PRO MAGLIB
c*
c*VER 99.03.31 - V 1.0
c*VER 01.06.05 - V 2.0
c*VER 03.01.06 - V 2.1
c*
c*AUT spec. CNES - JC KOSIK - janvier 1991
c*AUT port. CISI
c*
c*ROL Theme : Calculs de geophysique
c*ROL         Calcul du temps geomagnetique local en heures fractionnaires
c*ROL         a partir des coordonnees spheriques geocentriques.
c*
c*PAR rgsm (I) : matrice de passage du repere geocentrique au repere
c*PAR          : solaire magnetique
c*
c*PAR thet (I) : colatitude geocentrique (radians)
c*PAR phi  (I) : longitude geocentrique  (radians)
c*
c*PAR tgl  (O) : temps geomagnetique local (heures fractionnaires)
c*
c*PAR ier  (O) : code de retour
c*
c*NOT ier      : sans objet
c*
c*NOT common   : util
c*
c*INF utilise  : geosm, angleg
c*
c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP
c*HST version 2.0 - 01.06.05 - correction de commentaires de code
c*HST version 2.1 - 03.01.06 - corrections en compilation avec g77
c*
c***********************************************************************
c*
      implicit none
c
c     ---------------------------------
c*FON Declaration identificateur rcs_id
c     ---------------------------------
c
      character rcs_id*100
c
c     --------------------------
c*FON Declaration des parametres
c     --------------------------
c
      double precision rgsm(3,3)
      double precision thet, phi, tgl
      integer ier
c
c     ----------------------------------
c*FON Declaration des variables communes
c     ----------------------------------
c
      double precision pi,dpi,rad,deg,pid,xmu,rayt
c
c*COM pi   : constante pi (obtenue a partir de acos(-1.))
c*COM dpi  : constante 2 * pi
c*COM pid  : constante pi / 2
c*COM rad  : facteur de conversion degres  ----> radians
c*COM deg  : facteur de conversion radians ----> degres
c*COM xmu  : constante de gravitation terrestre (km**3/sec**2)
c*COM rayt : rayon equatorial terrestre (km)
c
      common/util/pi,dpi,rad,deg,pid,xmu,rayt
c
c     ----------------------------------
c*FON Declaration des fonctions externes
c     ----------------------------------
c
      external angleg
      double precision angleg
c
c     ---------------------------------
c*FON Declaration des variables locales
c     ---------------------------------
c
      integer ier1,ier2
c*LOC ier1,ier2 : codes retour des modules appeles
c
      double precision xg,yg,zg
c*LOC xg,yg,zg : composantes cartesiennes en x,y et z
c
      double precision xsm,ysm,zsm,phs
c
      SAVE
c
c     ---------------------------------
c*FON Affectation identificateur rcs_id
c     ---------------------------------
c
      data rcs_id /"
     >$Id$"/
c
c     ******************
c     Debut de programme
c     ******************
c
      ier  = 0
      ier1 = 0
      ier2 = 0
c
c     --------------------------------------------------------
c*FON Calcul des cosinus directeurs de la direction (thet,phi)
c     --------------------------------------------------------
c
      xg = sin(thet) * cos(phi)
      yg = sin(thet) * sin(phi)
      zg = cos(thet)
c
c     -------------------------------------------
c*FON Calcul des coordonnees solaires magnetiques
c     -------------------------------------------
c
      call geosm(rgsm,xg,yg,zg,xsm,ysm,zsm,ier1)
c
c     -------------------------------------------------
c*FON Calcul de l'angle entre les directions xsm et ysm
c*FON si xsm = ysm = 0. phs est force a 0.
c     -------------------------------------------------
c
      if (xsm .ne. 0.0d0 .or. ysm .ne. 0.0d0) then
         phs = angleg(xsm,ysm,ier2)
      else
         phs = 0.0d0
      endif
c
c     -----------------------------------
c*FON Calcul du temps geomagnetique local
c     -----------------------------------
c
      tgl = phs * 24.d0 / dpi + 12.d0
      tgl = mod(tgl,24.d0)
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end