posin.f
4.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
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