bgsm.f 6.88 KB
      subroutine bgsm (magin,magout,indgm,indval,year,tilt,
     >                 rggsm,rgsmg,rgse,rre,thet,phi,bb,
     >                 bxgsm,bygsm,bzgsm,bxse,byse,bzse,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*VER 01.01.07 - V 3.0
c*VER 11.10.10 - V 4.0
c*VER 17.02.23 - V 5.0
c*VER 20.07.15 - V 6.0
c*
c*AUT spec. CNES - JC KOSIK - janvier 1991
c*AUT port. CISI
c*AUT adapt. AKKA
c*
c*ROL Theme : Calculs de geophysique
c*ROL         Calcul du module du champ magnetique total compose du 
C*ROL         dipole, du DGRF 00 ou du DGRF 05 ou du DGRF 10 ou du 
C*ROL         DGRF15, ou de l'IGRF20 et du champ externe de Tsyganenko
C*ROL         ou du champ externe Kosik 97 ou sanschamp externe.
c*ROL         Calcul des composantes dans les reperes solaire
c*ROL         magnetospherique et solaire ecliptique.
c*
c*PAR magin  (I) : type de champ magnetique interne
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 year   (I) : annee fractionnaire (>= 2000. si magin = 2)
C*PAR year         annee fractionnaire (>= 2005. si magin = 3) 
C*PAR year         annee fractionnaire (>= 2010. si magin = 4) 
C*PAR year         annee fractionnaire (>= 2015. si magin = 5) 
C*PAR year         annee fractionnaire (>= 2020. si magin = 1, ou 6) 
c*
c*PAR tilt   (I) : angle de tilt (radians)
c*
c*PAR rggsm  (I) : matrice de passage des coordonnees geographiques
c*PAR            : aux coordonnees solaires magnetospheriques
c*PAR rgsmg  (I) : matrice de passage des coordonnees solaires
c*PAR            : magnetospheriques aux coordonnees geographiques
c*PAR rgse   (I) : matrice de passage des coordonnees geocentriques
c*PAR            : aux coordonnees solaires ecliptiques
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 bb     (O) : module du champ magnetique (gauss)
c*
c*PAR bxgsm  (O) : composante suivant xgsm du champ magnetique total (gauss)
c*PAR bygsm  (O) : composante suivant ygsm du champ magnetique total (gauss)
c*PAR bzgsm  (O) : composante suivant zgsm du champ magnetique total (gauss)
c*
c*PAR bxse   (O) : composante suivant xse  du champ magnetique total (gauss)
c*PAR byse   (O) : composante suivant yse  du champ magnetique total (gauss)
c*PAR bzse   (O) : composante suivant zse  du champ magnetique total (gauss)
c*
c*PAR ier    (O) : code de retour
c*
c*NOT magin      : 1 ---> dipole + g11 + h11
c*NOT magin      : 2 ---> champ DGRF 00
c*NOT magin      : 3 ---> champ DGRF 05
c*NOT magin      : 4 ---> champ DGRF 10
c*NOT magin      : 5 ---> champ DGRF 15
c*NOT magin      : 6 ---> champ IGRF 20
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    : magtot, vspvcar, geogsm, geose
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*HST version 3.0 - 01.01.07 - Mise à jour du champ magnetique interne
c*HST version 4.0 - 13.10.10 - Mise à jour du champ magnetique interne
c*HST version 5.0 - 17.02.13 - Mise à jour du champ magnetique interne
c*HST                            (DGRF10 et IGRF15)
c*HST version 6.0 - 20.07.15 - Mise à jour du champ magnetique interne
c*HST                            (DGRF15 et IGRF20)
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 magin, magout, indgm, indval
      double precision year, tilt
      double precision rggsm(3,3), rgsmg(3,3), rgse(3,3)
      double precision rre, thet, phi, bb
      double precision bxgsm, bygsm, bzgsm
      double precision bxse, byse, bzse
      integer ier
c
c     ---------------------------------
c*FON Declaration des variables locales
c     ---------------------------------
c
      integer ier1,ier2,ier3,ier4
c*LOC ier1,ier2,ier3,ier4 : codes retour des modules appeles
c
      double precision br,bt,bp
c*LOC br,bp,bt : composantes radiale, tangentielle et azimuthale du champ
c
      double precision bx,by,bz
c*LOC bx,by,bz : coordonnees cartesiennes x, y et z du champ
c
      SAVE
c
c     ---------------------------------
c*FON Affectation identificateur rcs_id
c     ---------------------------------
c
      data rcs_id /"
     >$Id$"/
c
c     ******************
c     Debut de programme
c     ******************
c
c     -------------------------
c*FON Initialisations de depart
c     -------------------------
c
      ier  = 0
      ier1 = 0
      ier2 = 0
      ier3 = 0
      ier4 = 0
c
c     --------------------------------
c*FON Calcul du champ magnetiqie total
c     --------------------------------
c
      call magtot(magin,year,magout,indgm,indval,tilt,rggsm,rgsmg,rre,
     >            thet,phi,br,bt,bp,bb,ier1)
c
c     --------------------------------------------
c*FON Passage du champ en coordonnees cartesiennes
c     --------------------------------------------
c
      call vspvcar(thet,phi,br,bt,bp,bx,by,bz,ier2)
c
c     -----------------------------------------------------
c*FON Transformation des composantes geocentriques du champ
c*FON en composantes solaires magnetospheriques
c     -----------------------------------------------------
c
      call geogsm(rggsm,bx,by,bz,bxgsm,bygsm,bzgsm,ier3)
c
c     -----------------------------------------------------
c*FON Transformation des composantes geocentriques du champ
c*FON en composantes solaires ecliptiques
c     -----------------------------------------------------
c
      call geose(rgse,bx,by,bz,bxse,byse,bzse,ier4)
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end