dbtot.f 4.7 KB
      subroutine dbtot (indval,tilt,rggsm,rgsmg,xgsm,ygsm,zgsm,db,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 - juillet 1998
c*AUT port. CISI
c*
c*ROL Theme : Modeles de champs magnetiques 
c*ROL         Calcul d'une courbe de niveau Db dans le plan midi-minuit
c*ROL         Les courbes de niveau db donnent l'ecart b total - b dipole
c*ROL         en nanoteslas.
c*
c*PAR indval (I) : indice geomagnetique : niveau d'amplitude du champ (1 a 6)
c*
c*PAR tilt   (I) : angle de tilt (radians)
c*
c*PAR rggsm  (I) : matrice de passage du repere geographique au
c*PAR            : repere solaire magnetospherique
c*PAR rgsmg  (I) : matrice de passage du repere solaire
c*PAR            : magnetospherique au repere geographique
c*
c*PAR xgsm   (I) : coordonnee solaire magnetospherique x (rayons terrestres)
c*PAR ygsm   (I) : coordonnee solaire magnetospherique y (rayons terrestres)
c*PAR zgsm   (I) : coordonnee solaire magnetospherique z (rayons terrestres)
c*
c*PAR db     (O) : courbe de niveau de champ magnetique (nanoteslas)
c*
c*PAR ier    (O) : code de retour
c*
c*NOT ier      : sans objet
c*
c*NOT common   : sans objet
c*
c*INF utilise  : mpauses, magtots
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, db
      integer ier 
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 r,thet,phi
c*LOC r,thet,phi : coordonnees spheriques
c
      double precision bxt,byt,bzt
c*LOC bxt,byt,bzt : coordonnees solaires magnetospheriques x,y et z du champ
c
      double precision bt
c*LOC bt : composante tangentielle du champ total
c
      double precision bi
c*LOC bi : module 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
      ier = 0
c
c     ------------------------------------------------------
c*FON calcul de la difference db entre le champ total et le
c*FON champ dipolaire
c     ------------------------------------------------------
c
c     -------------------------------------------
c*FON calcul des coordonnees spheriques thet, phi
c     -------------------------------------------
c
      r    = dsqrt(xgsm * xgsm + zgsm * zgsm)
      ier1 = 0
      ier2 = 0
c
c     ---------------------------------------
c*FON le calcul n'est pas effectue pour r < 1
c     ---------------------------------------
c
      if (r .le. 1.d0) ier1 = 1
c
c     -------------------------------------------------------------
c*FON le calcul n'est pas effectue a l'exterieur de la magnetopause
c*FON de Shabansky
c     -------------------------------------------------------------
c 
      call mpauses(r,thet,phi,ier2)
c
c     ---------------------------------------------
c*FON calcul en dehors de ces 2 cas, sinon db = 999
c     ---------------------------------------------
c
      if (ier1 .eq. 0 .and. ier2 .eq. 0) then
c
c     -------------------------------------------
c*FON calcul des coordonnees spheriques thet, phi
c     -------------------------------------------
c
         thet = dacos(zgsm / r)
         ygsm = 0.d0
         if (xgsm .ne. 0.d0) then
            phi = datan2(ygsm,xgsm)
         else
            phi = 0.d0
         endif
c
c     -------------------------------------------
c*FON calcul du champ total et du champ dipolaire
c     -------------------------------------------
c
         call magtots(indval,tilt,rggsm,rgsmg,xgsm,ygsm,zgsm,
     >                 bxt,byt,bzt,bt,bi,ier)
         db = bt - bi
      else if (ier1 .eq. 1 .or. ier2 .eq. 1) then
         db = 999.d0
      endif
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end