subroutine deriv (magin,magout,indgm,indval,year,tilt, > rggsm,rgsmg,ds3,xgc,ygc,zgc,rxp1,rxp2, > rxp3,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.05.30 - V 2.0 c*VER 03.01.06 - V 2.1 c*VER 01.01.07 - V 3.0 c*VER 13.10.10 - V 4.0 c*VER 2017.02.23 - V 5.0 c* c*AUT spec. CNES - JC KOSIK - avril 1996 c*AUT port. CISI c*AUT adpat. AKKA c* c*ROL Theme : Calculs de geophysique c*ROL Calcul des pas elementaires rxp1,rxp2,rxp3 au point c*ROL courant xgc,ygc,zgc. c* c*PAR magin (I) : type de champ magnetique interne c*PAR magout (I) : type de champ magnetique externe c* c*PAR indgm (I) : type d'indice geomagnetique Kp ou Ae c*PAR indval (I) : indice geomagnetique : niveau d'amplitude du champ c* c*PAR year (I) : annee fractionnaire (>= 2000.) c* c*PAR tilt (I) : angle de tilt (radians) c* c*PAR rggsm (I) : matrice de passage du repere geographique au c*PAR : repere solaire magnetospherique c*PAR rgsmg (I) : matrice de passage du repere solaire c*PAR : magnetospherique au repere geographique c* c*PAR ds3 (I) : pas elementaire d'integration c* c*PAR xgc (I) : coordonnee geocentrique en x c*PAR ygc (I) : coordonnee geocentrique en y c*PAR zgc (I) : coordonnee geocentrique en z c* c*PAR rxp1 (O) : pas elementaire sur x (au point xgc) c*PAR rxp2 (O) : pas elementaire sur y (au point ygc) c*PAR rxp3 (O) : pas elementaire sur z (au point zgc) c* c*PAR ier (O) : code de retour c* c*NOT magin : 1 = dipole + g11 + h11 c*NOT magin : 2 = champ DGRF 2000 c*NOT magin : 3 = champ DGRF 2005 c*NOT magin : 4 = champ DGRF 2010 c*NOT magin : 5 = champ IGRF 2015 c* c*NOT magout : 0 = pas de champ externe c*NOT magout : 1 = Tsyganenko 87 c*NOT magout : 2 = Tsyganenko 89 c*NOT magout : 3 = Kosik 97 c* c*NOT indgm : 1 ---> indice geomagnetique Kp c*NOT indval : 1 ---> Kp = 0 , 0+ c*NOT indval : 2 ---> Kp = 1- , 1 , 1+ c*NOT indval : 3 ---> Kp = 2- , 2 , 2+ c*NOT indval : 4 ---> Kp = 3- , 3 , 3+ c*NOT indval : 5 ---> Kp = 4- , 4 , 4+ c*NOT indval : 6 ---> Kp > 5- c* c*NOT indgm : 2 ---> indice geomagnetique Ae c*NOT indval : 1 ---> Ae = 0 - 50 c*NOT indval : 2 ---> Ae = 50 - 100 c*NOT indval : 3 ---> Ae = 100 - 150 c*NOT indval : 4 ---> Ae = 150 - 250 c*NOT indval : 5 ---> Ae = 250 - 400 c*NOT indval : 6 ---> Ae >= 400 c* c*NOT On utilise la formule generale dx/ds = bx/b c*NOT ou ds est le pas elementaire le long de la ligne de champ, b le c*NOT champ total, dx est la composante de ds suivant l'axe x et bx c*NOT la composante du champ suivant ce meme axe. c* c*INF utilise : carsp, inmag, outma1, vspvcar c* c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP c*HST version 2.0 - 01.05.30 - correction de commentaires de code c*HST version 2.1 - 03.01.06 - corrections en compilation avec g77 c*HST version 3.0 - 01.01.07 - mise a jour des modeles de champ interne c*HST version 4.0 - 13.10.10 - mise a jour des modeles de champ interne c*HST (DGRF05 et IGRF10) c*HST version 5.0 - 2017.02.23 - mise a jour des modeles de champ interne c*HST (DGRF10 et IGRF15) 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 indgm,indval,magin,magout double precision year double precision tilt double precision rggsm(3,3), rgsmg(3,3) double precision ds3 double precision xgc, ygc, zgc double precision rxp1, rxp2, rxp3 integer ier c c --------------------------------- c*FON Declaration des variables locales c --------------------------------- c integer ier1,ier2,ier3,ier4 c*LOC ier1,ier2,ier3,ier4 : codes retour des modules appeles c double precision rre,thetr,phir c*LOC rre,thetr,phir : coordonnees spheriques c double precision bre,bte,bpe c*LOC bre,bte,bpe : composantes radiale, tangentielle et azimuthale du champ c*LOC : d'origine externe c double precision bri,bti,bpi c*LOC bri,bti,bpi : composantes radiale, tangentielle et azimuthale du champ c*LOC : d'origine interne c double precision br,bt,bp c*LOC br,bt,bp : composantes radiale, tangentielle et azimuthale du champ total c double precision bi c*LOC bi : module du champ c double precision bxt,byt,bzt c*LOC bxt,byt,bzt : coordonnees solaires magnetospheriques x,y et z du champ c SAVE c c --------------------------------- c*FON Affectation identificateur rcs_id c --------------------------------- c data rcs_id /" >$Id$"/ c c ****************** c Debut de programme c ****************** c c ----------------------------------- c*FON Initialisations des codes de retour c ----------------------------------- c ier = 0 ier1 = 0 ier2 = 0 ier3 = 0 ier4 = 0 c c --------------------------------------------------- c*FON Initialisations des composantes du champ magnetique c --------------------------------------------------- c bre = 0.d0 bte = 0.d0 bpe = 0.d0 c bri = 0.d0 bti = 0.d0 bpi = 0.d0 c c ---------------------------------------------------------------------- c*FON Transformation des coordonnees geocentriques en coordonnees spheriques c ---------------------------------------------------------------------- c call carsp (xgc,ygc,zgc,rre,thetr,phir,ier1) c c -------------------------------------------- c*FON Calcul du champ magnetique d'origine interne c -------------------------------------------- c call inmag(magin,year,rre,thetr,phir,bri,bti,bpi,bi,ier2) c c -------------------------------------------- c*FON Calcul du champ magnetique d'origine externe c -------------------------------------------- c call outma1(magout,indgm,indval,tilt,rggsm,rgsmg, > rre,thetr,phir,bre,bte,bpe,ier3) c c --------------------------------------------------------------- c*FON Calcul des composantes du champ magnetique total en coordonnees c*FON spheriques puis conversion en coordonnees cartesiennes. c --------------------------------------------------------------- c br = bri + bre bt = bti + bte bp = bpi + bpe c call vspvcar(thetr,phir,br,bt,bp,bxt,byt,bzt,ier4) c bt = sqrt(bxt*bxt + byt*byt + bzt*bzt) c c ------------------------------------- c*FON Calcul des pas elementaires sur x,y,z c ------------------------------------- c rxp1 = ds3 * bxt / bt rxp2 = ds3 * byt / bt rxp3 = ds3 * bzt / bt c c **************** c Fin de programme c **************** c return end