subroutine sun (iyear,iday,fday,gst,alfas,deltas,obliq,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.05 - 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 : Astronomie et calculs d'orbite c*ROL Calcul du temps sideral et de la position du soleil c*ROL pour des annees comprises entre 1901 et 2099 avec c*ROL une precision de 0.006 degres. c* c*PAR iyear (I) : annee (doit appartenir a 1901, 2099) c* c*PAR iday (I) : numero du jour dans l'annee c*PAR fday (I) : secondes dans le jour c* c*PAR gst (O) : temps sideral moyen de Greenwich (radians) c* c*PAR alfas (O) : ascension droite du soleil (radians) c*PAR deltas (O) : declinaison du soleil (radians) c* c*PAR obliq (O) : obliquite de l'ecliptique (radians) c* c*PAR ier (O) : code de retour c* c*NOT ier : sans objet c* c*NOT common : util 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.05 - 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 iyear, iday double precision fday double precision gst, alfas, deltas, obliq 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 c --------------------------------- c*FON Declaration des variables locales c --------------------------------- c integer ibiss c double precision arg1,arg2,cosd,dj,g,gd,gstd double precision sind,slong,slp,t,vl 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 date tenant compte des annees bisextiles c ----------------------------------------------------- c ibiss = (iyear - 1901) / 4 dj = 365.d0 * dble(iyear - 1900) + dble(ibiss) + > dble(iday) + fday - 0.5d0 t = dj / 36525.d0 c c ------------------------------------------ c*FON Calcul du temps sideral moyen de Greenwich c ------------------------------------------ c vl = mod(279.696678d0 + 0.9856473354d0 * dj, 360.d0) gstd = mod(279.690983d0 + 0.9856473354d0 * dj + 360.d0 > * fday + 180.d0, 360.d0) gst = gstd * rad c c ----------------------------------------------- c*FON Calculs intermediaires pour obtenir l'ascension c*FON et la declinaison du soleil c ----------------------------------------------- c gd = mod(358.475845d0 + 0.985600267d0 * dj, 360.d0) g = gd * rad slong = vl + (1.91946d0 - 0.004789d0 * t) * sin(g) > + 0.020094d0 * sin(2.d0 * g) obliq = (23.45229d0 - 0.0130125d0 * t) * rad slp = (slong - 0.005686d0) * rad sind = sin(obliq) * sin(slp) cosd = sqrt(1.d0 - sind**2) c c ------------------------------------------------- c*FON Calcul de l'ascension droite et de la declinaison c*FON du soleil en radians c ------------------------------------------------- c deltas = atan(sind / cosd) arg1 = sind / cosd / tan(obliq) arg2 = -cos(slp) / cosd alfas = pi - atan2(arg1,arg2) c c **************** c Fin de programme c **************** c return end