derivv.f 7.17 KB
      subroutine derivv (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 17.02.23 - V 5.0
c*VER 20.07.15 - V 6.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 1945-1970
c*NOT magin      : 3 = champ DGRF 1970-1995
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 - 17.02.23 - mise a jour des modeles de champ interne
c*HST                          (DGRF10 et IGRF15)
c*HST version 6.0 - 20.07.15 - mise a jour des modeles de champ interne
c*HST                          (DGRF15 et IGRF20)
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 inmagv(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