subroutine dbtot (indval,tilt,rggsm,rgsmg,xgsm,ygsm,zgsm,db,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* c*AUT spec. CNES - JC KOSIK - juillet 1998 c*AUT port. CISI c* c*ROL Theme : Modeles de champs magnetiques c*ROL Calcul d'une courbe de niveau Db dans le plan midi-minuit c*ROL Les courbes de niveau db donnent l'ecart b total - b dipole c*ROL en nanoteslas. c* c*PAR indval (I) : indice geomagnetique : niveau d'amplitude du champ (1 a 6) 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 xgsm (I) : coordonnee solaire magnetospherique x (rayons terrestres) c*PAR ygsm (I) : coordonnee solaire magnetospherique y (rayons terrestres) c*PAR zgsm (I) : coordonnee solaire magnetospherique z (rayons terrestres) c* c*PAR db (O) : courbe de niveau de champ magnetique (nanoteslas) c* c*PAR ier (O) : code de retour c* c*NOT ier : sans objet c* c*NOT common : sans objet c* c*INF utilise : mpauses, magtots 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* 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 indval double precision tilt double precision rggsm(3,3), rgsmg(3,3) double precision xgsm, ygsm, zgsm, db integer ier c c --------------------------------- c*FON Declaration des variables locales c --------------------------------- c integer ier1,ier2 c*LOC ier1,ier2 : codes retour des modules appeles c double precision r,thet,phi c*LOC r,thet,phi : coordonnees spheriques c double precision bxt,byt,bzt c*LOC bxt,byt,bzt : coordonnees solaires magnetospheriques x,y et z du champ c double precision bt c*LOC bt : composante tangentielle du champ total c double precision bi c*LOC bi : module 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 ier = 0 c c ------------------------------------------------------ c*FON calcul de la difference db entre le champ total et le c*FON champ dipolaire c ------------------------------------------------------ c c ------------------------------------------- c*FON calcul des coordonnees spheriques thet, phi c ------------------------------------------- c r = dsqrt(xgsm * xgsm + zgsm * zgsm) ier1 = 0 ier2 = 0 c c --------------------------------------- c*FON le calcul n'est pas effectue pour r < 1 c --------------------------------------- c if (r .le. 1.d0) ier1 = 1 c c ------------------------------------------------------------- c*FON le calcul n'est pas effectue a l'exterieur de la magnetopause c*FON de Shabansky c ------------------------------------------------------------- c call mpauses(r,thet,phi,ier2) c c --------------------------------------------- c*FON calcul en dehors de ces 2 cas, sinon db = 999 c --------------------------------------------- c if (ier1 .eq. 0 .and. ier2 .eq. 0) then c c ------------------------------------------- c*FON calcul des coordonnees spheriques thet, phi c ------------------------------------------- c thet = dacos(zgsm / r) ygsm = 0.d0 if (xgsm .ne. 0.d0) then phi = datan2(ygsm,xgsm) else phi = 0.d0 endif c c ------------------------------------------- c*FON calcul du champ total et du champ dipolaire c ------------------------------------------- c call magtots(indval,tilt,rggsm,rgsmg,xgsm,ygsm,zgsm, > bxt,byt,bzt,bt,bi,ier) db = bt - bi else if (ier1 .eq. 1 .or. ier2 .eq. 1) then db = 999.d0 endif c c **************** c Fin de programme c **************** c return end