ctrlpar.f 7.33 KB
      subroutine ctrlpar (itypda,datjul,iyear,imonth,iday,ihour,imin,
     >                    isec,magin,magout,indgm,indval,iunitr,
     >                    rr,theta,phi,ierdat,ierind,ierdis,ierpos)
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 - janvier 1991
c*AUT port. CISI
c*AUT adpat. AKKA
c*
c*ROL Theme : Modules de controle
c*ROL         Controle des donnees en entree des modules de calcul.
c*ROL         Validite de la date sous forme julienne ou calendaire
c*ROL           julienne   : date >= 14610.0
c*ROL           calendaire : prise en compte des annees bisextiles
c*ROL                        annee >= 1990
c*ROL                        1 <= mois     <= 12
c*ROL                        1 <= jour     <= 28 29 30 31
c*ROL                        0 <= heures   <= 24
c*ROL                        0 <= minutes  <= 59
c*ROL                        0 <= secondes <= 59
c*ROL         Validite de magin  1 <= magin  <= 6
c*ROL         Validite de magout 0 <= magout <= 3
c*ROL         Validite de indgm  1 <= indgm  <= 2
c*ROL         Validite de indval 1 <= indval <= 6
c*ROL         Validite de r (r >= 1 r.g.m ou >= 6371.2 km)
c*ROL         Validite de theta (0 <= theta <= pi)
c*ROL         Validite de phi  (0 <=  phi  <= 2*pi)
c*ROL         Controle de la position du satellite par rapport a la
c*ROL         magnetosphere (1=en dehors 0=dans la magnetosphere)
c*
c*PAR itypda (I) : type de date (0 = julienne, 1 = calendaire)
c*
c*PAR datjul (I) : date julienne fractionnaire (depuis le 01/01/1950)
c*
c*PAR iyear  (I) : annee
c*PAR imonth (I) : mois
c*PAR iday   (I) : jour
c*PAR ihour  (I) : heure 
c*PAR imin   (I) : minutes
c*PAR isec   (I) : secondes
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 iunitr (I) : unite de la distance rr
c*               : (0 = kilometres , 1 = rayons terrestres)
c*
c*PAR rr     (I) : distance (dans l'unite iunitr)
c*PAR theta  (I) : angle theta (radians)
c*PAR phi    (I) : angle phi (radians)
c*
c*PAR ierdat (O) : indicateur de validite de la date
c*
c*PAR ierind (O) : indicateur de validite des indicateurs de champ
c*
c*PAR ierdis (O) : indicateur de validite des coordonnees satellite
c*
c*PAR ierpos (O) : indicateur de position du satellite par rapport a
c*PAR ierpos     : la magnetopause
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 DGRF 2015
c*NOT magin      : 6 = champ IGRF 2020
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 dates     : si date julienne choisie, mettre a 0 les parametres
c*NOT dates     : concernant la date calendaire et reciproquement 
c*
c*NOT ier(xxx)  : 0 = OK 
c*   
c*NOT ierdat    : 1 = date incorrecte (ex : jour = 34)
c*NOT ierdat    : 2 = warning - date < 1990 (valide pour gsfc65)
c*NOT ierind    : 1 = indicateurs de calcul des champs incorrects
c*NOT ierdis    : 1 = coordonnees du satellite (r theta phi) incorrectes
c*NOT ierpos    : 1 = satellite en dehors de la magnetosphere 
c*
c*INF utilise   : ctrldat, ctrlind, ctrldis, ctrlpos
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 models de champ interne
c*HST version 4.0 - 13.10.10 - mise a jour des models de champ interne
c*                             (DGRF05 et IGRF10)
c*HST version 5.0 - 17.02.23 - mise a jour des modeles de champ interne
c*                             (DGRF10 et IGRF15)
c*HST version 6.0 - 20.07.15 - mise a jour des modeles de champ interne
c*                             (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 itypda
      double precision datjul
      integer iyear, imonth, iday, ihour, imin, isec
      integer magin, magout, indgm, indval
      integer iunitr
      double precision rr, theta, phi
      integer ierdat, ierind, ierdis, ierpos
c
c     ---------------------------------
c*FON Declaration des variables locales
c     ---------------------------------
c
      integer ier1,ier2,ier3,ier4,ier5,ier6,ier7,ier8,ier9 
c*LOC ier1 a ier9 : codes retour des modules appeles
c
      SAVE
c
c     ---------------------------------
c*FON Affectation identificateur rcs_id
c     ---------------------------------
c
      data rcs_id /"
     >$Id$"/
c
c     ******************
c     Debut de programme
c     ******************
c
      ierdat = 0
      ierind = 0
      ierdis = 0
      ierpos = 0
c
c     -------------------
c*FON Controle de la date 
c     -------------------
c
      call ctrldat(itypda,datjul,iyear,imonth,iday,
     >             ihour,imin,isec,ier1)
      if (ier1 .ne. 0) then
         ierdat = ier1
      endif
c
c     ---------------------------------------------
c*FON Controle des indicateurs de calcul des champs
c     ---------------------------------------------
c
      call ctrlind(magin,magout,indgm,indval,ier2,ier3,ier4,ier5)
      if (ier2 .ne. 0 .or. ier3 .ne. 0 .or.
     >    ier4 .ne. 0 .or. ier5 .ne. 0) then
         ierind = 1
      endif
c
c     --------------------------------------------------
c*FON Controle des coordonnees rr theta phi du satellite
c     --------------------------------------------------
c
      call ctrldis(iunitr,rr,theta,phi,ier6,ier7,ier8)
      if (ier6 .ne. 0 .or. ier7 .ne. 0 .or. ier8 .ne. 0) then
         ierdis = 1
      endif
c
c     ------------------------------------
c*FON Controle de la position du satellite
c*FON par rapport a la maghetosphere
c     ------------------------------------
c
      call ctrlpos(itypda,datjul,iyear,imonth,iday,ihour,
     >             imin,isec,iunitr,rr,theta,phi,ier9)
      if (ier9 .ne. 0) then
         ierpos = 1
      endif
c
c     ****************
c     Fin de programme
c     ****************
c
      return
      end