carmel.f 3.98 KB
      subroutine carmel (bb,xi,vl,beq,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.01 - V 2.0
c*VER 03.01.06 - V 2.1
c*
c*AUT spec. Mac Ilwain
c*AUT adap. CNES - JC KOSIK - janvier 1991
c*AUT port. CISI
c*
c*ROL Theme : Calculs de geophysique
c*ROL         Calcul du parametre L de Mac Ilwain a partir de I.
c*
c*PAR bb  (I) : module du champ magnetique (gauss)
c*
c*PAR xi  (I) : valeur de l'invariant I
c*
c*PAR vl  (O) : valeur de L
c*
c*PAR beq (O) : module du champ magnetique a l'equateur (gauss)
c*
c*PAR ier (O) : code de retour
c*
c*NOT ier     : sans objet
c*
c*INF utilise : sans objet
c*
c*HST version 1.0 - 99.03.31 - creation de la maglib au CDPP
c*HST version 2.0 - 01.06.01 - 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
      double precision bb, xi
      double precision vl, beq
      integer ier
c
c     ---------------------------------
c*FON Declaration des variables locales
c     ---------------------------------
c
      double precision xx,gg
c*LOC Variables de travail intermediaires
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 valeur de gg
c     -------------------------
c
      xx = log(((xi**3) * bb) / 0.311653d0)
c
      if (xx + 22.d0 .gt. 0.d0) then
c
         if (xx + 3.d0 .gt. 0.d0) then
c
            if (xx - 3.d0 .gt. 0.d0) then
c
               if (xx - 12.d0 .gt. 0.d0) then
c
                  if (xx - 23.d0 .gt. 0.d0) then
                     gg = xx - 3.0460681d0
                  else
                     gg = (((((2.8212095d-8 * xx - 3.8049276d-6)
     >                  * xx + 2.170224d-4) * xx - 6.7310339d-3)
     >                  * xx + .12038224d0) * xx - .18461796d0)
     >                  * xx + 2.0007187d0
                  endif
c
               else
                  gg = ((((((((6.3271665d-10 * xx - 3.958306d-8)
     >               * xx+9.9766148d-07) * xx -
     >               1.2531932d-5) * xx + 7.9451313d-5) * xx
     >               -3.2077032d-4) * xx + 2.1680398d-3)*
     >               xx + 1.2817956d-2) * xx + .43510529d0)
     >               * xx + .6222355d0
               endif
c
            else
               gg = ((((((((2.6047023d-10 * xx + 2.3028767d-9)
     >            * xx - 2.1997983d-8) * xx-
     >            5.3977642d-7) * xx - 3.3408822d-6) * xx +
     >            3.8379917d-5) * xx + 1.1784234d-3) *
     >            xx + 1.4492441d-2) * xx + .43352788d0)
     >            * xx + .6228644d0
            endif
c
         else
            gg = ((((((((-8.1537735d-14 * xx + 8.3232531d-13)
     >         * xx + 1.0066362d-9) * xx +
     >         8.1048663d-8) * xx + 3.2916354d-6) * xx +
     >         8.2711096d-5) * xx + 1.3714667d-3) *
     >         xx + .015017245d0) * xx + .43432642d0)
     >         * xx + .62337691d0
         endif
c
      else
         gg = .333338d0 * xx + 3.0062102d0
      endif
c
c     ----------------------------------------------
c*FON Calcul de la valeur du L et du module du champ
c     ----------------------------------------------
c
      vl  = (((1.0d0 + exp(gg)) * 0.311653d0) / bb)**(1.d0 / 3.d0)
c
      beq = 1.0d0 + exp(gg)
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end