posin.f 4.87 KB
      subroutine posin (lfile,nsat,day,revnum,xikm,yikm,zikm,
     >                  vxi,vyi,vzi,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 : Astronomie et calculs d'orbite
c*ROL         Calcul du vecteur d'etat a partir des donnees 
c*ROL         d'orbitographie de Cluster (compsants de Chebychev).
c*ROL         Un fichier de coefficients de Chebychev est necessaire.
c*ROL         Calcul du vecteur position vitesse dans le repere inertiel  
c*ROL         de la date.
c*
c*PAR lfile  (I) : numero logique associe au fichier de donnees
c*
c*PAR nsat   (I) : identification du satellite 1, 2, 3 ou 4
c*
c*PAR day    (I) : date julienne ref 2000 (a partir de 01/01/2000)
c*
c*PAR revnum (O) : numero d'orbite
c*
c*PAR xikm   (O) : coordonnee position en x (kilometres)
c*PAR yikm   (O) : coordonnee position en y (kilometres)
c*PAR zikm   (O) : coordonnee position en z (kilometres)
c*
c*PAR vxi    (O) : coordonnee vitesse en x (kilometres/secondes)
c*PAR vyi    (O) : coordonnee vitesse en y (kilometres/secondes)
c*PAR vzi    (O) : coordonnee vitesse en z (kilometres/secondes)
c*
c*PAR ier    (O) : code de retour
c*
c*NOT ier     : cf codes de retour de orbit
c*NOT ier     : 0 = OK 
c*NOT ier     : 1 = date julienne erronee (trop petite)
c*NOT ier     : 2 = date julienne erronee (trop grande)
c*NOT ier     : 3 = non continuite de la date entre 2 enreg consecutifs
c*NOT ier     : 4 = valeur de kode erronee (differente de 3 ou 6)
c*NOT ier     : 5 = fichier incoherent (donnees invalides)
c*NOT ier     : 6 = erreur de lecture
c*
c*NOT         : Le fichier doit etre ouvert au prealable.
c*NOT         : Les enregistrements doivent avoir des dates consecutives
c*NOT         : date debut enreg i - date de fin enreg i-1 > gap 
c*NOT         : avec gap = 2.d-4)
c*
c*INF utilise : orbit, pr2000, promal
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
      integer lfile,nsat
      double precision day
      double precision revnum
      double precision xikm,yikm,zikm
      double precision vxi,vyi,vzi
      integer ier 
c
c     ---------------------------------
c*FON Declaration des variables locales
c     ---------------------------------
c
      integer kode
c*LOC kode : dimemsion du vecteur d'etat 
c
      integer ierror
c*LOC ierror : code de retour des modules apples
c
      double precision x(6)
c*LOC x : position du satellite em km (vitesse en km/s)
c
      double precision x2000,y2000,z2000
c*LOC x2000,y2000,z2000 : vecteur position dans le repere 2000
c
      double precision vx2000,vy2000,vz2000
c*LOC vx2000,vy2000,vz2000 : vecteur vitesse dans le repere 2000
c
      double precision pr(3,3)
c*LOC pr : matrice de precession du rep 2000 au rep moyen de la date
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 position-vitesse dans le repere 2000 
c*FON kode = 6  pour les 6 elements x(i), i=1,6
c     -------------------------------------------------
c
      kode = 6
      call orbit(day,kode,lfile,nsat,x,revnum,ierror)
c
      if (ierror .ne. 0) then
         ier = ierror
      else
         x2000  = x(1)
         y2000  = x(2)
         z2000  = x(3)
         vx2000 = x(4)
         vy2000 = x(5)
         vz2000 = x(6)
c
c        ----------------------------------------------------
c*FON    Calcul de la matrice de precession du repere 2000 au
c*FON    repere moyen de la date
c        ----------------------------------------------------
c
         call pr2000(day,pr,ier)
c
c        ----------------------------------------------------
c*FON    Calcul de la position-vitesse dans le repere inertiel 
c*FON    moyen de la date
c        ----------------------------------------------------
c
         call promal(pr,x2000,y2000,z2000,xikm,yikm,zikm,ier)
c
         call promal(pr,vx2000,vy2000,vz2000,vxi,vyi,vzi,ier)
c
      endif
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end