posps.f 3.92 KB
      subroutine posps (tilt,xgsm,ygsm,zgsm,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.05 - 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 de la position d'un satellite par rapport a la 
c*ROL         couche de plasma.
c*
c*PAR tilt   (I) : angle de tilt (radians)
c*
c*PAR xgsm   (I) : coordonee solaire magnetospherique x du satellite
c*PAR            : (rayons terrestres)
c*PAR ygsm   (I) : coordonee solaire magnetospherique y du satellite
c*PAR            : (rayons terrestres)
c*PAR zgsm   (I) : coordonee solaire magnetospherique z du satellite
c*PAR            : (rayons terrestres)
c*
c*PAR dzpshn (O) : distance par rapport a la couche de plasma nord
c*PAR            : (rayons terrestres)
c*
c*PAR dzpshs (O) : distance par rapport a la couche de plasma sud
c*PAR            : (rayons terrestres)
c*
c*PAR ier    (O) : code de retour
c*
c*NOT ipsh       : 0 = satellite hors de la couche de plasma
c*NOT ipsh       : 1 = satellite dans la couche de plasma
c*
c*NOT La couche de plasma est definie par rapport au modele de
c*NOT de couche neutre de Dandouras.
c*NOT Le satellite doit etre dans la couche neutre.
c*NOT On definit les frontieres nord et sud de la couche de plasma
c*NOT par rapport a la couche neutre et on teste zgsm.
c*
c*NOT ier        : sans objet
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
      double precision xgsm, ygsm, zgsm
      double precision dzpshn, dzpshs
      integer ier
c
c     ---------------------------------
c*FON Declaration des variables locales
c     ---------------------------------
c
      double precision a1,b1,ho,yo,dd
      double precision aygsm,zcpn,zcps,radic
      double precision rlim,znsh,rp
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 a1 /0.186d0/
      data b1 /3.d0/
      data ho /10.5d0/
      data yo /22.5d0/
      data dd /14.d0/
c
c     ******************
c     Debut de programme
c     ******************
c
      ier = 0
c
c     ---------------------------------------------------
c*FON Calcul de la position du satellite par rapport a la
c*FON couche de plasma si celui ci est pres de cette zone
c     ---------------------------------------------------
c
      znsh = -dd * sin(tilt)
      rlim =  ho * cos(tilt)
c
      dzpshn = 999.0d0
      dzpshs = 999.0d0
c
      if (xgsm .lt. 0.d0) then
c
         rp = sqrt(xgsm * xgsm + ygsm * ygsm)
c
         if (rp .gt. rlim) then
c
            aygsm = abs(ygsm)
            if (aygsm .lt. yo) then
               radic = 1.d0 - (aygsm / yo)**2
               znsh  = ((ho + dd) * sqrt(radic) - dd) * sin(tilt)
            endif
c
            zcpn = znsh + a1 * aygsm + b1
            zcps = znsh - a1 * aygsm - b1
c
            dzpshn = zgsm - zcpn
            dzpshs = zgsm - zcps
c
         endif
c
      endif
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end