tailts1k.f 4.01 KB
      subroutine tailts1k (tilt,xn,bn,delb,s,xgsm,ygsm,zgsm,
     >                     bx,by,bz,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.06.05 - V 2.0
c*VER 03.01.06 - V 2.1
c*
c*AUT spec. CNES - JC KOSIK - janvier 1998
c*AUT port. CISI
c*
c*ROL Theme : Modeles de champs magnetiques
c*ROL         Modele de queue de Tsyganenko 1982 avec coefficients 
c*ROL         xn, bn, delb ,s ajustables.
c*
c*PAR tilt (I) : angle tilt (radians)
c*
c*PAR xn   (I) : parametre de la couche neutre
c*PAR bn   (I) : parametre de la couche neutre
c*PAR delb (I) : parametre de la couche neutre
c*PAR s    (I) : parametre de la couche neutre
c*
c*PAR xgsm (I) : coordonnee solaire magnetospherique en x
c*PAR          : (rayons terrestres ou kilometres)
c*PAR ygsm (I) : coordonnee solaire magnetospherique en y
c*PAR          : (rayons terrestres ou kilometres)
c*PAR zgsm (I) : coordonnee solaire magnetospherique en z
c*PAR          : (rayons terrestres ou kilometres)
c*
c*PAR bx   (O) : composant solaire magnetospherique en x du champ 
c*PAR          : externe (nanoteslas)
c*PAR by   (O) : composant solaire magnetospherique en y du champ 
c*PAR          : externe (nanoteslas)
c*PAR bz   (O) : composant solaire magnetospherique en z du champ 
c*PAR          : externe (nanoteslas)
c*
c*PAR ier  (O) : code de retour
c*
c*NOT ier      : sans objet
c*
c*NOT common   : util
c*
c*INF utilise  : sans objet
c*
c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP
c*HST version 2.0 - 01.06.05 - 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
      double precision tilt,xn,bn,delb,s,xgsm,ygsm,zgsm
      double precision bx,by,bz
      integer ier 
c
c     ----------------------------------
c*FON Declaration des variables communes
c     ----------------------------------
c
      double precision pi,dpi,rad,deg,pid,xmu,rayt
c
c*COM pi   : constante pi (obtenue a partir de acos(-1.))
c*COM dpi  : constante 2 * pi
c*COM pid  : constante pi / 2
c*COM rad  : facteur de conversion degres  ----> radians
c*COM deg  : facteur de conversion radians ----> degres
c*COM xmu  : constante de gravitation terrestre (km**3/sec**2)
c*COM rayt : rayon equatorial terrestre (km)
c
      common/util/pi,dpi,rad,deg,pid,xmu,rayt
c
c     ---------------------------------
c*FON Declaration des variables locales
c     ---------------------------------
c
      double precision dely, x, y, z, d, d2, z2, sqr, ff, xnum
      double precision xden, gg, fy, term1, term2
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     Debut de programme
c     ******************
c
      ier = 0
c
      dely = 10.d0
c
      x  = xgsm
      y  = ygsm
      z  = zgsm - dsin(tilt) * dabs(xn)
      d  = 3.d0
      d2 = d * d
      z2 = z * z
c
      sqr   = dsqrt(z2 + d2)
      ff    = datan((xn - x) / sqr) - datan((xn - x - s) / sqr)
      xnum  = (xn - x)**2 + z2 + d2
      xden  = (xn - x - s)**2 + z2 + d2
      gg    = dlog(xnum / xden)
      fy    = 1.d0 / (1.d0 + (y / dely)**2)
      term1 = bn - (xn - x) * delb / s
      bx    = ((z / pi / sqr) * term1 * ff + delb * z * 
     >        gg / dpi / s) * fy
      by    = 0.d0
      term2 = 1.d0 - sqr * ff / s
      bz    = (term1 * gg / dpi + delb * term2 / pi) * fy
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end