outma1.f 6.96 KB
      subroutine outma1 (magout,indgm,indval,tilt,rggsm,rgsmg,
     >                   rre,thet,phi,bre,bte,bpe,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.05.30 - V 2.0
c*VER 03.01.06 - V 2.1
c*
c*AUT spec. CNES - JC KOSIK - juin 1995
c*AUT port. CISI
c*
c*ROL Theme : Calculs de geophysique
c*ROL         Calcul du champ magnetique d'origine externe.
c*
c*PAR magout (I) : type de champ magnetique externe
c*
c*PAR indgm  (I) : type d'indice geomagnetique Kp ou Ae
c*PAR indval (I) : indice geomagnetique : niveau d'amplitude du champ
c*
c*PAR tilt   (I) : angle de tilt (radians)
c*
c*PAR rggsm  (I) : matrice (3,3) de passage du repere geocentrique
c*PAR            : au repere magnetospherique
c*PAR rgsmg  (I) : matrice (3,3) de passage du repere solaire
c*PAR            : magnetospherique au repere geocentrique
c*
c*PAR rre    (I) : distance radiale geocentrique (rayons terrestres)
c*PAR thet   (I) : colatitude geocentrique (radians)
c*PAR phi    (I) : longitude geocentrique (radians)
c*
c*PAR br     (O) : composante radiale du champ magnetique le long du
c*               : meridien positive vers l'exterieur (gauss)
c*PAR bt     (O) : composante tangentielle du champ magnetique le long
c*PAR            : du meridien positive vers le sud (gauss)
c*PAR bp     (O) : composante azimuthale du champ magnetique, positive
c*PAR            : vers l'est (gauss)
c*
c*PAR ier    (O) : code de retour
c*
c*NOT magout     : 0 = pas de champ externe
c*NOT magout     : 1 = Tsyganenko 87
c*NOT magout     : 2 = Tsyganenko 89
c*NOT magout     : 3 = Kosik 97
c*
c*NOT indgm      : 1 ---> indice geomagnetique Kp
c*NOT indval     : 1 ---> Kp =  0  , 0+
c*NOT indval     : 2 ---> Kp =  1- , 1 , 1+
c*NOT indval     : 3 ---> Kp =  2- , 2 , 2+
c*NOT indval     : 4 ---> Kp =  3- , 3 , 3+
c*NOT indval     : 5 ---> Kp =  4- , 4 , 4+
c*NOT indval     : 6 ---> Kp >  5-
c*
c*NOT indgm      : 2 ---> indice geomagnetique Ae
c*NOT indval     : 1 ---> Ae =    0 - 50
c*NOT indval     : 2 ---> Ae =   50 - 100
c*NOT indval     : 3 ---> Ae =  100 - 150
c*NOT indval     : 4 ---> Ae =  150 - 250
c*NOT indval     : 5 ---> Ae =  250 - 400
c*NOT indval     : 6 ---> Ae >= 400
c*
c*NOT ier        :  sans objet
c*
c*INF utilise    : spcar, geogsm, tsyg87, ex89kp, ex89ae, kk97kp
c*INF utilise    : gsmgeo, vcarvsp
c*
c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP
c*HST version 2.0 - 01.05.30 - Ajout indice Kosik 97
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
      integer magout, indgm, indval
      double precision tilt
      double precision rggsm(3,3), rgsmg(3,3)
      double precision rre, thet, phi
      double precision bre, bte, bpe
      integer ier
c
c     ---------------------------------
c*FON Declaration des variables locales
c     ---------------------------------
c
      integer ier1,ier2,ier3,ier4,ier5,ier6,ier7,ier8
c*LOC ier1,ier2,ier3,ier4,ier5,ier6,ier7 : 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 xgsm,ygsm,zgsm
c*LOC xgsm,ygsm,zgsm : composantes solaires magnetospheriques en x,y et z
c
      double precision bgx,bgy,bgz
c*LOC bgx,bgy,bgz : composantes cartesiennes
c
      double precision bp
c*LOC bp : module du champ magnetique
c
      double precision bxgsm,bygsm,bzgsm
c*LOC bxgsm,bygsm,bzgsm : composantes suivant xgsm, ygsm et zgsm
c*                        du champ magnetique
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
      ier3 = 0
      ier4 = 0
      ier5 = 0
      ier6 = 0
      ier7 = 0
      ier8 = 0
c
      bre = 0.d0
      bte = 0.d0
      bpe = 0.d0
c
c     --------------------------------------------
c*FON Transformation des coordonnees spheriques en
c*FON coordonnees cartesiennes
c     --------------------------------------------
c
      call spcar(rre,thet,phi,xg,yg,zg,ier1)
c
c     -----------------------------------------------
c*FON Transformation des composantes geocentriques en
c*FON composantes solaires magnetospheriques
c     -----------------------------------------------
c
      call geogsm(rggsm,xg,yg,zg,xgsm,ygsm,zgsm,ier2)
c
c     --------------------------------------
c*FON Traitement du champ de type Tsyganenko
c     --------------------------------------
c
      if (magout .eq. 1) then
         call tsyg87(indval,tilt,xgsm,ygsm,zgsm,bxgsm,
     >                 bygsm,bzgsm,ier3)
c
c     ------------------------------------------------
c*FON Traitement des indices geomagnetiques de type Kp
c     ------------------------------------------------
c
      elseif (magout .eq. 2 .and. indgm .eq. 1) then
        call ex89kp(indval,tilt,xgsm,ygsm,zgsm,
     >              bxgsm,bygsm,bzgsm,ier4)
c
c     ------------------------------------------------
c*FON Traitement des indices geomagnetiques de type Ae
c     ------------------------------------------------
c
      elseif (magout .eq. 2 .and. indgm .eq. 2) then
         call ex89ae(indval,tilt,xgsm,ygsm,zgsm,
     >               bxgsm,bygsm,bzgsm,ier5)
c
c     ------------------------------------------------------
c*FON Traitement des indices geomagnetiques de type Kosik 97
c     ------------------------------------------------------
c
      elseif (magout .eq. 3) then
         call kk97kp (indval,tilt,xgsm,ygsm,zgsm,
     >                bxgsm,bygsm,bzgsm,bp,ier6)
      endif
c
c     -----------------------------------------------------
c*FON On transforme les composantes les nanoteslas en gauss
c     -----------------------------------------------------
c
      bxgsm = bxgsm / 100000.d0
      bygsm = bygsm / 100000.d0
      bzgsm = bzgsm / 100000.d0
c
      if (magout .ne. 0) then
c
c     --------------------------------------------------------
c*FON Transformation des composantes solaire magnetospheriques
c*FON en composantes geocentriques
c     --------------------------------------------------------
c
         call gsmgeo(rgsmg,bxgsm,bygsm,bzgsm,bgx,bgy,bgz,ier7)
c
c     ------------------------------------------------
c*FON Transformation d'un vecteur cartesien en vecteur
c*FON spherique
c     ------------------------------------------------
c
         call vcarvsp(thet,phi,bgx,bgy,bgz,bre,bte,bpe,ier8)
      endif
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end