subroutine ctrlpos (itypda,datjul,iyear,imonth,iday, > ihour,imin,isec,iunitr,rr,theta,phi,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. CNES - JC KOSIK - janvier 1991 c*AUT port. CISI c* c*ROL Theme : Modules de controle c*ROL Controle des donnees en entree des modules de calcul. c*ROL Controle de la position du satellite par rapport c*ROL a la magnetosphere. c* c*PAR itypda (I) : type de date (0 = julienne, 1 = calendaire) c* c*PAR datjul (I) : date julienne CNES 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) : heures c*PAR imin (I) : minutes c*PAR isec (I) : secondes 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 ier (O) : indicateur de position du satellite par rapport c*PAR : a la magnetosphere c* c*NOT ier : 0 : satellite dans la magnetosphere c*NOT ier : 1 : satellite en dehors de la magnetosphere c* c*NOT common : util, util2 c* c*INF utilise : djgreg, inigeom, mpause 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 integer itypda double precision datjul integer iyear, imonth, iday, ihour, imin, isec integer iunitr double precision rr,theta, phi integer ier c c ---------------------------------- c*FON Declaration des variables communes c ---------------------------------- c double precision pi,dpi,rad,deg,pid,xmu,rayt c c*COM pi : constante pi (obtenue a partir de acos(-1.)) c*COM dpi : constante 2 * pi c*COM pid : constante pi / 2 c*COM rad : facteur de conversion degres ----> radians c*COM deg : facteur de conversion radians ----> degres c*COM xmu : constante de gravitation terrestre (km**3/sec**2) c*COM rayt : rayon equatorial terrestre (km) c common/util/pi,dpi,rad,deg,pid,xmu,rayt c double precision rgmt c c*COM rgmt : rayon geocentrique terrestre (km) c common/util2/rgmt c c --------------------------------- c*FON Declaration des variables locales c --------------------------------- c integer iang,imog,ijog,iheg,imig,iseg c*LOC iang,imog,ijog,iheg,imig,iseg : date calendaire convertie c integer ipop c*LOC ipop : indicateur de positionnement par rapport a la magnetosphere c integer ier1,ier2,ier3 c*LOC ier1,ier2,ier3 : codes retour des modules appeles c double precision rig(3,3),rgi(3,3),rgdip(3,3),rdipg(3,3) double precision rgsm(3,3),rsmg(3,3),rggsm(3,3),rgsmg(3,3) double precision rgse(3,3),rseg(3,3),rigsm(3,3),rgsmi(3,3) c*LOC Matrices de rotation et de transformation c double precision rb c*LOC rb : distance subsolaire de la magnetopause c double precision year c*LOC year : annee fractionnaire c double precision alfag c*LOC alfag : ascension droite de Greenwich c double precision tetdip,phidip c*LOC tetdip,phidip : colatitude et longitude geocentriques c double precision alfas,deltas,tilt,rt c*LOC Variables pour matrices de rotations 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 c --------------- c rb = 10.0d0 c ier = 0 c c --------------------------------------------------------- c*FON Transformation date julienne en gregorienne si necessaire c --------------------------------------------------------- c if (itypda .eq. 0) then call djgreg(datjul,iang,imog,ijog,iheg,imig,iseg,ier1) else iang = iyear imog = imonth ijog = iday iheg = ihour imig = imin iseg = isec endif c c ---------------------------------------------------------------- c*FON Transformation des kilometres en rayons terrestres si necessaire c ---------------------------------------------------------------- c if (iunitr .eq. 0) then rt = rr / rgmt else rt = rr endif c c ---------------------------------------------------- c*FON Matrices de rotation pour les calculs de geophysique c ---------------------------------------------------- c call inigeom (iang,imog,ijog,iheg,imig,iseg,year, > alfag,tetdip,phidip,alfas,deltas,rig,rgi,rgdip,rdipg, > rgsm,rsmg,tilt,rggsm,rgsmg,rgse,rseg,rigsm,rgsmi,ier2) c c -------------------------------------------------------- c*FON Calcul de la position du satellite dans la magnetosphere c -------------------------------------------------------- c call mpause(rb,rggsm,rt,theta,phi,ipop,ier3) c c ------------------------------------------------------- c*FON Initialisation de l'indicateur de position du satellite c*FON par rapport aux frontieres de la magnetosphere c ------------------------------------------------------- c if (ipop .eq. 0) then ier = 0 elseif (ipop .eq. 2) then ier = 1 endif c c **************** c Fin de programme c **************** c return end