mf75.f 4.02 KB
      subroutine mf75 (indval,tilt,xsm,ysm,zsm,bxsm,bysm,bzsm,bsm,ier)
c*
c***********************************************************************
c*
c*          "Copyright [c] CNES 98 - tous droits reserves"
c*          **********************************************
c*
c*PRO MAGLIB
c*
c*VER 01.05.30 - V 2.0
c*VER 03.01.06 - V 2.1
c*
c*AUT spec. CNES - JC KOSIK - fevrier 2001
c*AUT port. CS-SI
c*
c*ROL Theme : Modeles de champs magnetiques
c*ROL         Calcul du champ magnetique de Mead - fairfield en gammas.
c*
c*PAR indval (I) : indice geomagnetique : niveau d'amplitude du champ
c*
c*PAR tilt   (I) : angle de tilt (radians)
c*
c*PAR xsm    (I) : coordonnee en x dans le repere solaire magnetique
c*PAR            : (rayons terrestres)
c*PAR ysm    (I) : coordonnee en y dans le repere solaire magnetique
c*PAR            : (rayons terrestres)
c*PAR zsm    (I) : coordonnee en z dans le repere solaire magnetique
c*PAR            : (rayons terrestres)
c*
c*PAR bxsm   (O) : coordonnee en x du champ dans le repere SM (nanoteslas)
c*PAR bysm   (O) : coordonnee en y du champ dans le repere SM (nanoteslas)
c*PAR bzsm   (O) : coordonnee en z du champ dans le repere SM (nanoteslas)
c*
c*PAR bsm    (O) : module champ magnetique (nanoteslas)
c*
c*PAR ier    (O) : code de retour
c*
c*NOT ier        : sans objet
c*
c*INF utilise    : sans objet
c*
c*HST version 2.0 - 01.05.30 - Enrichissement de la maglib au CDPP
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 xsm,ysm,zsm
      double precision bxsm,bysm,bzsm,bsm
      integer ier
c
c     ---------------------------------
c*FON Declaration des variables locales
c     ---------------------------------
c
      integer i,j
c*LOC i,j : indices de boucles
c
      double precision ca(4,7),cb(4,3),cd(4,7)
      double precision x,y,z,x2,y2,z2,t
c*LOC Variables de travail intermediaires
c
      SAVE
c
c     ---------------------------------
c*FON Affectation identificateur rcs_id
c     ---------------------------------
c
      data rcs_id /"
     >$Id$"/
c
c     --------------------------
c*FON Affectation des constantes
c     --------------------------
c
      data((ca(i,j),j=1,7),i=1,4)/
     >  17.93, -5.79, 2.98, -2.57, -0.30, -1.47,  1.05,
     >  21.79, -7.03, 3.02, -2.99, -0.62, -1.22,  0.95,
     >  33.16, -6.39, 4.30, -3.25, -0.44, -1.27,  0.45,
     >  39.48, -2.91, 5.17, -3.86, -1.04, -1.29, -1.14/
c
      data((cb(i,j),j=1,3),i=1,4)/
     >  -10.11, -1.98,0.09,
     >  -11.84, -2.57,  -0.28,
     >  -16.54, -3.08, 0.22,
     >  -19.10, -3.50, 0.23/
c
      data((cd(i,j),j=1,7),i=1,4)/
     >   -9.41, 15.07, 13.16,  8.36,  7.95, 4.55, 0.51,
     >  -11.96, 17.87, 15.88,  9.77,  9.43, 5.57, 1.53,
     >  -19.88, 20.23, 22.72, 13.23, 11.46, 6.33, 0.67,
     >  -22.90, 22.70, 26.50, 15.54, 11.00, 7.36, 1.85/
c
c     ******************
c     Debut de programme
c     ******************
c
c     -------------------------
c*FON Initialisations de depart
c     -------------------------
c
      ier  = 0
c
      x  = xsm / 10.
      y  = ysm / 10.
      z  = zsm / 10.
      x2 = x * x
      y2 = y * y
      z2 = z * z
      t  = tilt / 10.
      i  = indval
c
      bxsm = ca(i,1) * z + ca(i,2) * x * z + 
     >       t * (ca(i,3) + ca(i,4) * x + 
     >       ca(i,5) * x2 + ca(i,6) * y2 + ca(i,7) * z2)
c
      bysm = cb(i,1) * y * z + 
     >       t * (cb(i,2) * y + cb(i,3) * x * y)
c
      bzsm = cd(i,1) + cd(i,2) * x + cd(i,3) * x2 +
     >       cd(i,4) * y2 + cd(i,5) * z2 +
     >       t * (cd(i,6) * z + cd(i,7) * x * z)
c
      bsm = sqrt(bxsm*bxsm + bzsm*bzsm + bysm*bysm)
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end