Commit 510e044c14a20ad7b361323119d7a512584e9e6c
1 parent
bacb77ca
Exists in
master
extension validite 1945-2025
Showing
8 changed files
with
1759 additions
and
9 deletions
Show diff stats
@@ -0,0 +1,420 @@ | @@ -0,0 +1,420 @@ | ||
1 | + subroutine dconjrv (magin,year,magout,indgm,indval,tilt,rb, | ||
2 | + > rggsm,rgsmg,dir,rre,theto, | ||
3 | + > phio,rfin,rmax,np,tr,tthet,tphi,ier) | ||
4 | +c* | ||
5 | +c*********************************************************************** | ||
6 | +c* | ||
7 | +c* "Copyright [c] CNES 98 - tous droits reserves" | ||
8 | +c* ********************************************** | ||
9 | +c* | ||
10 | +c*PRO MAGLIB | ||
11 | +c* | ||
12 | +c*VER 99.03.31 - V 1.0 | ||
13 | +c*VER 01.05.30 - V 2.0 | ||
14 | +c*VER 03.01.06 - V 2.1 | ||
15 | +c*VER 01.01.07 - V 3.0 | ||
16 | +c*VER 13.10.10 - V 4.0 | ||
17 | +c*VER 17.02.23 - V 5.0 | ||
18 | +c*VER 20.07.15 - V 6.0 | ||
19 | +c* | ||
20 | +c*AUT spec. CNES - JC KOSIK - juin 1995 | ||
21 | +c*AUT port. CISI | ||
22 | +c*AUT adapt. AKKA | ||
23 | +c* | ||
24 | +c*ROL Theme : Calculs de geophysique | ||
25 | +c*ROL Calcul du point conjugue d'un point donne en tenant | ||
26 | +c*ROL compte d'une combinaison de champs interns et externe. | ||
27 | +c* | ||
28 | +c*PAR magin (I) : type de champ magnetique interne | ||
29 | +c* | ||
30 | +c*PAR year (I) : annee fractionnaire | ||
31 | +c* | ||
32 | +c*PAR magout (I) : type de champ magnetique externe | ||
33 | +c* | ||
34 | +c*PAR indgm (I) : type d'indice geomagnetique Kp ou Ae | ||
35 | +c*PAR indval (I) : indice geomagnetique de 1 a 6 | ||
36 | +c* | ||
37 | +c*PAR tilt (I) : angle de tilt (radians) | ||
38 | +c* | ||
39 | +c*PAR rb (I) : distance subsolaire normalisee de la magnetopause | ||
40 | +c*PAR : (rayons terrestres) rb = 10. * re | ||
41 | +c* | ||
42 | +c*PAR rggsm (I) : matrice (3,3) de passage du repere geographique au | ||
43 | +c*PAR : repere solaire magnetospherique | ||
44 | +c*PAR rgsmg (I) : matrice (3,3) de passage du repere solaire | ||
45 | +c*PAR : magnetospherique au repere geographique | ||
46 | +c* | ||
47 | +c*PAR dir (I) : direction du trace des lignes de champ | ||
48 | +c*PAR : dir = -1 trace vers le meme hemisphere | ||
49 | +c*PAR : dir = +1 trace vers l'hemisphere oppose | ||
50 | +c* | ||
51 | +c*PAR rre (I) : distance radiale geocentrique (rayons terrestres) | ||
52 | +c*PAR theto (I) : colatitude geocentrique (radians) | ||
53 | +c*PAR phio (I) : longitude geocentrique (radians) | ||
54 | +c* | ||
55 | +c*PAR rfin (I) : distance geocentrique d'arret (rayons terrestres) | ||
56 | +c* | ||
57 | +c*PAR rmax (I) : distance geocentrique maximum autorisee | ||
58 | +c*PAR : (rayons terrestres) | ||
59 | +c* | ||
60 | +c*PAR np (O) : nombre de points calcules | ||
61 | +c* | ||
62 | +c*PAR tr (O) : tableau des distances geocentriques des points de la | ||
63 | +c*PAR : ligne de champ (rayons terrestres) | ||
64 | +c*PAR tthet (O) : tableau des colatitudes des points de la | ||
65 | +c*PAR : ligne de champ (radians) | ||
66 | +c*PAR tphi (O) : tableau des longitudes des points de la | ||
67 | +c*PAR : ligne de champ (radians) | ||
68 | +c* | ||
69 | +c*PAR ier (O) : code de retour | ||
70 | +c* | ||
71 | +c*NOT magin : 1 = dipole + g11 + h11 | ||
72 | +c*NOT magin : 2 = champ DGRF 1945-1970 | ||
73 | +c*NOT magin : 3 = champ DGRF 1970-1995 | ||
74 | +c*NOT magin : 3 = champ DGRF 1995-2000 | ||
75 | +c* | ||
76 | +c*NOT year : year doit etre >= 1945. | ||
77 | +c* | ||
78 | +c*NOT magout : 0 = pas de champ externe | ||
79 | +c*NOT magout : 1 = Tsyganenko 87 | ||
80 | +c*NOT magout : 2 = Tsyganenko 89 | ||
81 | +c*NOT magout : 3 = Kosik 97 | ||
82 | +c* | ||
83 | +c*NOT indgm : 1 ---> indices geomagnetique Kp | ||
84 | +c*NOT indval : 1 ---> Kp = 0 , 0+ | ||
85 | +c*NOT indval : 2 ---> Kp = 1- , 1 , 1+ | ||
86 | +c*NOT indval : 3 ---> Kp = 2- , 2 , 2+ | ||
87 | +c*NOT indval : 4 ---> Kp = 3- , 3 , 3+ | ||
88 | +c*NOT indval : 5 ---> Kp = 4- , 4 , 4+ | ||
89 | +c*NOT indval : 6 ---> Kp > 5- | ||
90 | +c* | ||
91 | +c*NOT indgm : 2 ---> geomagnetique Ae | ||
92 | +c*NOT indval : 1 ---> Ae = 0 - 50 | ||
93 | +c*NOT indval : 2 ---> Ae = 50 - 100 | ||
94 | +c*NOT indval : 3 ---> Ae = 100 - 150 | ||
95 | +c*NOT indval : 4 ---> Ae = 150 - 250 | ||
96 | +c*NOT indval : 5 ---> Ae = 250 - 400 | ||
97 | +c*NOT indval : 6 ---> Ae >= 400 | ||
98 | +c* | ||
99 | +c*NOT dir : +1 = trace vers les altitudes plus elevees | ||
100 | +c*NOT : (depuis la surface vers l hemisphere oppose) | ||
101 | +c*NOT : -1 = trace vers les altitudes plus basses | ||
102 | +c*NOT : (vers la surface du meme hemisphere | ||
103 | +c* | ||
104 | +c*NOT rfin : 1 = dernier point sur Terre | ||
105 | +c* | ||
106 | +c*NOT rmax : point d arret des lignes de champ ouvertes | ||
107 | +c* | ||
108 | +c*NOT ier : 1 = l > 500 ou r > rmax ou (rre-1) <= 0.01 | ||
109 | +c*NOT : 2 = sortie de magnetopause | ||
110 | +c* | ||
111 | +c*NOT common : util | ||
112 | +c* | ||
113 | +c*INF utilise : magtot, spcar, mpause, step, carsp | ||
114 | +c* | ||
115 | +c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP | ||
116 | +c*HST version 2.0 - 01.05.30 - Ajout indice Kosik 97 | ||
117 | +c*HST version 2.1 - 03.01.06 - corrections en compilation avec g77 | ||
118 | +c*HST version 3.0 - 01.01.07 - mise a jour des modeles de champ interne | ||
119 | +c*HST version 4.0 - 13.10.10 - mise a jour des modeles de champ interne | ||
120 | +c*HST (DGRF05 et IGRF10) | ||
121 | +c*HST version 5.0 - 17.02.23 - mise a jour des modeles de champ interne | ||
122 | +c*HST (DGRF10 et IGRF15) | ||
123 | +c*HST version 5.0 - 20.07.15 - mise a jour des modeles de champ interne | ||
124 | +c*HST (DGRF15 et IGRF20) | ||
125 | +c* | ||
126 | +c*********************************************************************** | ||
127 | +c* | ||
128 | + implicit none | ||
129 | +c | ||
130 | +c --------------------------------- | ||
131 | +c*FON Declaration identificateur rcs_id | ||
132 | +c --------------------------------- | ||
133 | +c | ||
134 | + character rcs_id*100 | ||
135 | +c | ||
136 | +c -------------------------- | ||
137 | +c*FON Declaration des parametres | ||
138 | +c -------------------------- | ||
139 | +c | ||
140 | + integer magin | ||
141 | + double precision year | ||
142 | + integer magout, indgm, indval | ||
143 | + double precision tilt, rb | ||
144 | + double precision rggsm(3,3), rgsmg(3,3) | ||
145 | + double precision dir | ||
146 | + double precision rre, theto, phio | ||
147 | + double precision rfin, rmax | ||
148 | + integer np | ||
149 | + double precision tr(500), tthet(500), tphi(500) | ||
150 | + integer ier | ||
151 | +c | ||
152 | +c ---------------------------------- | ||
153 | +c*FON Declaration des variables communes | ||
154 | +c ---------------------------------- | ||
155 | +c | ||
156 | + double precision pi,dpi,rad,deg,pid,xmu,rayt | ||
157 | +c | ||
158 | +c*COM pi : constante pi (obtenue a partir de acos(-1.)) | ||
159 | +c*COM dpi : constante 2 * pi | ||
160 | +c*COM pid : constante pi / 2 | ||
161 | +c*COM rad : facteur de conversion degres ----> radians | ||
162 | +c*COM deg : facteur de conversion radians ----> degres | ||
163 | +c*COM xmu : constante de gravitation terrestre (km**3/sec**2) | ||
164 | +c*COM rayt : rayon equatorial terrestre (km) | ||
165 | +c | ||
166 | + common/util/pi,dpi,rad,deg,pid,xmu,rayt | ||
167 | +c | ||
168 | +c --------------------------------- | ||
169 | +c*FON Declaration des variables locales | ||
170 | +c --------------------------------- | ||
171 | +c | ||
172 | + integer ipop | ||
173 | +c*LOC ipop : indicateur de positionnement par rapport a la magnetosphere | ||
174 | +c* | ||
175 | + integer ier1,ier2,ier3,ier4,ier5,ier6,ier7 | ||
176 | +c*LOC ier1,ier2,ier3,ier4,ier5,ier6,ier7 : codes retour des modules appeles | ||
177 | +c | ||
178 | + double precision br,bt,bp | ||
179 | +c*LOC br,bt,bp : composantes radiale, tangentielle et azimuthale du champ | ||
180 | +c | ||
181 | + double precision x1,x2,x3 | ||
182 | + double precision xxpp,xxp,xx,yypp,yyp,yy,zzpp | ||
183 | + double precision zzp,zz | ||
184 | +c*LOC x1,x2,x3 : coordonnees cartesiennes x, y et z du point courant | ||
185 | +c | ||
186 | + double precision rr,thetr,phir | ||
187 | +c*LOC rr,thetr,phir : coordonnees spheriques | ||
188 | +c | ||
189 | + double precision errin | ||
190 | +c*LOC errin: erreur maximale permise lors de l'integration | ||
191 | +c | ||
192 | + double precision tx(500),ty(500),tz(500) | ||
193 | +c*LOC tx,ty,tz : tableau des coordonnees cartesiennes x, y et z | ||
194 | +c | ||
195 | + double precision a1,a2,a3,a4,a5,a6,a7 | ||
196 | +c*LOC a1,a2,a3,a4,a5,a6,a7 : termes des equations | ||
197 | +c | ||
198 | + double precision altgc | ||
199 | +c*LOC altgc : altitude en km du 1er point de la ligne de champ | ||
200 | +c | ||
201 | + double precision epsr | ||
202 | +c*LOC epsr : epsilon pour validite de l'altitude | ||
203 | +c | ||
204 | + double precision ds0,rpp,r,b,sgn,ds,rp | ||
205 | +c*LOC ds0,rpp,r,b,sgn,ds,rp : variables pour la determination du ds | ||
206 | +c | ||
207 | + double precision px,py,pz | ||
208 | +c*LOC px,py,pz : coordonees cartesiennes | ||
209 | +c | ||
210 | +c ----------------------------------------- | ||
211 | +c*FON Declaration de la fonction interne pinter | ||
212 | +c ----------------------------------------- | ||
213 | +c | ||
214 | + double precision pinter | ||
215 | +c | ||
216 | + SAVE | ||
217 | +c | ||
218 | +c ---------------------------------------- | ||
219 | +c*FON Definition de la fonction interne pinter | ||
220 | +c ---------------------------------------- | ||
221 | +c | ||
222 | + pinter(a1,a2,a3,a4,a5,a6,a7)= | ||
223 | + > ((a2 - a3) * (a7 - a2) * (a7 - a3) * a4 | ||
224 | + > - (a1 - a3) * (a7 - a1) * (a7 - a3) * a5 | ||
225 | + > + (a1 - a2) * (a7 - a2) * (a7 - a1) * a6) | ||
226 | + > / ((a1 - a2) * (a2 - a3) * (a1 - a3)) | ||
227 | +c | ||
228 | +c --------------------------------- | ||
229 | +c*FON Affectation identificateur rcs_id | ||
230 | +c --------------------------------- | ||
231 | +c | ||
232 | + data rcs_id /" | ||
233 | + >$Id$"/ | ||
234 | +c | ||
235 | +c ****************** | ||
236 | +c Debut de programme | ||
237 | +c ****************** | ||
238 | +c | ||
239 | +c --------------- | ||
240 | +c*FON Initialisations | ||
241 | +c --------------- | ||
242 | +c | ||
243 | + ier = 0 | ||
244 | + ier1 = 0 | ||
245 | + ier2 = 0 | ||
246 | + ier3 = 0 | ||
247 | + ier4 = 0 | ||
248 | + ier5 = 0 | ||
249 | + ier6 = 0 | ||
250 | + ier7 = 0 | ||
251 | + ipop = 0 | ||
252 | +c | ||
253 | + rr = rre | ||
254 | + thetr = theto | ||
255 | + phir = phio | ||
256 | +c | ||
257 | +c ------------------- | ||
258 | +c*FON Determination du ds | ||
259 | +c ------------------- | ||
260 | +c | ||
261 | + altgc = (rr - 1.0d0) | ||
262 | + epsr = 0.001d0 | ||
263 | + ds0 = 0.5d0 | ||
264 | + if (dir .lt. 0.0d0) then | ||
265 | + if (altgc .gt. epsr .and. altgc .lt. 2.0d0) then | ||
266 | + ds0 = altgc / 20.0d0 | ||
267 | + else if (altgc .le. epsr) then | ||
268 | + ier = 0 | ||
269 | + np = 1 | ||
270 | + tr(1) = rr | ||
271 | + tthet(1) = thetr | ||
272 | + tphi(1) = phir | ||
273 | + endif | ||
274 | + endif | ||
275 | + ds = ds0 | ||
276 | +c | ||
277 | +c --------------------------------------------------------------- | ||
278 | +c*FON Hemisphere Nord Br < 0, dir < 0, sgn > 0, trace dans le sens du | ||
279 | +c*FON champ, donc vers l'hemisphere Nord. Si dir > 0, sgn <0, trace | ||
280 | +c*FON dans le sens oppose au champ, donc vers l'hemisphere Sud. | ||
281 | +c*FON Hemisphere Sud : Br > 0, dir < 0, sgn < 0, trace dans le sens | ||
282 | +c*FON oppose au champ, donc vers l'hemisphere Sud. Si dir > 0, sgn > 0, | ||
283 | +c*FON trace dans le sens du champ, donc vers l'hemisphere Nord. | ||
284 | +c --------------------------------------------------------------- | ||
285 | +c | ||
286 | + call magtotv(magin,year,magout,indgm,indval,tilt,rggsm,rgsmg,rr, | ||
287 | + > thetr,phir,br,bt,bp,b,ier1) | ||
288 | +c | ||
289 | + errin = 0.0005d0 | ||
290 | + sgn = sign(1.d0, br * dir) | ||
291 | + ds = ds0 * sgn | ||
292 | + np = 1 | ||
293 | +c | ||
294 | +c ---------------------------------------------------- | ||
295 | +c*FON Calcul de la position cartesienne du point de depart | ||
296 | +c ---------------------------------------------------- | ||
297 | +c | ||
298 | + call spcar(rr,thetr,phir,x1,x2,x3,ier2) | ||
299 | +c | ||
300 | + tr(1) = rr | ||
301 | + tthet(1) = thetr | ||
302 | + tphi(1) = phir | ||
303 | +c | ||
304 | + tx(np) = x1 | ||
305 | + ty(np) = x2 | ||
306 | + tz(np) = x3 | ||
307 | +c | ||
308 | +c ------------------------------------------------------------------- | ||
309 | +c*FON Calcul et test d'appartenance a la magnetosphere de type Shabansky, | ||
310 | +c*FON si ipop = 2 point en dehors ipop = 0, point a l'interieur | ||
311 | +c*FON Si le point de depart est a l'exterieur on ne fait pas les calculs | ||
312 | +c*FON et on met 999 dans les valeurs en 25 | ||
313 | +c ----------------------------------------------- | ||
314 | +c | ||
315 | + call mpause(rb,rggsm,rr,thetr,phir,ipop,ier3) | ||
316 | +c | ||
317 | + if (ipop .eq. 2) go to 10 | ||
318 | +c | ||
319 | +40 continue | ||
320 | + np = np + 1 | ||
321 | +c | ||
322 | +c ------------------------------------------------------- | ||
323 | +c*FON Test de sortie de la magnetosphere, si ipop=2 on | ||
324 | +c*FON arrete les calculs sans mettre 999 aux valeurs | ||
325 | +c*FON et on se debranche sur le return, on a trace un bout de | ||
326 | +c*FON ligne de champ c'est tout | ||
327 | +c ------------------------------------------------------- | ||
328 | +c | ||
329 | + call mpause(rb,rggsm,rr,thetr,phir,ipop,ier4) | ||
330 | +c | ||
331 | + if (ipop .eq. 2) go to 30 | ||
332 | +c | ||
333 | +c -------------------------------------------------- | ||
334 | +c*FON Integration pas a pas par appels successifs a step | ||
335 | +c -------------------------------------------------- | ||
336 | +c | ||
337 | + call stepv(magin,magout,indgm,indval,year,tilt, | ||
338 | + > rggsm,rgsmg,x1,x2,x3,ds,errin,ier5) | ||
339 | +c | ||
340 | + tx(np) = x1 | ||
341 | + ty(np) = x2 | ||
342 | + tz(np) = x3 | ||
343 | +c | ||
344 | +c ------------------------------------------------ | ||
345 | +c*FON Conversion des coordonnees cartesiennes du point | ||
346 | +c*FON en coordonnees spheriques | ||
347 | +c ------------------------------------------------ | ||
348 | +c | ||
349 | + call carsp(x1,x2,x3,rr,thetr,phir,ier6) | ||
350 | +c | ||
351 | + tr(np) = rr | ||
352 | + tthet(np) = thetr | ||
353 | + tphi(np) = phir | ||
354 | +c | ||
355 | + if (rr .gt. rfin .and. np .lt. 500 .and. rr .lt. rmax) go to 40 | ||
356 | +c | ||
357 | + if (np .ge. 500 .or. rr .ge. rmax) then | ||
358 | + ier = 1 | ||
359 | + tr(np) = 999.0d0 | ||
360 | + tthet(np) = 999.0d0 * rad | ||
361 | + tphi(np) = 999.0d0 * rad | ||
362 | + endif | ||
363 | +c | ||
364 | +c ---------------------------------------------------------- | ||
365 | +c*FON La limite rfin est depassee, on interpole pour obtenir les | ||
366 | +c*FON coordonnees exactes du point en cartesiennes converties | ||
367 | +c*FON en coordonnees spheriques apres calcul | ||
368 | +c ---------------------------------------------------------- | ||
369 | +c | ||
370 | + if (rr .lt. rfin) then | ||
371 | +c | ||
372 | + rpp = tr(np-2) | ||
373 | + rp = tr(np-1) | ||
374 | + r = tr(np) | ||
375 | + xxpp = tx(np-2) | ||
376 | + xxp = tx(np-1) | ||
377 | + xx = tx(np) | ||
378 | + yypp = ty(np-2) | ||
379 | + yyp = ty(np-1) | ||
380 | + yy = ty(np) | ||
381 | + zzpp = tz(np-2) | ||
382 | + zzp = tz(np-1) | ||
383 | + zz = tz(np) | ||
384 | + px = pinter(rpp,rp,r,xxpp,xxp,xx,rfin) | ||
385 | + py = pinter(rpp,rp,r,yypp,yyp,yy,rfin) | ||
386 | + pz = pinter(rpp,rp,r,zzpp,zzp,zz,rfin) | ||
387 | +c | ||
388 | + call carsp (px,py,pz,rr,thetr,phir,ier7) | ||
389 | +c | ||
390 | + tr(np) = rr | ||
391 | + tthet(np) = thetr | ||
392 | + tphi(np) = phir | ||
393 | +c | ||
394 | + endif | ||
395 | +c | ||
396 | +c -------------------------------------------------------------- | ||
397 | +c*FON Si la distance limite rmax ou si le nbr de points depasse 500 | ||
398 | +c*FON ou si on arrive en dehors de la magnetosphere de Shabansky on | ||
399 | +c*FON remplit les coordonnes par des 999 ou 999*rad pour obtenir des | ||
400 | +c*FON 999 en degres apres la conversion radians degres | ||
401 | +c -------------------------------------------------------------- | ||
402 | +c | ||
403 | +10 continue | ||
404 | +c | ||
405 | + if (ipop .eq. 2) then | ||
406 | +c | ||
407 | + tr(np) = 999.0d0 | ||
408 | + tthet(np) = 999.0d0 * rad | ||
409 | + tphi(np) = 999.0d0 * rad | ||
410 | + ier = 2 | ||
411 | +c | ||
412 | + endif | ||
413 | +30 continue | ||
414 | +c | ||
415 | +c **************** | ||
416 | +c Fin de programme | ||
417 | +c **************** | ||
418 | +c | ||
419 | + return | ||
420 | + end |
@@ -0,0 +1,228 @@ | @@ -0,0 +1,228 @@ | ||
1 | + subroutine derivv (magin,magout,indgm,indval,year,tilt, | ||
2 | + > rggsm,rgsmg,ds3,xgc,ygc,zgc,rxp1,rxp2, | ||
3 | + > rxp3,ier) | ||
4 | +c* | ||
5 | +c*********************************************************************** | ||
6 | +c* | ||
7 | +c* "Copyright [c] CNES 98 - tous droits reserves" | ||
8 | +c* ********************************************** | ||
9 | +c* | ||
10 | +c*pro MAGLIB | ||
11 | +c* | ||
12 | +c*VER 99.03.31 - V 1.0 | ||
13 | +c*VER 01.05.30 - V 2.0 | ||
14 | +c*VER 03.01.06 - V 2.1 | ||
15 | +c*VER 01.01.07 - V 3.0 | ||
16 | +c*VER 13.10.10 - V 4.0 | ||
17 | +c*VER 17.02.23 - V 5.0 | ||
18 | +c*VER 20.07.15 - V 6.0 | ||
19 | +c* | ||
20 | +c*AUT spec. CNES - JC KOSIK - avril 1996 | ||
21 | +c*AUT port. CISI | ||
22 | +c*AUT adpat. AKKA | ||
23 | +c* | ||
24 | +c*ROL Theme : Calculs de geophysique | ||
25 | +c*ROL Calcul des pas elementaires rxp1,rxp2,rxp3 au point | ||
26 | +c*ROL courant xgc,ygc,zgc. | ||
27 | +c* | ||
28 | +c*PAR magin (I) : type de champ magnetique interne | ||
29 | +c*PAR magout (I) : type de champ magnetique externe | ||
30 | +c* | ||
31 | +c*PAR indgm (I) : type d'indice geomagnetique Kp ou Ae | ||
32 | +c*PAR indval (I) : indice geomagnetique : niveau d'amplitude du champ | ||
33 | +c* | ||
34 | +c*PAR year (I) : annee fractionnaire (>= 2000.) | ||
35 | +c* | ||
36 | +c*PAR tilt (I) : angle de tilt (radians) | ||
37 | +c* | ||
38 | +c*PAR rggsm (I) : matrice de passage du repere geographique au | ||
39 | +c*PAR : repere solaire magnetospherique | ||
40 | +c*PAR rgsmg (I) : matrice de passage du repere solaire | ||
41 | +c*PAR : magnetospherique au repere geographique | ||
42 | +c* | ||
43 | +c*PAR ds3 (I) : pas elementaire d'integration | ||
44 | +c* | ||
45 | +c*PAR xgc (I) : coordonnee geocentrique en x | ||
46 | +c*PAR ygc (I) : coordonnee geocentrique en y | ||
47 | +c*PAR zgc (I) : coordonnee geocentrique en z | ||
48 | +c* | ||
49 | +c*PAR rxp1 (O) : pas elementaire sur x (au point xgc) | ||
50 | +c*PAR rxp2 (O) : pas elementaire sur y (au point ygc) | ||
51 | +c*PAR rxp3 (O) : pas elementaire sur z (au point zgc) | ||
52 | +c* | ||
53 | +c*PAR ier (O) : code de retour | ||
54 | +c* | ||
55 | +c*NOT magin : 1 = dipole + g11 + h11 | ||
56 | +c*NOT magin : 2 = champ DGRF 1945-1970 | ||
57 | +c*NOT magin : 3 = champ DGRF 1970-1995 | ||
58 | +c* | ||
59 | +c*NOT magout : 0 = pas de champ externe | ||
60 | +c*NOT magout : 1 = Tsyganenko 87 | ||
61 | +c*NOT magout : 2 = Tsyganenko 89 | ||
62 | +c*NOT magout : 3 = Kosik 97 | ||
63 | +c* | ||
64 | +c*NOT indgm : 1 ---> indice geomagnetique Kp | ||
65 | +c*NOT indval : 1 ---> Kp = 0 , 0+ | ||
66 | +c*NOT indval : 2 ---> Kp = 1- , 1 , 1+ | ||
67 | +c*NOT indval : 3 ---> Kp = 2- , 2 , 2+ | ||
68 | +c*NOT indval : 4 ---> Kp = 3- , 3 , 3+ | ||
69 | +c*NOT indval : 5 ---> Kp = 4- , 4 , 4+ | ||
70 | +c*NOT indval : 6 ---> Kp > 5- | ||
71 | +c* | ||
72 | +c*NOT indgm : 2 ---> indice geomagnetique Ae | ||
73 | +c*NOT indval : 1 ---> Ae = 0 - 50 | ||
74 | +c*NOT indval : 2 ---> Ae = 50 - 100 | ||
75 | +c*NOT indval : 3 ---> Ae = 100 - 150 | ||
76 | +c*NOT indval : 4 ---> Ae = 150 - 250 | ||
77 | +c*NOT indval : 5 ---> Ae = 250 - 400 | ||
78 | +c*NOT indval : 6 ---> Ae >= 400 | ||
79 | +c* | ||
80 | +c*NOT On utilise la formule generale dx/ds = bx/b | ||
81 | +c*NOT ou ds est le pas elementaire le long de la ligne de champ, b le | ||
82 | +c*NOT champ total, dx est la composante de ds suivant l'axe x et bx | ||
83 | +c*NOT la composante du champ suivant ce meme axe. | ||
84 | +c* | ||
85 | +c*INF utilise : carsp, inmag, outma1, vspvcar | ||
86 | +c* | ||
87 | +c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP | ||
88 | +c*HST version 2.0 - 01.05.30 - correction de commentaires de code | ||
89 | +c*HST version 2.1 - 03.01.06 - corrections en compilation avec g77 | ||
90 | +c*HST version 3.0 - 01.01.07 - mise a jour des modeles de champ interne | ||
91 | +c*HST version 4.0 - 13.10.10 - mise a jour des modeles de champ interne | ||
92 | +c*HST (DGRF05 et IGRF10) | ||
93 | +c*HST version 5.0 - 17.02.23 - mise a jour des modeles de champ interne | ||
94 | +c*HST (DGRF10 et IGRF15) | ||
95 | +c*HST version 6.0 - 20.07.15 - mise a jour des modeles de champ interne | ||
96 | +c*HST (DGRF15 et IGRF20) | ||
97 | +c* | ||
98 | +c*********************************************************************** | ||
99 | +c* | ||
100 | + implicit none | ||
101 | +c | ||
102 | +c --------------------------------- | ||
103 | +c*FON Declaration identificateur rcs_id | ||
104 | +c --------------------------------- | ||
105 | +c | ||
106 | + character rcs_id*100 | ||
107 | +c | ||
108 | +c -------------------------- | ||
109 | +c*FON Declaration des parametres | ||
110 | +c -------------------------- | ||
111 | +c | ||
112 | + integer indgm,indval,magin,magout | ||
113 | + double precision year | ||
114 | + double precision tilt | ||
115 | + double precision rggsm(3,3), rgsmg(3,3) | ||
116 | + double precision ds3 | ||
117 | + double precision xgc, ygc, zgc | ||
118 | + double precision rxp1, rxp2, rxp3 | ||
119 | + integer ier | ||
120 | +c | ||
121 | +c --------------------------------- | ||
122 | +c*FON Declaration des variables locales | ||
123 | +c --------------------------------- | ||
124 | +c | ||
125 | + integer ier1,ier2,ier3,ier4 | ||
126 | +c*LOC ier1,ier2,ier3,ier4 : codes retour des modules appeles | ||
127 | +c | ||
128 | + double precision rre,thetr,phir | ||
129 | +c*LOC rre,thetr,phir : coordonnees spheriques | ||
130 | +c | ||
131 | + double precision bre,bte,bpe | ||
132 | +c*LOC bre,bte,bpe : composantes radiale, tangentielle et azimuthale du champ | ||
133 | +c*LOC : d'origine externe | ||
134 | +c | ||
135 | + double precision bri,bti,bpi | ||
136 | +c*LOC bri,bti,bpi : composantes radiale, tangentielle et azimuthale du champ | ||
137 | +c*LOC : d'origine interne | ||
138 | +c | ||
139 | + double precision br,bt,bp | ||
140 | +c*LOC br,bt,bp : composantes radiale, tangentielle et azimuthale du champ total | ||
141 | +c | ||
142 | + double precision bi | ||
143 | +c*LOC bi : module du champ | ||
144 | +c | ||
145 | + double precision bxt,byt,bzt | ||
146 | +c*LOC bxt,byt,bzt : coordonnees solaires magnetospheriques x,y et z du champ | ||
147 | +c | ||
148 | + SAVE | ||
149 | +c | ||
150 | +c --------------------------------- | ||
151 | +c*FON Affectation identificateur rcs_id | ||
152 | +c --------------------------------- | ||
153 | +c | ||
154 | + data rcs_id /" | ||
155 | + >$Id$"/ | ||
156 | +c | ||
157 | +c ****************** | ||
158 | +c Debut de programme | ||
159 | +c ****************** | ||
160 | +c | ||
161 | +c ----------------------------------- | ||
162 | +c*FON Initialisations des codes de retour | ||
163 | +c ----------------------------------- | ||
164 | +c | ||
165 | + ier = 0 | ||
166 | + ier1 = 0 | ||
167 | + ier2 = 0 | ||
168 | + ier3 = 0 | ||
169 | + ier4 = 0 | ||
170 | +c | ||
171 | +c --------------------------------------------------- | ||
172 | +c*FON Initialisations des composantes du champ magnetique | ||
173 | +c --------------------------------------------------- | ||
174 | +c | ||
175 | + bre = 0.d0 | ||
176 | + bte = 0.d0 | ||
177 | + bpe = 0.d0 | ||
178 | +c | ||
179 | + bri = 0.d0 | ||
180 | + bti = 0.d0 | ||
181 | + bpi = 0.d0 | ||
182 | +c | ||
183 | +c ---------------------------------------------------------------------- | ||
184 | +c*FON Transformation des coordonnees geocentriques en coordonnees spheriques | ||
185 | +c ---------------------------------------------------------------------- | ||
186 | +c | ||
187 | + call carsp (xgc,ygc,zgc,rre,thetr,phir,ier1) | ||
188 | +c | ||
189 | +c -------------------------------------------- | ||
190 | +c*FON Calcul du champ magnetique d'origine interne | ||
191 | +c -------------------------------------------- | ||
192 | +c | ||
193 | + call inmagv(magin,year,rre,thetr,phir,bri,bti,bpi,bi,ier2) | ||
194 | +c | ||
195 | +c -------------------------------------------- | ||
196 | +c*FON Calcul du champ magnetique d'origine externe | ||
197 | +c -------------------------------------------- | ||
198 | +c | ||
199 | + call outma1(magout,indgm,indval,tilt,rggsm,rgsmg, | ||
200 | + > rre,thetr,phir,bre,bte,bpe,ier3) | ||
201 | +c | ||
202 | +c --------------------------------------------------------------- | ||
203 | +c*FON Calcul des composantes du champ magnetique total en coordonnees | ||
204 | +c*FON spheriques puis conversion en coordonnees cartesiennes. | ||
205 | +c --------------------------------------------------------------- | ||
206 | +c | ||
207 | + br = bri + bre | ||
208 | + bt = bti + bte | ||
209 | + bp = bpi + bpe | ||
210 | +c | ||
211 | + call vspvcar(thetr,phir,br,bt,bp,bxt,byt,bzt,ier4) | ||
212 | +c | ||
213 | + bt = sqrt(bxt*bxt + byt*byt + bzt*bzt) | ||
214 | +c | ||
215 | +c ------------------------------------- | ||
216 | +c*FON Calcul des pas elementaires sur x,y,z | ||
217 | +c ------------------------------------- | ||
218 | +c | ||
219 | + rxp1 = ds3 * bxt / bt | ||
220 | + rxp2 = ds3 * byt / bt | ||
221 | + rxp3 = ds3 * bzt / bt | ||
222 | +c | ||
223 | +c **************** | ||
224 | +c Fin de programme | ||
225 | +c **************** | ||
226 | +c | ||
227 | + return | ||
228 | + end |
maglib/src/getmag.f
@@ -100,21 +100,34 @@ c*FON by the geomagnetic calculations for the given year | @@ -100,21 +100,34 @@ c*FON by the geomagnetic calculations for the given year | ||
100 | c -------------------------------------------------- | 100 | c -------------------------------------------------- |
101 | 101 | ||
102 | c | 102 | c |
103 | - call inigeom(iyear,imonth,iday,ihour,imin,isec,year,alfag, | 103 | + if (iyear .ge. 2000) then |
104 | + call inigeom(iyear,imonth,iday,ihour,imin,isec,year,alfag, | ||
104 | > tetdip,phidip,alfas,deltas,rig,rgi,rgdip,rdipg, | 105 | > tetdip,phidip,alfas,deltas,rig,rgi,rgdip,rdipg, |
105 | > rgsm,rsmg,tilt,rggsm,rgsmg,rgse,rseg,rigsm,rgsmi, | 106 | > rgsm,rsmg,tilt,rggsm,rgsmg,rgse,rseg,rigsm,rgsmi, |
106 | > ifail) | 107 | > ifail) |
107 | 108 | ||
108 | -c ------------------------------------------------------------- | ||
109 | -c*FON Calculation of the position of the point in the magnetosphere | ||
110 | -c ------------------------------------------------------------- | ||
111 | -c | ||
112 | -c | ||
113 | call posmag(magout,isatex,year,rrmag,thetr,phir,alfag, | 109 | call posmag(magout,isatex,year,rrmag,thetr,phir,alfag, |
114 | > alfas,deltas,tilt,rgsm,rggsm,rgsmg,rgdip,rgse, | 110 | > alfas,deltas,tilt,rgsm,rggsm,rgsmg,rgdip,rgse, |
115 | > tetdip,phidip,xgsm,ygsm,zgsm,xgse,ygse,zgse,tgl, | 111 | > tetdip,phidip,xgsm,ygsm,zgsm,xgse,ygse,zgse,tgl, |
116 | > flg,xlamb,tglc,hsl,clatgmr,clongmr,iposmg,ifail) | 112 | > flg,xlamb,tglc,hsl,clatgmr,clongmr,iposmg,ifail) |
117 | 113 | ||
114 | + else | ||
115 | + call inigeomv(iyear,imonth,iday,ihour,imin,isec,year,alfag, | ||
116 | + > tetdip,phidip,alfas,deltas,rig,rgi,rgdip,rdipg, | ||
117 | + > rgsm,rsmg,tilt,rggsm,rgsmg,rgse,rseg,rigsm,rgsmi, | ||
118 | + > ifail) | ||
119 | + | ||
120 | + call posmagv(magout,isatex,year,rrmag,thetr,phir,alfag, | ||
121 | + > alfas,deltas,tilt,rgsm,rggsm,rgsmg,rgdip,rgse, | ||
122 | + > tetdip,phidip,xgsm,ygsm,zgsm,xgse,ygse,zgse,tgl, | ||
123 | + > flg,xlamb,tglc,hsl,clatgmr,clongmr,iposmg,ifail) | ||
124 | + | ||
125 | + endif | ||
126 | + | ||
127 | +c ------------------------------------------------------------- | ||
128 | +c*FON Calculation of the position of the point in the magnetosphere | ||
129 | +c ------------------------------------------------------------- | ||
130 | +c | ||
118 | 131 | ||
119 | c return | 132 | c return |
120 | 133 |
@@ -0,0 +1,144 @@ | @@ -0,0 +1,144 @@ | ||
1 | + subroutine inmagv (magin,year,rre,thet,phi,bri,bti,bpi,bi,ier) | ||
2 | +c* | ||
3 | +c*********************************************************************** | ||
4 | +c* | ||
5 | +c* "Copyright [c] CNES 98 - tous droits reserves" | ||
6 | +c* ********************************************** | ||
7 | +c* | ||
8 | +c*PRO MAGLIB | ||
9 | +c* | ||
10 | +c*VER 99.03.31 - V 1.0 | ||
11 | +c*VER 01.05.30 - V 2.0 | ||
12 | +c*VER 03.01.06 - V 2.1 | ||
13 | +c*VER 01.01.07 - V 3.0 | ||
14 | +c*VER 13.10.10 - V 4.0 | ||
15 | +c*VER 17.02.24 - V 5.0 | ||
16 | +c*VER 20.07.15 - V 6.0 | ||
17 | +c* | ||
18 | +c*AUT spec. CNES - JC KOSIK - juin 1995 | ||
19 | +c*AUT port. CISI | ||
20 | +c*AUT adapt. AKKA | ||
21 | +c* | ||
22 | +c*ROL Theme : Calculs de geophysique | ||
23 | +c*ROL Calcul du champ magnetique d'origine interne. | ||
24 | +c* | ||
25 | +c*PAR magin (I) : type de champ magnetique interne | ||
26 | +c* | ||
27 | +c*PAR year (I) : annee fractionnaire (>= 1945. pour magin = 2 ; | ||
28 | +c*PAR : >= 1970. pour magin = 3) | ||
29 | +c* | ||
30 | +c*PAR rre (I) : distance radiale geocentrique (rayons terrestres) | ||
31 | +c*PAR thet (I) : colatitude geocentrique (radians) | ||
32 | +c*PAR phi (I) : longitude geocentrique (radians) | ||
33 | +c* | ||
34 | +c*PAR bri (O) : composante radiale du champ magnetique le long du | ||
35 | +c* : meridien positive vers l'exterieur (gauss) | ||
36 | +c*PAR bti (O) : composante tangentielle du champ magnetique le long | ||
37 | +c*PAR : du meridien positive vers le sud (gauss) | ||
38 | +c*PAR bp (O) : composante azimuthale du champ magnetique, positive | ||
39 | +c*PAR : vers l'est (gauss) | ||
40 | +c* | ||
41 | +c*PAR bi (O) : module du champ (gauss) | ||
42 | +c* | ||
43 | +c*PAR ier (O) : code de retour | ||
44 | +c* | ||
45 | +c*NOT magin : 1 = dipole + g11 + h11 | ||
46 | +c*NOT magin : 2 = champ DGRF 1945-1970 | ||
47 | +c*NOT magin : 3 = champ DGRF 1970-1995 | ||
48 | +c* | ||
49 | +c*NOT ier : sans objet | ||
50 | +c* | ||
51 | +c*INF utilise : dipol, dgrf45_70, dgrf70_95 | ||
52 | +c* | ||
53 | +c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP | ||
54 | +c*HST version 2.0 - 01.05.30 - correction de commentaires de code | ||
55 | +c*HST version 2.1 - 03.01.06 - corrections en compilation avec g77 | ||
56 | +c*HST version 3.0 - 01.01.07 - utilisation du champ 2005 | ||
57 | +c*HST version 4.0 - 13.10.10 - Introduction du champ igrf10 et | ||
58 | +c*HST passage de igrf05 a dgrf05 | ||
59 | +c*HST version 5.0 - 17.02.24 - Introduction du champ igrf15 et | ||
60 | +c*HST passage de igrf10 a dgrf10 | ||
61 | +c*HST version 6.0 - 20.07.15 - Introduction du champ igrf20 et | ||
62 | +c*HST passage de igrf15 a dgrf15 | ||
63 | +c* | ||
64 | +c*********************************************************************** | ||
65 | +c* | ||
66 | + implicit none | ||
67 | +c | ||
68 | +c --------------------------------- | ||
69 | +c*FON Declaration identificateur rcs_id | ||
70 | +c --------------------------------- | ||
71 | +c | ||
72 | + character rcs_id*100 | ||
73 | +c | ||
74 | +c -------------------------- | ||
75 | +c*FON Declaration des parametres | ||
76 | +c -------------------------- | ||
77 | +c | ||
78 | + integer magin | ||
79 | + double precision year | ||
80 | + double precision rre, thet, phi | ||
81 | + double precision bri, bti, bpi, bi | ||
82 | + integer ier | ||
83 | +c | ||
84 | +c --------------------------------- | ||
85 | +c*FON Declaration des variables locales | ||
86 | +c --------------------------------- | ||
87 | +c | ||
88 | + integer ier1,ier2,ier3 | ||
89 | +c*LOC ier1,ier2,ier3 : codes retour des modules appeles | ||
90 | +c | ||
91 | + SAVE | ||
92 | +c | ||
93 | +c --------------------------------- | ||
94 | +c*FON Affectation identificateur rcs_id | ||
95 | +c --------------------------------- | ||
96 | +c | ||
97 | + data rcs_id /" | ||
98 | + >$Id$"/ | ||
99 | +c | ||
100 | +c ****************** | ||
101 | +c Debut de programme | ||
102 | +c ****************** | ||
103 | +c | ||
104 | + ier = 0 | ||
105 | + ier1 = 0 | ||
106 | + ier2 = 0 | ||
107 | + ier3 = 0 | ||
108 | +c | ||
109 | +c ------------------------------------ | ||
110 | +c*FON Calcul du champ (dipole + g11 + h11) | ||
111 | +c ------------------------------------ | ||
112 | +c | ||
113 | + if (magin .eq. 1) then | ||
114 | +c | ||
115 | + call dipol(year,rre,thet,phi,bri,bti,bpi,bi,ier1) | ||
116 | +c | ||
117 | +c ------------------------- | ||
118 | +c*FON Calcul du champ DGRF 2000 | ||
119 | +c ------------------------- | ||
120 | +c | ||
121 | + else if (magin .eq. 2) then | ||
122 | +c | ||
123 | + call dgrf45_70(year,rre,thet,phi,bri,bti,bpi,bi,ier2) | ||
124 | +c | ||
125 | +c ------------------------- | ||
126 | +c*FON Calcul du champ DGRF 2005 | ||
127 | +c ------------------------- | ||
128 | +c | ||
129 | + else if (magin .eq. 3) then | ||
130 | +c | ||
131 | + call dgrf70_95(year,rre,thet,phi,bri,bti,bpi,bi,ier2) | ||
132 | +c | ||
133 | + else if(magin .eq. 4) then | ||
134 | +c | ||
135 | + call dgrf95(year,rre,thet,phi,bri,bti,bpi,bi,ier2) | ||
136 | +c | ||
137 | + endif | ||
138 | +c | ||
139 | +c **************** | ||
140 | +c Fin de programme | ||
141 | +c **************** | ||
142 | +c | ||
143 | + return | ||
144 | + end |
@@ -0,0 +1,199 @@ | @@ -0,0 +1,199 @@ | ||
1 | + subroutine magtotv (magin,year,magout,indgm,indval,tilt,rggsm, | ||
2 | + > rgsmg,rre,thet,phi,br,bt,bp,bb,ier) | ||
3 | +c* | ||
4 | +c*********************************************************************** | ||
5 | +c* | ||
6 | +c* "Copyright [c] CNES 98 - tous droits reserves" | ||
7 | +c* ********************************************** | ||
8 | +c* | ||
9 | +c*PRO MAGLIB | ||
10 | +c* | ||
11 | +c*VER 99.03.31 - V 1.0 | ||
12 | +c*VER 01.05.30 - V 2.0 | ||
13 | +c*VER 03.01.06 - V 2.1 | ||
14 | +c*VER 01.01.07 - V 3.0 | ||
15 | +c*VER 13.10.10 - V 4.0 | ||
16 | +c*VER 17.02.24 - V 5.0 | ||
17 | +c*VER 20.07.16 - V 6.0 | ||
18 | +c* | ||
19 | +c*AUT spec. CNES - JC KOSIK - juin 1995 | ||
20 | +c*AUT port. CISI | ||
21 | +c*AUT adapt. AKKA | ||
22 | +c* | ||
23 | +c*ROL Theme : Calculs de geophysique | ||
24 | +c*ROL Calcul du champ magnetique total en un point. | ||
25 | +c*ROL Ce champ est la combinaison possible d'un champ dipole | ||
26 | +c*ROL ou complet et d'un champ externe, ici Tsyganenko. | ||
27 | +c* | ||
28 | +c*PAR magin (I) : type de champ magnetique interne | ||
29 | +c* | ||
30 | +c*PAR year (I) : annee fractionnaire (>= 1945.) | ||
31 | +c* | ||
32 | +c*PAR magout (I) : type de champ magnetique externe | ||
33 | +c* | ||
34 | +c*PAR indgm (I) : type d'indice geomagnetique Kp ou Ae | ||
35 | +c*PAR indval (I) : indice geomagnetique : niveau d'amplitude du champ | ||
36 | +c* | ||
37 | +c*PAR tilt (I) : angle de tilt (radians) | ||
38 | +c* | ||
39 | +c*PAR rggsm (I) : matrice (3,3) de passage du repere geocentrique | ||
40 | +c*PAR : au repere magnetospherique | ||
41 | +c* | ||
42 | +c*PAR rgsmg (I) : matrice (3,3) de passage du repere solaire | ||
43 | +c*PAR : magnetospherique au repere geocentrique | ||
44 | +c* | ||
45 | +c*PAR rre (I) : distance radiale geocentrique (rayons terrestres) | ||
46 | +c*PAR thet (I) : colatitude geocentrique (radians) | ||
47 | +c*PAR phi (I) : longitude geocentrique (radians) | ||
48 | +c* | ||
49 | +c*PAR br (O) : composante radiale du champ total (gauss) | ||
50 | +c*PAR bt (O) : composante tangentielle du champ total (gauss) | ||
51 | +c*PAR bp (O) : composante azimuthale du champ total (gauss) | ||
52 | +c* | ||
53 | +c*PAR bb (O) : module du champ magnetique total (gauss) | ||
54 | +c*PAR ier (O) : code de retour | ||
55 | +c* | ||
56 | +c*NOT magin : 1 = dipole + g11 + h11 | ||
57 | +c*NOT magin : 2 = champ DGRF 1945-1970 | ||
58 | +c*NOT magin : 3 = champ DGRF 1970-1995 | ||
59 | +c* | ||
60 | +c*NOT magout : 0 = pas de champ externe | ||
61 | +c*NOT magout : 1 = Tsyganenko 87 | ||
62 | +c*NOT magout : 2 = Tsyganenko 89 | ||
63 | +c*NOT magout : 3 = Kosik 97 | ||
64 | +c* | ||
65 | +c*NOT indgm : 1 ---> indice geomagnetique Kp | ||
66 | +c*NOT indval : 1 ---> Kp = 0 , 0+ | ||
67 | +c*NOT indval : 2 ---> Kp = 1- , 1 , 1+ | ||
68 | +c*NOT indval : 3 ---> Kp = 2- , 2 , 2+ | ||
69 | +c*NOT indval : 4 ---> Kp = 3- , 3 , 3+ | ||
70 | +c*NOT indval : 5 ---> Kp = 4- , 4 , 4+ | ||
71 | +c*NOT indval : 6 ---> Kp > 5- | ||
72 | +c* | ||
73 | +c*NOT indgm : 2 ---> indice geomagnetique Ae | ||
74 | +c*NOT indval : 1 ---> Ae = 0 - 50 | ||
75 | +c*NOT indval : 2 ---> Ae = 50 - 100 | ||
76 | +c*NOT indval : 3 ---> Ae = 100 - 150 | ||
77 | +c*NOT indval : 4 ---> Ae = 150 - 250 | ||
78 | +c*NOT indval : 5 ---> Ae = 250 - 400 | ||
79 | +c*NOT indval : 6 ---> Ae >= 400 | ||
80 | +c* | ||
81 | +c*NOT ier : sans objet | ||
82 | +c* | ||
83 | +c*INF utilise : inmag, outma1 | ||
84 | +c* | ||
85 | +c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP | ||
86 | +c*HST version 2.0 - 01.05.30 - Ajout indice Kosik 97 | ||
87 | +c*HST version 2.1 - 03.01.06 - corrections en compilation avec g77 | ||
88 | +c*HST version 3.0 - 01.01.07 - utilisation du champ 2005 | ||
89 | +c*HST version 4.0 - 13.10.10 - Introductiondu champ IGRF10 et | ||
90 | +c*HST passage de IGRF05 a DGRF05 | ||
91 | +c*HST version 5.0 - 17.02.24 - Introduction du champ IGRF15 et | ||
92 | +c*HST passage de IGRF10 a DGRF10 | ||
93 | +c*HST version 5.0 - 20.07.16 - Introduction du champ IGRF20 et | ||
94 | +c*HST passage de IGRF15 a DGRF15 | ||
95 | +* | ||
96 | +c*********************************************************************** | ||
97 | +c* | ||
98 | + implicit none | ||
99 | +c | ||
100 | +c --------------------------------- | ||
101 | +c*FON Declaration identificateur rcs_id | ||
102 | +c --------------------------------- | ||
103 | +c | ||
104 | + character rcs_id*100 | ||
105 | +c | ||
106 | +c -------------------------- | ||
107 | +c*FON Declaration des parametres | ||
108 | +c -------------------------- | ||
109 | +c | ||
110 | + integer magin | ||
111 | + double precision year | ||
112 | + integer magout, indgm, indval | ||
113 | + double precision tilt | ||
114 | + double precision rggsm(3,3), rgsmg(3,3) | ||
115 | + double precision rre, thet, phi | ||
116 | + double precision br, bt, bp, bb | ||
117 | + integer ier | ||
118 | +c | ||
119 | +c --------------------------------- | ||
120 | +c*FON Declaration des variables locales | ||
121 | +c --------------------------------- | ||
122 | +c | ||
123 | + integer ier1,ier2 | ||
124 | +c*LOC ier1,ier2 : codes retour des modules appeles | ||
125 | +c | ||
126 | + double precision bpe,bre,bte | ||
127 | +c*LOC bpe,bre,bte : composantes radiale, tangentielle et azimuthale du champ | ||
128 | +c* : externe | ||
129 | +c | ||
130 | + double precision bpi,bri,bti | ||
131 | +c*LOC bpi,bri,bti : composantes radiale, tangentielle et azimuthale du champ | ||
132 | +c* : interne | ||
133 | +c | ||
134 | + double precision bi | ||
135 | +c*LOC bi : module du champ | ||
136 | +c | ||
137 | + SAVE | ||
138 | +c | ||
139 | +c --------------------------------- | ||
140 | +c*FON Affectation identificateur rcs_id | ||
141 | +c --------------------------------- | ||
142 | +c | ||
143 | + data rcs_id /" | ||
144 | + >$Id$"/ | ||
145 | +c | ||
146 | +c ****************** | ||
147 | +c Debut de programme | ||
148 | +c ****************** | ||
149 | +c | ||
150 | + ier = 0 | ||
151 | + ier1 = 0 | ||
152 | + ier2 = 0 | ||
153 | +c | ||
154 | +c -------------------------------------------- | ||
155 | +c*FON Initialisation a 0. des composantes du champ | ||
156 | +c -------------------------------------------- | ||
157 | +c | ||
158 | + bre = 0.d0 | ||
159 | + bte = 0.d0 | ||
160 | + bpe = 0.d0 | ||
161 | +c | ||
162 | + bri = 0.d0 | ||
163 | + bti = 0.d0 | ||
164 | + bpi = 0.d0 | ||
165 | +c | ||
166 | + if (magin .ne. 0) then | ||
167 | +c | ||
168 | +c -------------------------------------------- | ||
169 | +c*FON Calcul du champ magnetique d'origine interne | ||
170 | +c -------------------------------------------- | ||
171 | +c | ||
172 | + call inmagv(magin,year,rre,thet,phi,bri,bti,bpi,bi,ier1) | ||
173 | +c | ||
174 | + endif | ||
175 | +c | ||
176 | +c -------------------------------------------- | ||
177 | +c*FON Calcul du champ magnetique d'origine externe | ||
178 | +c -------------------------------------------- | ||
179 | +c | ||
180 | + if (magout .ne. 0) then | ||
181 | + call outma1(magout,indgm,indval,tilt,rggsm,rgsmg, | ||
182 | + > rre,thet,phi,bre,bte,bpe,ier2) | ||
183 | + endif | ||
184 | +c | ||
185 | +c -------------------------------- | ||
186 | +c*FON Calcul du champ magnetique total | ||
187 | +c -------------------------------- | ||
188 | +c | ||
189 | + br = bri + bre | ||
190 | + bt = bti + bte | ||
191 | + bp = bpi + bpe | ||
192 | + bb = sqrt(br * br + bt * bt + bp * bp) | ||
193 | +c | ||
194 | +c **************** | ||
195 | +c Fin de programme | ||
196 | +c **************** | ||
197 | +c | ||
198 | + return | ||
199 | + end |
maglib/src/posmag.f
@@ -30,7 +30,7 @@ c*PAR magout (I) : type de champ magnetique externe | @@ -30,7 +30,7 @@ c*PAR magout (I) : type de champ magnetique externe | ||
30 | c* | 30 | c* |
31 | c*PAR isatex (I) : type de satellite | 31 | c*PAR isatex (I) : type de satellite |
32 | c* | 32 | c* |
33 | -c*PAR year (I) : annee fractionnaire >= 2005 | 33 | +c*PAR year (I) : annee fractionnaire >= 2000 |
34 | c* | 34 | c* |
35 | c*PAR rre (I) : distance radiale geocentrique (rayons terrestres) | 35 | c*PAR rre (I) : distance radiale geocentrique (rayons terrestres) |
36 | c*PAR thetr (I) : colatitude geocentrique (radians) | 36 | c*PAR thetr (I) : colatitude geocentrique (radians) |
@@ -325,10 +325,39 @@ c | @@ -325,10 +325,39 @@ c | ||
325 | c | 325 | c |
326 | c ------------------------------------------------------ | 326 | c ------------------------------------------------------ |
327 | c*FON Calcul du point conjugue situe dans le meme hemisphere | 327 | c*FON Calcul du point conjugue situe dans le meme hemisphere |
328 | -c*FON magin = 3 = champ IGRF 2005 | 328 | +c*NOT magin : 2 = champ DGRF 2000 |
329 | +c*NOT magin : 3 = champ DGRF 2005 | ||
330 | +c*NOT magin : 4 = champ DGRF 2010 | ||
331 | +c*NOT magin : 5 = champ DGRF 2015 | ||
332 | +c*NOT magin : 6 = champ IGRF 2020 | ||
333 | + | ||
329 | c ------------------------------------------------------ | 334 | c ------------------------------------------------------ |
330 | c | 335 | c |
331 | - magin = 3 | 336 | + if (year .ge. 2000 .and. year .lt. 2005) then |
337 | +c | ||
338 | + magin = 2 | ||
339 | +c | ||
340 | + else if (year .ge. 2005 .and. year .lt. 2010) then | ||
341 | +c | ||
342 | + magin = 3 | ||
343 | +c | ||
344 | + else if (year .ge. 2010 .and. year .lt. 2015) then | ||
345 | +c | ||
346 | + magin = 4 | ||
347 | +c | ||
348 | + else if (year .ge. 2015 .and. year .lt. 2020) then | ||
349 | +c | ||
350 | + magin = 5 | ||
351 | +c | ||
352 | + else if (year .ge. 2020) then | ||
353 | +c | ||
354 | + magin = 6 | ||
355 | +c | ||
356 | + else | ||
357 | + ier = 1 | ||
358 | + endif | ||
359 | +c | ||
360 | +c | ||
332 | indgm = 1 | 361 | indgm = 1 |
333 | indval = 3 | 362 | indval = 3 |
334 | rb = 11.d0 | 363 | rb = 11.d0 |
@@ -0,0 +1,481 @@ | @@ -0,0 +1,481 @@ | ||
1 | + subroutine posmagv (magout,isatex,year,rre,thetr,phir,alfag,alfas, | ||
2 | + > deltas,tilt,rgsm,rggsm,rgsmg,rgdip,rgse, | ||
3 | + > tetdip,phidip,xgsm,ygsm,zgsm,xgse,ygse,zgse, | ||
4 | + > tgl,flg,xlamb,tglc,hsl,clatgm,clongm, | ||
5 | + > iposmg,ier) | ||
6 | +c* | ||
7 | +c*********************************************************************** | ||
8 | +c* | ||
9 | +c* "Copyright [c] CNES 98 - tous droits reserves" | ||
10 | +c* ********************************************** | ||
11 | +c* | ||
12 | +c*PRO MAGLIB | ||
13 | +c* | ||
14 | +c*VER 99.03.31 - V 1.0 | ||
15 | +c*VER 01.05.30 - V 2.0 | ||
16 | +c*VER 03.01.06 - V 2.1 | ||
17 | +c*VER 01.01.07 - V 3.0 | ||
18 | +c* | ||
19 | +c*AUT spec. CNES - JC KOSIK - janvier 1991 | ||
20 | +c*AUT port. CISI | ||
21 | +c* | ||
22 | +c*ROL Theme : Frontieres et regions | ||
23 | +c*ROL Calcul de la position d'un satellite dans la magnetosphere | ||
24 | +c*ROL par rapport aux differentres regions. | ||
25 | +c*ROL Calcul aussi des parametres essentiels tgl, L et mlt, | ||
26 | +c*ROL et des coordonnees dans divers systemes d axes. | ||
27 | +c*ROL L'indicateur de positionnement iposmg est renseigne. | ||
28 | +c* | ||
29 | +c*PAR magout (I) : type de champ magnetique externe | ||
30 | +c* | ||
31 | +c*PAR isatex (I) : type de satellite | ||
32 | +c* | ||
33 | +c*PAR year (I) : annee fractionnaire >= 2005 | ||
34 | +c* | ||
35 | +c*PAR rre (I) : distance radiale geocentrique (rayons terrestres) | ||
36 | +c*PAR thetr (I) : colatitude geocentrique (radians) | ||
37 | +c*PAR phir (I) : longitude geocentrique (radians) | ||
38 | +c* | ||
39 | +c*PAR alfag (I) : ascension droite de Greenwich (radians) | ||
40 | +c*PAR alfas (I) : ascension droite du soleil (radians) | ||
41 | +c*PAR deltas (I) : declinaison du soleil (radians) | ||
42 | +c* | ||
43 | +c*PAR tilt (I) : angle de tilt (radians) | ||
44 | +c* | ||
45 | +c*PAR rgsm (I) : matrice de passage du repere geographique au | ||
46 | +c*PAR : repere solaire magnetique | ||
47 | +c* | ||
48 | +c*PAR rggsm (I) : matrice de passage du repere geographique au | ||
49 | +c*PAR : repere solaire magnetospherique | ||
50 | +c*PAR rgsmg (I) : matrice de passage du repere magnetospherique | ||
51 | +c*PAR : au repere geographique | ||
52 | +c* | ||
53 | +c*PAR rgdip (I) : matrice (3,3) de passage du repere geographique | ||
54 | +c*PAR : au repere dipolaire | ||
55 | +c* | ||
56 | +c*PAR rgse (I) : matrice de passage du repere geographique | ||
57 | +c*PAR : au repere solaire ecliptique | ||
58 | +c* | ||
59 | +c*PAR tetdip (I) : colatitude geocentrique du dipole (radians) | ||
60 | +c*PAR phidip (I) : longitude geocentrique du dipole (radians) | ||
61 | +c* | ||
62 | +c*PAR xgsm (O) : coordonnee solaire magnetospherique en x (rayons terrestres) | ||
63 | +c*PAR ygsm (O) : coordonnee solaire magnetospherique en y (rayons terrestres) | ||
64 | +c*PAR zgsm (O) : coordonnee solaire magnetospherique en z (rayons terrestres) | ||
65 | +c* | ||
66 | +c*PAR xgse (O) : coordonnee solaire ecliptique en x (rayons terrestres) | ||
67 | +c*PAR ygse (O) : coordonnee solaire ecliptique en y (rayons terrestres) | ||
68 | +c*PAR zgse (O) : coordonnee solaire ecliptique en z (rayons terrestres) | ||
69 | +c* | ||
70 | +c*PAR tgl (O) : temps geomagnetique local du satellite | ||
71 | +c* : (heures fractionnaires) | ||
72 | +c*PAR flg (O) : parametre L de Galperin | ||
73 | +c*PAR xlamb (O) : latitude invariante (radians) | ||
74 | +c* | ||
75 | +c*PAR tglc (O) : temps geomagnetique local du point conjugue | ||
76 | +c* : (heures fractionnaires) | ||
77 | +c* | ||
78 | +c*PAR hsl (O) : hauteur de l'ombre (kilometres) | ||
79 | +c* | ||
80 | +c*PAR clatgm (O) : latitude geomagnetique (radians) | ||
81 | +c*PAR clongm (O) : longitude geomagnetique (radians) | ||
82 | +c*PAR iposmg (O) : tableau (dim=15) des indicateurs de positions | ||
83 | +c* | ||
84 | +c*PAR ier (O) : code de retour | ||
85 | +c* | ||
86 | +c*NOT magout : 0 = pas de champ externe | ||
87 | +c*NOT magout : 1 = Tsyganenko 87 | ||
88 | +c*NOT magout : 2 = Tsyganenko 89 | ||
89 | +c*NOT magout : 3 = kosik 97 | ||
90 | +c* | ||
91 | +c*NOT isatex : 0 = satellite proche (apogee < 8. r. terre.) | ||
92 | +c*NOT isatex : 1 = satellite excentrique (apogee > 8. r. terre.) | ||
93 | +c* | ||
94 | +c*NOT iposmg : 1 = le satellite appartient a la region | ||
95 | +c*NOT iposmg : 0 = le satellite n'appartient pas a la region | ||
96 | +c* | ||
97 | +c*NOT iposmg(1) : calotte polaire | ||
98 | +c*NOT iposmg(2) : ovale auroral | ||
99 | +c*NOT iposmg(3) : cusp | ||
100 | +c*NOT iposmg(4) : zone auroral diffuse | ||
101 | +c*NOT iposmg(5) : ceinture de Van Allen pour xbelt = 6. | ||
102 | +c*NOT iposmg(6) : plasmasphere | ||
103 | +c*NOT iposmg(7) : couche neutre | ||
104 | +c*NOT iposmg(8) : couche de plasma | ||
105 | +c*NOT iposmg(9) : magnetosphere | ||
106 | +c*NOT iposmg(10) : magnetopause | ||
107 | +c*NOT iposmg(11) : magnetogaine | ||
108 | +c*NOT iposmg(12) : onde de choc | ||
109 | +c*NOT iposmg(13) : vent solaire | ||
110 | +c*NOT iposmg(14) : ombre de la terre (satellite auroral) | ||
111 | +c*NOT iposmg(15) : ceinture de Van Allen pour xbelt = 3.5 | ||
112 | +c* | ||
113 | +c*NOT ier : sans objet | ||
114 | +c* | ||
115 | +c*NOT common : util | ||
116 | +c* | ||
117 | +c*INF utilise : spcar, geogsm, tgml, geose, bwshff, mpsib, msheath | ||
118 | +c*INF utilise : dconjr, invar, invlat, ggeom, oval, calpol, cusp | ||
119 | +c*INF utilise : gussen, rbelt, chapel, cahsl, posnsh, pospsh | ||
120 | +c* | ||
121 | +c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP | ||
122 | +c*HST version 2.0 - 01.05.30 - correction de commentaires de code | ||
123 | +c*HST version 2.1 - 03.01.06 - corrections en compilation avec g77 | ||
124 | +c*HST version 3.0 - 01.01.07 - utilisation du champ IGRF 2005 | ||
125 | +c* | ||
126 | +c*********************************************************************** | ||
127 | +c* | ||
128 | + implicit none | ||
129 | +c | ||
130 | +c --------------------------------- | ||
131 | +c*FON Declaration identificateur rcs_id | ||
132 | +c --------------------------------- | ||
133 | +c | ||
134 | + character rcs_id*100 | ||
135 | +c | ||
136 | +c -------------------------- | ||
137 | +c*FON Declaration des parametres | ||
138 | +c -------------------------- | ||
139 | +c | ||
140 | + integer magout, isatex | ||
141 | + double precision year | ||
142 | + double precision rre, thetr, phir | ||
143 | + double precision alfag, alfas, deltas, tilt | ||
144 | + double precision rgsm(3,3), rggsm(3,3), rgsmg(3,3) | ||
145 | + double precision rgdip(3,3), rgse(3,3) | ||
146 | + double precision tetdip, phidip | ||
147 | + double precision tr(500), tthet(500), tphi(500) | ||
148 | + double precision xgsm, ygsm, zgsm | ||
149 | + double precision xgse, ygse, zgse | ||
150 | + double precision tgl, flg, xlamb, tglc, hsl | ||
151 | + double precision clatgm, clongm | ||
152 | + integer iposmg(15) | ||
153 | + double precision znsh | ||
154 | + integer ier | ||
155 | +c | ||
156 | +c ---------------------------------- | ||
157 | +c*FON Declaration des variables communes | ||
158 | +c ---------------------------------- | ||
159 | +c | ||
160 | + double precision pi,dpi,rad,deg,pid,xmu,rayt | ||
161 | +c | ||
162 | +c*COM pi : constante pi (obtenue a partir de acos(-1.)) | ||
163 | +c*COM dpi : constante 2 * pi | ||
164 | +c*COM pid : constante pi / 2 | ||
165 | +c*COM rad : facteur de conversion degres ----> radians | ||
166 | +c*COM deg : facteur de conversion radians ----> degres | ||
167 | +c*COM xmu : constante de gravitation terrestre (km**3/sec**2) | ||
168 | +c*COM rayt : rayon equatorial terrestre (km) | ||
169 | +c | ||
170 | + common/util/pi,dpi,rad,deg,pid,xmu,rayt | ||
171 | +c | ||
172 | +c --------------------------------- | ||
173 | +c*FON Declaration des variables locales | ||
174 | +c --------------------------------- | ||
175 | +c | ||
176 | + integer imagn,ibwsh,imp,isheath,isolw,ioval,ipol | ||
177 | + integer icusp,iguss,iallen,ichapp,ihsl,insh,ipsh | ||
178 | +c*LOC Indicateurs d'appartenance aux zones | ||
179 | +c | ||
180 | + integer i | ||
181 | +c*LOC i : indice de boucle | ||
182 | +c | ||
183 | + integer magin | ||
184 | +c*LOC magin : type de champ magnetique interne (= 2 : DGRF45_70; 3 : DGRF70_95) | ||
185 | +c | ||
186 | + integer indgm | ||
187 | +c*LOC indgm : type d'indice geomagnetique (=1 : Kp) | ||
188 | +c | ||
189 | + integer indval | ||
190 | +c*LOC indval : indice geomagnetique : niveau d'amplitude du champ (1 a 6) | ||
191 | +c | ||
192 | + integer np | ||
193 | +c*LOC np : nombre de points calcules | ||
194 | +c | ||
195 | + integer ier1,ier2,ier3,ier4,ier5,ier6,ier7,ier9 | ||
196 | + integer ier10,ier11,ier12,ier13,ier14,ier15,ier16 | ||
197 | + integer ier17,ier18,ier19 | ||
198 | +c*LOC ier1 a ier19 : codes retour des modules appeles | ||
199 | +c | ||
200 | + double precision rmagc,thetc,phic | ||
201 | +c*LOC rmagc,thetc,phic : coordonnees spheriques | ||
202 | +c* | ||
203 | + double precision xmag,ymag,zmag | ||
204 | +c*LOC xmag,ymag,zmag : composantes cartesiennes en x, y et z | ||
205 | +c | ||
206 | + double precision xbelt | ||
207 | +c*LOC xbelt : valeur de la limite externe de la ceinture | ||
208 | +c | ||
209 | + double precision rfin,rmax | ||
210 | +c*LOC rfin,rmax : distances geocentriques d'arret et maximum autorisee | ||
211 | +c | ||
212 | + double precision dir | ||
213 | +c*LOC dir : direction du trace des lignes de champ | ||
214 | +c | ||
215 | + double precision rb | ||
216 | +c*LOC rb : distance subsolaire de la magnetopause | ||
217 | +c | ||
218 | + SAVE | ||
219 | +c | ||
220 | +c --------------------------------- | ||
221 | +c*FON Affectation identificateur rcs_id | ||
222 | +c --------------------------------- | ||
223 | +c | ||
224 | + data rcs_id /" | ||
225 | + >$Id$"/ | ||
226 | +c | ||
227 | +c ****************** | ||
228 | +c Debut de programme | ||
229 | +c ****************** | ||
230 | +c | ||
231 | + ier = 0 | ||
232 | + ier1 = 0 | ||
233 | + ier2 = 0 | ||
234 | + ier3 = 0 | ||
235 | + ier4 = 0 | ||
236 | + ier5 = 0 | ||
237 | + ier6 = 0 | ||
238 | + ier7 = 0 | ||
239 | + ier9 = 0 | ||
240 | + ier10 = 0 | ||
241 | + ier11 = 0 | ||
242 | + ier12 = 0 | ||
243 | + ier13 = 0 | ||
244 | + ier14 = 0 | ||
245 | + ier15 = 0 | ||
246 | + ier16 = 0 | ||
247 | + ier17 = 0 | ||
248 | + ier18 = 0 | ||
249 | + ier19 = 0 | ||
250 | +c | ||
251 | +c -------------------------------------------------- | ||
252 | +c*FON Mise a 0 du tableau d'indicateur de positionnement | ||
253 | +c*FON Initialisations de valeurs par defaut | ||
254 | +c -------------------------------------------------- | ||
255 | +c | ||
256 | + do 10 i = 1, 15 | ||
257 | + iposmg(i) = 0 | ||
258 | +10 continue | ||
259 | +c | ||
260 | +c dans tous les cas mais surtout pour satellites auroraux : | ||
261 | + iposmg(9) = 1 | ||
262 | +c | ||
263 | + tgl = 999.0d0 | ||
264 | + flg = 999.0d0 | ||
265 | + xlamb = 999.0d0 * rad | ||
266 | + tglc = 999.0d0 | ||
267 | + clatgm = 999.0d0 * rad | ||
268 | + clongm = 999.0d0 * rad | ||
269 | +c | ||
270 | +c ------------------------------------------------- | ||
271 | +c*FON Calcul des coordonnees solaires magnetospheriques | ||
272 | +c ------------------------------------------------- | ||
273 | +c | ||
274 | + call spcar(rre,thetr,phir,xmag,ymag,zmag,ier1) | ||
275 | +c | ||
276 | + call geogsm(rggsm,xmag,ymag,zmag,xgsm,ygsm,zgsm,ier2) | ||
277 | +c | ||
278 | +c --------------------------------------------------- | ||
279 | +c*FON Calcul du temps geomagnetique local du satellite tgl | ||
280 | +c --------------------------------------------------- | ||
281 | +c | ||
282 | + call tgml(rgsm,thetr,phir,tgl,ier3) | ||
283 | +c | ||
284 | +c ------------------------------------------ | ||
285 | +c*FON Calcul des coordonnees solaire-ecliptiques | ||
286 | +c ------------------------------------------ | ||
287 | +c | ||
288 | + call geose(rgse,xmag,ymag,zmag,xgse,ygse,zgse,ier4) | ||
289 | +c | ||
290 | +c -------------------------------------------------------- | ||
291 | +c*FON Si nosat est superieur a 2, verification si le satellite | ||
292 | +c*FON Appartient a la magnetosphere de sibeck | ||
293 | +c -------------------------------------------------------- | ||
294 | +c | ||
295 | + imagn = 1 | ||
296 | +c | ||
297 | + if (isatex .eq. 1) then | ||
298 | +c | ||
299 | +c --------------------------------------------------------------- | ||
300 | +c*FON Calcul de la position par rapport a l onde de choc de Fairfield | ||
301 | +c*FON et la magnetopause de Sibeck | ||
302 | +c --------------------------------------------------------------- | ||
303 | +c | ||
304 | + call bwshff(xgsm,ygsm,zgsm,ibwsh,ier5) | ||
305 | +c | ||
306 | + if (ibwsh .eq. 1) then | ||
307 | + iposmg(12) = ibwsh | ||
308 | + endif | ||
309 | +c | ||
310 | + call mpsib(xgsm,ygsm,zgsm,imp,ier6) | ||
311 | +c | ||
312 | + if (imp .eq. 1) then | ||
313 | + iposmg(10) = imp | ||
314 | + endif | ||
315 | +c | ||
316 | + call msheath (xgsm,ygsm,zgsm,imagn,isheath,isolw,ier7) | ||
317 | +c | ||
318 | + iposmg(13) = isolw | ||
319 | + iposmg(11) = isheath | ||
320 | + iposmg(9) = imagn | ||
321 | +c | ||
322 | + endif | ||
323 | +c | ||
324 | + if (imagn .eq. 1) then | ||
325 | +c | ||
326 | +c ------------------------------------------------------ | ||
327 | +c*FON Calcul du point conjugue situe dans le meme hemisphere | ||
328 | +c*NOT magin : 1 = dipole + g11 + h11 | ||
329 | +c*NOT magin : 2 = champ DGRF 1945-1970 | ||
330 | +c*NOT magin : 3 = champ DGRF 1970-1995 | ||
331 | +c*NOT magin : 4 = champ DGRF 1995-2000 | ||
332 | + | ||
333 | +c ------------------------------------------------------ | ||
334 | +c | ||
335 | +c | ||
336 | + if (year .ge. 1945 .and. year .lt. 1970) then | ||
337 | +c | ||
338 | + magin = 2 | ||
339 | +c | ||
340 | + else if (year .ge. 1970 .and. year .lt. 1995) then | ||
341 | +c | ||
342 | + magin = 3 | ||
343 | +c | ||
344 | + else if (year .ge. 1995 .and. year .lt. 2000) then | ||
345 | +c | ||
346 | + magin = 4 | ||
347 | +c | ||
348 | + else | ||
349 | + ier = 1 | ||
350 | + endif | ||
351 | + | ||
352 | + | ||
353 | + indgm = 1 | ||
354 | + indval = 3 | ||
355 | + rb = 11.d0 | ||
356 | + rfin = 1.d0 | ||
357 | + rmax = 40.d0 | ||
358 | + dir = -1.d0 | ||
359 | +c | ||
360 | + call dconjrv(magin,year,magout,indgm,indval,tilt,rb,rggsm, | ||
361 | + > rgsmg,dir,rre,thetr,phir,rfin,rmax,np,tr, | ||
362 | + > tthet,tphi,ier1) | ||
363 | +c | ||
364 | + if (ier1 .eq. 0) then | ||
365 | +c | ||
366 | + rmagc = tr(np) | ||
367 | + thetc = tthet(np) | ||
368 | + phic = tphi(np) | ||
369 | +c | ||
370 | + call invar(rmagc,thetc,phic,flg,ier2) | ||
371 | +c | ||
372 | + call invlat(flg,xlamb,ier3) | ||
373 | +c | ||
374 | +c --------------------------------------- | ||
375 | +c*FON Calcul d appartenance a l ovale auroral | ||
376 | +c --------------------------------------- | ||
377 | +c | ||
378 | +c ---------------------------------------------------------- | ||
379 | +c*FON Calcul des coordonnees geomagnetiques et mlt (appele tglc) | ||
380 | +c*FON du pied de la ligne de champ passant par le satellite | ||
381 | +c ---------------------------------------------------------- | ||
382 | +c | ||
383 | + call ggeom(rgdip,thetc,phic,clatgm,clongm,ier9) | ||
384 | + call tgml(rgsm,thetc,phic,tglc,ier10) | ||
385 | + | ||
386 | + call oval(tglc,clatgm,ioval,ier11) | ||
387 | + call calpol(tglc,clatgm,ipol,ier12) | ||
388 | +c | ||
389 | +c ------------------------------------------- | ||
390 | +c*FON Calcul de la position par rapport a la CUSP | ||
391 | +c ------------------------------------------- | ||
392 | +c | ||
393 | + call cusp(clatgm,tglc,icusp,ier13) | ||
394 | +c | ||
395 | +c ------------------------------------------------------ | ||
396 | +c*FON Calcul de la frontiere sud de la zone aurorale diffuse | ||
397 | +c ------------------------------------------------------ | ||
398 | +c | ||
399 | + call gussen(tglc,xlamb,iguss,ier14) | ||
400 | +c | ||
401 | + iposmg(1) = ipol | ||
402 | + iposmg(2) = ioval | ||
403 | + iposmg(3) = icusp | ||
404 | + iposmg(4) = iguss | ||
405 | +c | ||
406 | + endif | ||
407 | +c | ||
408 | +c ------------------------------------------------------- | ||
409 | +c*FON Si le satellite est a moins de 7 rayons terrestres..... | ||
410 | +c ------------------------------------------------------- | ||
411 | +c | ||
412 | + if (rre .lt. 7.d0) then | ||
413 | +c | ||
414 | +c ------------------------------------------------ | ||
415 | +c*FON Calcul d appartenance a la ceinture de Van Allen | ||
416 | +c ------------------------------------------------ | ||
417 | +c | ||
418 | +c Ceinture a 3.5 r. terr. | ||
419 | +c ----------------------- | ||
420 | +c | ||
421 | + xbelt = 3.5d0 | ||
422 | + call rbelt(xbelt,tetdip,phidip,rre,thetr, | ||
423 | + + phir,iallen,ier15) | ||
424 | + iposmg(15) = iallen | ||
425 | +c | ||
426 | +c Ceinture a 6.0 r. terr. | ||
427 | +c ----------------------- | ||
428 | +c | ||
429 | + xbelt = 6.d0 | ||
430 | + call rbelt(xbelt,tetdip,phidip,rre,thetr, | ||
431 | + + phir,iallen,ier15) | ||
432 | + iposmg(5) = iallen | ||
433 | +c | ||
434 | +c --------------------------------------------------- | ||
435 | +c*FON Calcul d appartenance a la plasmasphere de Chappell | ||
436 | +c --------------------------------------------------- | ||
437 | +c | ||
438 | + call chapel(tgl,flg,ichapp,ier16) | ||
439 | + iposmg(6) = ichapp | ||
440 | +c | ||
441 | +c -------------------------------------------------------- | ||
442 | +c*FON Calcul de la distance du satellite a l ombre de la terre | ||
443 | +c -------------------------------------------------------- | ||
444 | +c | ||
445 | + call cahsl(alfag,alfas,deltas,rre,thetr,phir, | ||
446 | + + hsl,ihsl,ier17) | ||
447 | + iposmg(14) = ihsl | ||
448 | +c | ||
449 | + endif | ||
450 | +c | ||
451 | + endif | ||
452 | +c | ||
453 | +c ----------------------------------------------------------------- | ||
454 | +c*FON Calcul de la distance a la couche neutre et a la couche de plasma | ||
455 | +c*FON si satellite excentrique et xgsm inferieur a -9 rt | ||
456 | +c ----------------------------------------------------------------- | ||
457 | +c | ||
458 | + if (isatex .eq. 1 .and. xgsm .le. -9.d0) then | ||
459 | +c | ||
460 | +c ---------------------------------------------------- | ||
461 | +c*FON Calcul de la position par rapport a la couche neutre | ||
462 | +c ---------------------------------------------------- | ||
463 | +c | ||
464 | + call posnsh(tilt,xgsm,ygsm,zgsm,insh,znsh,ier18) | ||
465 | + iposmg(7) = insh | ||
466 | +c | ||
467 | +c ------------------------------------------------------- | ||
468 | +c*FON Calcul de la position par rapport a la couche de plasma | ||
469 | +c ------------------------------------------------------- | ||
470 | +c | ||
471 | + call pospsh(tilt,xgsm,ygsm,zgsm,ipsh,ier19) | ||
472 | + iposmg(8) = ipsh | ||
473 | +c | ||
474 | + endif | ||
475 | +c | ||
476 | +c **************** | ||
477 | +c Fin de programme | ||
478 | +c **************** | ||
479 | +c | ||
480 | + return | ||
481 | + end |
@@ -0,0 +1,236 @@ | @@ -0,0 +1,236 @@ | ||
1 | + subroutine stepv (magin,magout,indgm,indval,year,tilt, | ||
2 | + > rggsm,rgsmg,x,y,z,ds,errin,ier) | ||
3 | +c* | ||
4 | +c*********************************************************************** | ||
5 | +c* | ||
6 | +c* "Copyright [c] CNES 98 - tous droits reserves" | ||
7 | +c* ********************************************** | ||
8 | +c* | ||
9 | +c*PRO MAGLIB | ||
10 | +c* | ||
11 | +c*VER 99.03.31 - V 1.0 | ||
12 | +c*VER 01.05.30 - V 2.0 | ||
13 | +c*VER 03.01.06 - V 2.1 | ||
14 | +c*VER 01.01.07 - V 3.0 | ||
15 | +c* | ||
16 | +c*AUT spec. CNES - JC KOSIK - avril 1996 | ||
17 | +c*AUT port. CISI | ||
18 | +c* | ||
19 | +c*ROL Theme : Calculs de geophysique | ||
20 | +c*ROL Calcul d'un pas elementaire de la ligne de champ par la | ||
21 | +c*ROL methode d'integration de Runge Kutta a pas varaiable et | ||
22 | +c*ROL les coefficients de Merson. | ||
23 | +c* | ||
24 | +c*PAR magin (I) : type de champ magnetique interne | ||
25 | +c*PAR magout (I) : type de champ magnetique externe | ||
26 | +c* | ||
27 | +c*PAR indgm (I) : type d'indice geomagnetique Kp ou Ae | ||
28 | +c*PAR indval (I) : indice geomagnetique : niveau d'amplitude du champ | ||
29 | +c* | ||
30 | +c*PAR year (I) : annee fractionnaire (>= 2000.) | ||
31 | +c* | ||
32 | +c*PAR tilt (I) : angle de tilt (radians) | ||
33 | +c* | ||
34 | +c*PAR rggsm (I) : matrice de passage du repere geographique au | ||
35 | +c*PAR : repere solaire magnetospherique | ||
36 | +c*PAR rgsmg (I) : matrice de passage du repere solaire | ||
37 | +c*PAR : magnetospherique au repere geographique | ||
38 | +c* | ||
39 | +c*PAR x (I/O) : coordonnee geocentrique en x | ||
40 | +c*PAR y (I/O) : coordonnee geocentrique en y | ||
41 | +c*PAR z (I/O) : coordonnee geocentrique en z | ||
42 | +c* | ||
43 | +c*PAR ds (I) : pas elementaire d'integration | ||
44 | +c* | ||
45 | +c*PAR errin (I) : erreur maximale permise lors de l'integration | ||
46 | +c* | ||
47 | +c*PAR ier (O) : code retour | ||
48 | +c* | ||
49 | +c*NOT magin : 1 = dipole + g11 + h11 | ||
50 | +c*NOT magin : 2 = champ DGRF 1945-1970 | ||
51 | +c*NOT magin : 3 = champ DGRF 1970-1995 | ||
52 | +c* | ||
53 | +c*NOT magout : 0 = pas de champ externe | ||
54 | +c*NOT magout : 1 = Tsyganenko 87 | ||
55 | +c*NOT magout : 2 = Tsyganenko 89 | ||
56 | +c*NOT magout : 3 = Kosik 97 | ||
57 | +c* | ||
58 | +c*NOT indgm : 1 ---> indice geomagnetique Kp | ||
59 | +c*NOT indval : 1 ---> Kp = 0 , 0+ | ||
60 | +c*NOT indval : 2 ---> Kp = 1- , 1 , 1+ | ||
61 | +c*NOT indval : 3 ---> Kp = 2- , 2 , 2+ | ||
62 | +c*NOT indval : 4 ---> Kp = 3- , 3 , 3+ | ||
63 | +c*NOT indval : 5 ---> Kp = 4- , 4 , 4+ | ||
64 | +c*NOT indval : 6 ---> Kp > 5- | ||
65 | +c* | ||
66 | +c*NOT indgm : 2 ---> indice geomagnetique Ae | ||
67 | +c*NOT indval : 1 ---> Ae = 0 - 50 | ||
68 | +c*NOT indval : 2 ---> Ae = 50 - 100 | ||
69 | +c*NOT indval : 3 ---> Ae = 100 - 150 | ||
70 | +c*NOT indval : 4 ---> Ae = 150 - 250 | ||
71 | +c*NOT indval : 5 ---> Ae = 250 - 400 | ||
72 | +c*NOT indval : 6 ---> Ae >= 400 | ||
73 | +c* | ||
74 | +c*NOT La division par 3 du pas, permet des coefficients plus simples. | ||
75 | +c* | ||
76 | +c*INF utilise : deriv | ||
77 | +c* | ||
78 | +c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP | ||
79 | +c*HST version 2.0 - 01.05.30 - correction de commentaires de code | ||
80 | +c*HST version 2.1 - 03.01.06 - corrections en compilation avec g77 | ||
81 | +c*HST version 3.0 - 01.01.07 - extension au champ IGRF 2005 | ||
82 | +c* | ||
83 | +c*********************************************************************** | ||
84 | +c* | ||
85 | + implicit none | ||
86 | +c | ||
87 | +c --------------------------------- | ||
88 | +c*FON Declaration identificateur rcs_id | ||
89 | +c --------------------------------- | ||
90 | +c | ||
91 | + character rcs_id*100 | ||
92 | +c | ||
93 | +c -------------------------- | ||
94 | +c*FON Declaration des parametres | ||
95 | +c -------------------------- | ||
96 | +c | ||
97 | + integer magin, magout, indgm, indval | ||
98 | + double precision year | ||
99 | + double precision tilt | ||
100 | + double precision rggsm(3,3), rgsmg(3,3) | ||
101 | + double precision x, y, z | ||
102 | + double precision ds | ||
103 | + double precision errin | ||
104 | + integer ier | ||
105 | +c | ||
106 | +c --------------------------------- | ||
107 | +c*FON Declaration des variables locales | ||
108 | +c --------------------------------- | ||
109 | +c | ||
110 | + double precision r11,r12,r13 | ||
111 | +c*LOC r11,r12,r13 : pas elementaires sur x, y et z (aux points x, y et z) | ||
112 | +c | ||
113 | + double precision x2,y2,z2 | ||
114 | +c*LOC x2,y2,z2 : coordonnees cartesiennes du point au 2eme pas | ||
115 | +c | ||
116 | + double precision r21,r22,r23 | ||
117 | +c*LOC r21,r22,r23 : pas elementaires sur x, y et z (aux points x2, y2 et z2) | ||
118 | +c | ||
119 | + double precision x3,y3,z3 | ||
120 | +c*LOC x3,y3,z3 : coordonnees cartesiennes du point au 3eme pas | ||
121 | +c | ||
122 | + double precision r31,r32,r33 | ||
123 | +c*LOC r31,r32,r33 : pas elementaires sur x, y et z (aux points x3, y3 et z3) | ||
124 | +c | ||
125 | + double precision x4,y4,z4 | ||
126 | +c*LOC x4,y4,z4 : coordonnees cartesiennes du point au 3eme pas | ||
127 | +c | ||
128 | + double precision r41,r42,r43 | ||
129 | +c*LOC r41,r42,r43 : pas elementaires sur x, y et z (aux points x4, y4 et z4) | ||
130 | +c | ||
131 | + double precision x5,y5,z5 | ||
132 | +c*LOC x5,y5,z5 : coordonnees cartesiennes du point au 5eme pas | ||
133 | +c | ||
134 | + double precision r51,r52,r53 | ||
135 | +c*LOC r51,r52,r53 : pas elementaires sur x, y et z (aux points x5, y5 et z5) | ||
136 | +c | ||
137 | + double precision ds3,errcur | ||
138 | +c*LOC Variables de travail intermediaires | ||
139 | +c | ||
140 | + SAVE | ||
141 | +c | ||
142 | +c --------------------------------- | ||
143 | +c*FON Affectation identificateur rcs_id | ||
144 | +c --------------------------------- | ||
145 | +c | ||
146 | + data rcs_id /" | ||
147 | + >$Id$"/ | ||
148 | +c | ||
149 | +c ****************** | ||
150 | +c Debut de programme | ||
151 | +c ****************** | ||
152 | +c | ||
153 | + ier = 0 | ||
154 | +c | ||
155 | +10 continue | ||
156 | +c | ||
157 | + ds3 = ds / 3.d0 | ||
158 | +c | ||
159 | +c ---------------------------------------------------------- | ||
160 | +c*FON 1er appel au sous programme de calcul des pas elementaires | ||
161 | +c ---------------------------------------------------------- | ||
162 | +c | ||
163 | + call derivv(magin,magout,indgm,indval,year,tilt, | ||
164 | + > rggsm,rgsmg,ds3,x,y,z,r11,r12,r13,ier) | ||
165 | +c | ||
166 | + x2 = x + r11 | ||
167 | + y2 = y + r12 | ||
168 | + z2 = z + r13 | ||
169 | +c | ||
170 | +c ------------------------------------------------------------ | ||
171 | +c*FON 2ieme appel au sous programme de calcul des pas elementaires | ||
172 | +c ------------------------------------------------------------ | ||
173 | +c | ||
174 | + call derivv(magin,magout,indgm,indval,year,tilt, | ||
175 | + > rggsm,rgsmg,ds3,x2,y2,z2,r21,r22,r23,ier) | ||
176 | +c | ||
177 | + x3 = x + .5d0 * (r11 + r21) | ||
178 | + y3 = y + .5d0 * (r12 + r22) | ||
179 | + z3 = z + .5d0 * (r13 + r23) | ||
180 | +c | ||
181 | +c ------------------------------------------------------------ | ||
182 | +c*FON 3ieme appel au sous programme de calcul des pas elementaires | ||
183 | +c ------------------------------------------------------------ | ||
184 | +c | ||
185 | + call derivv(magin,magout,indgm,indval,year,tilt, | ||
186 | + > rggsm,rgsmg,ds3,x3,y3,z3,r31,r32,r33,ier) | ||
187 | +c | ||
188 | + x4 = x +.375d0 * (r11 + 3.d0 * r31) | ||
189 | + y4 = y +.375d0 * (r12 + 3.d0 * r32) | ||
190 | + z4 = z +.375d0 * (r13 + 3.d0 * r33) | ||
191 | +c | ||
192 | +c ------------------------------------------------------------ | ||
193 | +c*FON 4ieme appel au sous programme de calcul des pas elementaires | ||
194 | +c ------------------------------------------------------------ | ||
195 | +c | ||
196 | + call derivv(magin,magout,indgm,indval,year,tilt, | ||
197 | + > rggsm,rgsmg,ds3,x4,y4,z4,r41,r42,r43,ier) | ||
198 | +c | ||
199 | + x5 = x + 1.5d0 * (r11 -3.d0 * r31 + 4.d0 * r41) | ||
200 | + y5 = y + 1.5d0 * (r12 -3.d0 * r32 + 4.d0 * r42) | ||
201 | + z5 = z + 1.5d0 * (r13 -3.d0 * r33 + 4.d0 * r43) | ||
202 | +c | ||
203 | +c ------------------------------------------------------------ | ||
204 | +c*FON 5ieme appel au sous programme de calcul des pas elementaires | ||
205 | +c ------------------------------------------------------------ | ||
206 | +c | ||
207 | + call derivv(magin,magout,indgm,indval,year,tilt, | ||
208 | + > rggsm,rgsmg,ds3,x5,y5,z5,r51,r52,r53,ier) | ||
209 | +c | ||
210 | + errcur = abs(r11 - 4.5d0 * r31 + 4.d0 * r41 -.5d0 * r51) + | ||
211 | + > abs(r12 - 4.5d0 * r32 + 4.d0 * r42 -.5d0 * r52) + | ||
212 | + > abs(r13 - 4.5d0 * r33 + 4.d0 * r43 -.5d0 * r53) | ||
213 | +c | ||
214 | +c ------------------------------- | ||
215 | +c*FON Test sur la precision de calcul | ||
216 | +c ------------------------------- | ||
217 | +c | ||
218 | + if (errcur .lt. errin) then | ||
219 | + x = x + .5d0 * (r11 + 4.d0 * r41 + r51) | ||
220 | + y = y + .5d0 * (r12 + 4.d0 * r42 + r52) | ||
221 | + z = z + .5d0 * (r13 + 4.d0 * r43 + r53) | ||
222 | + else | ||
223 | + ds = ds * .5d0 | ||
224 | + goto 10 | ||
225 | + endif | ||
226 | +c | ||
227 | + if (errcur.lt. errin * .04d0 .and. abs(ds) .lt. 1.33d0) then | ||
228 | + ds = ds * 1.5d0 | ||
229 | + endif | ||
230 | +c | ||
231 | +c **************** | ||
232 | +c Fin de programme | ||
233 | +c **************** | ||
234 | +c | ||
235 | + return | ||
236 | + end |