magtots.f 5.54 KB
      subroutine magtots (indval,tilt,rggsm,rgsmg,xgsm,ygsm,zgsm,
     >                    bxt,byt,bzt,bt,bd,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 1998
c*AUT port. CISI
c*
c*ROL Theme : Calculs de geophysique
c*ROL         Calcul du champ total comme somme du champ dipolaire et du
c*ROL         champ externe: ichp = 1  Tsyganenko 89Kp, ichp = Tsyganenko 87
c*ROL         ichp = 3, Kosik 97
c*
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 xgsm   (I) : coordonnee solaire magnetospherique x du point
c*PAR            : (rayons terrestres)
c*PAR ygsm   (I) : coordonnee solaire magnetospherique y du point
c*PAR            : (rayons terrestres)
c*PAR zgsm   (I) : coordonnee solaire magnetospherique z du point
c*PAR            : (rayons terrestres)
c*
c*PAR bxt    (O) : coordonnee solaire magnetospherique x du champ 
c*PAR byt    (O) : coordonnee solaire magnetospherique y du champ 
c*PAR bzt    (O) : coordonnee solaire magnetospherique z du champ
c* 
c*PAR bt     (O) : composante tangentielle du champ total (gauss)
c*
c*PAR bd     (O) : module du champ dipolaire
c*
c*PAR ier    (O) : code de retour
c*
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 ier        : sans objet
c*
c*NOT common     : choichp
c*
c*INF utilise    : gsmgeo, dipols, geogsm, ex89kp, tsyg87, kk97kp
c*
c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP
c*HST version 2.0 - 01.05.30 - 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
      integer indval
      double precision tilt
      double precision rggsm(3,3),rgsmg(3,3)
      double precision xgsm,ygsm,zgsm
      double precision bxt,byt,bzt,bt,bd
      integer ier
c
c     ----------------------------------
c*FON Declaration des variables communes
c     ----------------------------------
c
      integer ichp
c*COM ichp :  type du champ externe (1 : Tsyganenko 89Kp, 2 : Tsyganenko 87,
c*COM      :  3 : Kosik 97)
c
      common/choichp/ichp
c
c     ---------------------------------
c*FON Declaration des variables locales
c     ---------------------------------
c
      double precision bxme,byme,bzme,btme
c*LOC btme : composante tangentielle du champ
c
      double precision xg,yg,zg
c*LOC xg,yg,zg : composantes cartesiennes en x, y et z
c
      double precision bxd,byd,bzd
c*LOC xg,yg,zg : composantes cartesiennes en x, y et z
c
      double precision bxdgsm,bydgsm,bzdgsm
c*LOC xg,yg,zg : composantes gsm en x, y et z
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
c
c     -------------------------------------------------------
c*FON Calcul des coordonnees dipolaires cartesiennes du point
c     -------------------------------------------------------
c
      call gsmgeo(rgsmg,xgsm,ygsm,zgsm,xg,yg,zg,ier)
c
c     -----------------------------------------------------
c*FON Calcul du champ du dipole en coordonnees cartesiennes 
c*FON bdx ,bdy, bdz
c     -----------------------------------------------------
c
      call dipols(xg,yg,zg,bxd,byd,bzd,bd,ier)
c
c     --------------------------------
c*FON On transforme en composantes gsm
c     --------------------------------
c
      call geogsm(rggsm,bxd,byd,bzd,bxdgsm,bydgsm,bzdgsm,ier)
c
      if (ichp .eq. 1) then
c
c     ----------------------------------
c*FON Calcul du champ de Tsyganenko 89Kp
c     ----------------------------------
c
         call  ex89kp (indval,tilt,xgsm,ygsm,zgsm,bxme,byme,bzme,ier)
c
      else if (ichp .eq. 2) then
c
c     --------------------------------
c*FON Calcul du champ de Tsyganenko 87
c     --------------------------------
c
         call tsyg87 (indval,tilt,xgsm,ygsm,zgsm,bxme,byme,bzme,ier)
c
      elseif (ichp .eq. 3) then
c
         call kk97kp (indval,tilt,xgsm,ygsm,zgsm,
     >                bxme,byme,bzme,btme,ier)
c
      endif
c
c     ----------------------------------------------------------
c*FON Somme des composantes GSM  des champs dipolaire et externe
c     ----------------------------------------------------------
c
      bxt = bxdgsm + bxme
      byt = bydgsm + byme
      bzt = bzdgsm + bzme
c
c     -------------------------------
c*FON Calcul du module du champ total
c     -------------------------------
c
      bt = sqrt(bxt * bxt + byt * byt + bzt * bzt)
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end