clusdis.f 5.49 KB
      subroutine clusdis (isw,tilt,xsm,ysm,zsm,xgsm,ygsm,zgsm,xgse,
     >                    ygse,zgse,dischap,dismp,disbwsh,dznsh,
     >                    dzpshn,dzpshs,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.01 - V 2.0
c*VER 03.01.06 - V 2.1
c*
c*AUT spec. CNES - JC KOSIK - juin 1995
c*AUT port. CISI
c*
c*ROL Theme : Frontieres et regions
c*ROL         Calcul des distances d'un satellite a differentes 
c*ROL         frontieres.
c*
c*PAR isw     (I) : valeur de l'indice de variabilite du vent solaire
c*
c*PAR tilt    (I) : angle de tilt (radians)
c*
c*PAR xsm     (I) : coordonnee solaire magnetique x (rayons terrestres)
c*PAR ysm     (I) : coordonnee solaire magnetique y (rayons terrestres)
c*PAR zsm     (I) : coordonnee solaire magnetique z (rayons terrestres)
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 xgse    (I) : composante solaire ecliptique x (rayons terrestres)
c*PAR ygse    (I) : composante solaire ecliptique y (rayons terrestres)
c*PAR zgse    (I) : composante solaire ecliptique y (rayons terrestres)
c*
c*PAR dischap (O) : distance par rapport a la plasmasphere
c*                : (rayons terrestres)
c*PAR dismp   (O) : distance par rapport a la magnetopause
c*                : (rayons terrestres)
c*PAR disbwsh (O) : distance par rapport a la magnetopause
c*PAR             : ou a l'onde de choc (rayons terrestres)
c*PAR dznsh   (O) : distance par rapport a la couche neutre
c*PAR             : (rayons terrestres)
c*PAR dzpshn  (O) : distance par rapport a la couche de plasma nord
c*                : (rayons terrestres)
c*PAR dzpshs  (O) : distance par rapport a la couche de plasma sud
c*                : (rayons terrestres)
c*
c*PAR ier     (O) : code de retour
c*
c*NOT isw         : 1 a 5
c*NOT isw         : 1 : distance subsolaire = 12.6 rayons terrestres
c*NOT isw         : 2 : distance subsolaire = 11.7 rayons terrestres
c*NOT isw         : 3 : distance subsolaire = 11.  rayons terrestres
c*NOT isw         : 4 : distance subsolaire = 10.  rayons terrestres
c*NOT isw         : 5 : distance subsolaire = 8.8  rayons terrestres
c*
c*NOT ier         : sans objet
c*
c*INF utilise     : caldis, dchapp, posns, posps
c*
c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP
c*HST version 2.0 - 01.06.01 - 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
      double precision xsm, ysm, zsm
      double precision xgsm, ygsm, zgsm
      double precision xgse, ygse, zgse
      double precision dischap, dismp, disbwsh
      double precision dznsh, dzpshn, dzpshs 
      integer isw 
      integer ier 
c
c     ---------------------------------
c*FON declaration des variables locales
c     ---------------------------------
c
      integer ityp
c*LOC ityp : choix de frontiere (1 = magnetopause ; 2 = onde de choc)
C
      integer ier1,ier2,ier3,ier4,ier5
c*LOC ier1,ier2,ier3,ier4,ier5 : codes retour des modules appeles
c
      double precision rre
c*LOC rre : distance radiale geocentrique
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
      dismp   = 999.d0
      disbwsh = 999.d0
      dischap = 999.d0
      dznsh   = 999.d0
      dzpshs  = 999.d0
      dzpshn  = 999.d0
c 
      rre = sqrt(xgse**2 + ygse**2 + zgse**2)
c      
      ityp = 1
c
c     --------------------------------------
c*FON Calcul des distances a la magnetopause
c     --------------------------------------
c
      call caldis(ityp,isw,xgse,ygse,zgse,dismp,ier1)
c
      if (dismp .ge. 0) then
c
c     -----------------------------------------------------
c*FON Calcul de la distance a l'onde de choc car distmp > 0
c     -----------------------------------------------------
c
         ityp = 2
         call caldis(ityp,isw,xgse,ygse,zgse,disbwsh,ier2)
      endif
c
c     ------------------------------------------------------
c*FON Calcul des distances a l'interieur de la magnetosphere
c*FON (en-deca de la magnetopause) si dismp < 0
c     ------------------------------------------------------
c
      if (dismp .lt. 0.d0) then
c
c     -----------------------------------------------------
c*FON Calcul de la distance a la plasmasphere si rre < 8 re
c     -----------------------------------------------------
c
         if (rre .le. 8.d0) then
            call dchapp(xsm,ysm,zsm,dischap,ier3)
         else
           if (xgsm .lt. 0.d0) then
c
              call posns(tilt,xgsm,ygsm,zgsm,dznsh,ier4)
c
              call posps(tilt,xgsm,ygsm,zgsm,dzpshn,dzpshs,ier5)
c
           endif
         endif
      endif
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end