Postępy Astronomii
Tom XXXVI (1988), Zeszyt 1, 49–55.


EFEMERYDY UKŁADU SŁONECZNEGO DLA WSZYSTKICH

Kazimierz M. Borkowski

Katedra Radioastronomii Uniwersytetu M. Kopernika (Toruń)
(Otrzymano 22 października 1987 r.)


S t r e s z c z e n i e — W pracy przedstawiono zestaw programów w języku FORTRAN dla komputerów osobistych pozwalających na obliczenie pozycji Słońca, Księżyca i planet z dokładnością 1' na dowolny moment w okresie 600 lat ześrodkowanym na latach 70. naszego stulecia.

SOLAR SYSTEM EPHEMERIDES FOR EVERYBODY. S u m m a r y - A set of FORTRAN routines suitable for personal computers of the IBM PC type that allow to find geocentric coordinates of the Sun, Moon and all planets with 1' accuracy within about 300 years of the present and based on Van Flandern and Pulkkinen (1979) work is described and examples of printouts are appended.

Efemer-rus.gif



Zjawiska związane z ruchem ciał niebieskich, Słońca, Księżyca i planet, zawsze wzbudzały żywe i powszechne zainteresowanie ludzi, nie tylko tych związanych zawodowo z astronomią. Od zarania dziejów próbowano rozszyfrować prawa nimi rządzące. I chociaż owe prawa ostatecznie okazały się względnie proste (prawa Keplera), to do dziś sztuka przewidywania wzajemnych położeń ciał niebieskich dostępna jest w zasadzie tylko wąskiej grupie specjalistów. Wynika to z faktu mnogości ciał wzajemnie na siebie oddziaływających grawitacyjnie, jak również z istnienia efektów relatywistycznych i innych niegrawitacyjnych. Czynniki te, chociaż w większości przypadków, albo nawet zgrupowane, zdają się być mało znaczące w danym momencie, kumulują się z upływem czasu do trudnych do oceny rozmiarów.

Ktoś zainteresowany efemerydami, czyli położeniami ciał, na wybraną chwilę w przeszłości lub w niedalekiej przyszłości, jest najprawdopodobniej skazany na odszukanie odpowiedniego rocznika astronomicznego, odczytanie zeń potrzebnych informacji i przeprowadzenie pewnych dodatkowych rachunków. Istnieje przy tym poważne niebezpieczeństwo niewłaściwej interpretacji odczytu albo pomyłek przy elementarnych redukcjach na daną chwilę i położenie geograficzne, dlatego w praktyce zawsze należałoby korzystać dodatkowo z pomocy zawodowego astronoma. Nie jest to z pewnością sytuacja zadowalająca. Jest jednak jeszcze gorzej jeśli w grę wchodzą epoki odległe o stulecia lub więcej od współczesności i wtedy można dopuścić, że zainteresowana osoba pod naporem trudności w ogóle zrezygnuje z poszukiwań.

Tak było od dawien i dziś jeszcze. Sytuacja zdaje się jednak radykalnie zmieniać na naszych oczach z powodu niebywałego rozwoju technik obliczeniowych. Wprawdzie na powszechną dostępność bardzo precyzyjnych efemeryd raczej nie można jeszcze liczyć, ale te najczęściej zadowalające przeciętnego użytkownika są już w zasięgu ręki, przynajmniej dla tej dość już licznej grupy, która ma dostęp do komputerów osobistych. Jedna typowa dyskietka z zapasem pomieści programy umożliwiające obliczanie od ręki i niezawodnie przeróżnych zjawisk związanych z ruchami ciał niebieskich widzianych z dowolnego miejsca na Ziemi i w dowolnej chwili z zakresu obejmującego całe stulecia. Podstawowe programy takiego zestawu są przedmiotem tego opisu.

Algorytmy obliczania położeń ciał Układu Słonecznego, które przedstawię zapewniają formalnie dokładność 1' na przestrzeni około 600 lat ześrodkowanej na latach 70. naszego stulecia (z wyjątkiem Plutona, dla którego niepewność położenia ocenia się na ok. 15'). Kilka lat temu zakodowałem je w języku FORTRAN IV na komputerze RIAD 32, a następnie (1986/87) zaadoptowałem na mniejszej jednostce, SM1420 (odpowiednik PDP 11/35). Wkrótce też pojawiła się możliwość przeniesienia programów na komputer osobisty typu IBM PC. Właśnie ten ostatni etap wraz z faktem, że algorytmy sprawdziły się bardzo dobrze w czasie kilkuletniej eksploatacji sprawił, że zdecydowałem się spopularyzować je w naszej społeczności astronomicznej.

Z praktycznych dotąd zrealizowanych zastosowań wymienię tutaj kalendarz astronomiczny zawierający m.in. codzienne współrzędne Słońca, Księżyca i planet i ich momenty wschodów i zachodów, momenty pór roku i faz Księżyca, program na znajdowanie momentów i obliczanie okoliczności zaćmień Słońca i Księżyca oraz horoskopy (bez interpretacji, naturalnie). Zastosowania te wymagają oczywiście dodatkowych algorytmów, których teraz nie będę opisywał w szczegółach, ale zainteresowany Czytelnik może niewielkim nakładem pracy sam je stworzyć bazując na przedstawionych tu efemerydach i własnej inwencji. Np., wyznaczenie momentu najbliższego nowiu Księżyca może być zrealizowane przez iteracyjny proces, w którym elongacja Księżyca (róznica długości ekliptycznej Księżyca i Słońca) zbiega do zera, a inkrementy czasu dobierane są w zależności od znaku i szybkości zmian elongacji (metoda Newtona znajdowania zera funkcji, którą tutaj jest elongacja). W tym przykładzie 3–5 iteracji da dokładność rzędu 1 minuty czasu, co jest na granicy dokładności efemerydy Księżyca (nasz naturalny satelita w ciągu minuty przemieszcza się po niebie o ok. 0,5').

Z naszego doświadczenia wynika, że efemerydy te są w istocie dokładniejsze niż wspomniana 1', chociaż nie możemy tego stwierdzenia poprzeć jakąkolwiek analizą statystyczną, ze względu na wyrywkowość przeprowadzonych obliczeń i porównań. Pewne potwierdzenie wspomnianej dokładności i wartości tych algorytmów zdaje się wynikać także z prac Todorovic-Juchniewicz (1985) publikowanych na tych łamach.

Pełny opis algorytmów przedstawili ich autorzy: Van Flandern i Pulkkinen (1979) (w dalszym ciągu będziemy używali skrótu VFP). Oczywiście, nie będziemy tutaj powtarzać całości tej publikacji, której lwią część stanowią tabele współczynników liczbowych do wyrażeń trygonometrycznych na obliczanie współrzędnych heliocentrycznych i (osobno) równikowych. Ponieważ sposób prowadzący do położeń heliocentrycznych wydaje się nieco prostszy, ograniczymy się tylko do niego pomijając całkowicie ten, który daje wprost interesujące nas geocentryczne współrzędne równikowe. Wprawdzie w VFP podano w zasadzie pełną informację potrzebną przy praktycznym zastosowaniu algorytmów, ale zdając sobie sprawę z trudności, jakie czekają nawet wprawnego w programowaniu czytelnika, któremu jednak mogą być obce meandry analitycznych teorii ruchu ciał Układu Słonecznego, podamy tu wystarczająco dużo materiału — tak, by nawet nie znający języka angielskiego mógł sam zaprogramować całość efemeryd posługując się tym opracowaniem i oryginałem VFP.

Podstawowym argumentem prezentowanej teorii VFP jest czas, t, liczony w dniach od południa 1 stycznia 2000 r. Zmienną tę można wyrazić wzorem

t = JD – 2451545.5 + UT/24,(1)

gdzie UT jest czasem uniwersalnym (środkowoeuropejskim zmniejszonym o 1 godzinę) wyrażonym w godzinach, a JD — dniem juliańskim w południe uniwersalne. JD jest rachubą czasu powszechnie stosowaną w astronomii, a proste wzory na przeliczanie dat kalendarzowych na dni juliańskie i odwrotnie przedstawiliśmy wcześniej w tym czasopiśmie (Borkowski 1987). Ściślej rzecz traktując, t reprezentuje tzw. czas efemeryd (ET), który jednak rózni się od uniwersalnego nie więcej niż o 1,5 minuty aż do początków XVII w. wstecz. Ocenia się też, że róznica ta nie przekroczy wspomnianej liczby jeszcze przez kilkadziesiąt najbliższych lat. Biorąc pod uwagę, że żadne z dyskutowanych ciał w ciągu 1,5 minuty nie przesunie się na niebie o 1', możemy używać zamiennie ET z UT.

Algorytmy VFP stanowią w istocie pewne uproszczenie dokładnych analitycznych teorii. Kilka podstawowych informacji o konstrukcji takich teorii zawiera wspomniana już praca Todorovic-Juchniewicz (1985). W naszym przypadku każdą ze współrzędnych planety oblicza się z wyrażenia typu:

w(t) = wo(t) + Σk aksin[Σi Jik Aik(t)],(2)

gdzie wo dla ekliptycznej długości i szerokości oraz promienia wodzącego przyjmuje wartość sredniej długości planety i zera oraz średniej odległości od Słońca, odpowiednio, ak oraz Jik są stałymi stabelaryzowanymi współczynnikami, zaś Aik są średnimi elementami orbit planet (długość, argument szerokości i anomalia średnia), które należy obliczyć osobno dla każdego momentu t. Niektóre ze współczynników ak są zależne od czasu i wtedy trzeba je pomnożyć przez czynnik 1 + t/36525. Niekiedy też funkcję sinus ze wzoru (2) zastępuje kosinus. Wszytkie te odstępstwa są oczywiście jasno uwidocznione w tabelach VFP.

Tak więc trzonem algorytmów VFP są tabele współczynników a i J dla każdej planety i każdej ze współrzędnych oraz zestaw elementów średnich A w postaci prostych, liniowych funkcji czasu. Mamy nadzieję, że to skrótowe objaśnienie wystarczy zainteresowanemu Czytelnikowi przy jednoczesnej inspekcji podanych w Dodatku konkretnych przykładów.

W naszych efemerydach szczególną rolę odgrywa Słońce, gdyż jego współrzędne (a właściwie współrzędne Ziemi) stanowią punkt odniesienia dla obliczeń geocentrycznych położeń wszystkich planet. Drugim wyjątkiem jest Księżyc, którego pozycję dostaje się wprost w układzie geocentrycznym i z odległością (od Ziemi) wyrażoną nie w jednostkach astronomicznych, jak to jest u wszystkich pozostałych obiektów, lecz w promieniach Ziemi (1 j.a. = 23454,8 promieni Ziemi). Te fakty uzasadniają pełne przedstawienie podprogramów na obliczanie pozycji tych dwóch ciał (w Dodatku procedury SLONCE i KSIEZY). Uzupełnia to reprezentatywna procedura dla planet (WENUS). Wybraliśmy w to miejsce Wenus dlatego, że spośród wszystkich ośmiu planet odpowiadają jej najprostsze wzory.

W celu zakodowania algorytmu VFP dla dowolnej z pozostałych planet wystarczy powtórzyć całą strukturę podprogramu WENUS zmieniając jedynie jego nazwę, parametry A (u VFP są one oznaczone m.in. numerami od 1 do 33 zgodnie ze wskaźnikami przy A użytymi w mojej implementacji) i wyrażenia arytmetyczne na obliczanie heliocentrycznej ekliptycznej długości (w załączonym programie DLH) i szerokości (SZH) oraz odległości od Słońca (RH) w oparciu o stabelaryzowane dane w VFP. Czytelnik może nieco ułatwić sobie pracę przez utworzenie w swoim programie tablic współczynników A i J i obliczanie wyrażeń typu (2) w pętlach DO. Warto jednak wziąć pod uwagę to, że większość ze współczynników J ma wartość zero, dlatego mój jawny zapis sum będzie z pewnością bardziej efektywny w liczeniu (nie zawiera on mnożeń przez 0 ani 1). W bloku COMMON umieściłem te ze współczynników A, które występują jednocześnie w podprogramie SLONCE i w podprogramach na kilka planet (w których nie ma zatem potrzeby ponownego ich oblicznia). Zmienne SE i CE oraz DL w drugim bloku /SUN/ są sinusem i kosinusem kąta nachylenia równika do ekliptyki oraz poprawką w długości ekliptycznej związaną z nutacją — wszystkie obliczone dla epoki t. Oznacza to, że otrzymane współrzędne ciał niebieskich będą odniesione do ekliptyki i równika daty (precesję uwzględniono niejawnie w wyrażeniach typu (2) dla długości ekliptycznych).

Zestaw podprogramów na współrzędne opisanych trzech ciał zamyka procedura zamiany współrzędnych heliocentrycznych planet na geocentryczne (HELGEO). Algorytm zakodowany w tym podprogramie w części obliczania współrzędnych równikowych (RA, DEC i R), chociaż zapisany inaczej, jest oczywiście równoważny wzorom (8) i (9) w VFP; reszta jest moim dodatkiem, podobnie jak wzory na równanie czasu (EQT) i czas gwiazdowy w Greenwich (GST), które włączyłem do procedury SLONCE.

Całość Dodatku obejmuje ponadto prosty program demonstracyjny (PRZYKLAD), który ilustruje sposób korzystania z opisanych procedur. Oto przykład działania tego programu dla momentu czasu, dla którego w VFP podano również testowe obliczenia:

            DATA: 1969  6 28, UT:  0.00 
            REKT.     DEKL.   PROM.   PARAL./ODL.  DLE     SZE 
             [h]    [stop.]    [']                    [rad] 
SLONCE:     6.4449  23.3014  15.7574   8.6500"   1.67774 
KSIEZYC:   16.4983 -26.7378  16.5635  60.7880'   4.36190 -0.08468 
WENUS:      3.2754  15.0979            0.7864ja  0.88591 -0.05152 
   DJ = 2440400.50000,  GST = 18.3946 h,   EQT = -3.021 min. 

Powyższa tabelka powinna się pojawić na ekranie monitora po wpisaniu (z klawiatury PC) daty i czasu UT w formie: 1969,6,28, 0 [ENTER] i może służyć jako pierwszy test poprawności programu, który być może Czytelnik zapragnie uruchomić. Tabelka zawiera współrzędne równikowe (REKT., DEKL.) i ekliptyczne (geocentryczne; DLE, SZE) we wskazanych jednostkach oraz promień tarczy (PROM.) i paralaksę horyzontalną lub odległość od Ziemi (PARAL./ODL.). U dołu podane są ponadto dzień juliański (DJ), przybliżona wartość czasu gwiazdowego w Greenwich (GST) i równanie czasu (EQT) — wszystko na wskazany dzień i chwilę UT. Porównanie przedstawionych liczb ze ścisłymi danymi wskazuje, że nasze przybliżenia rektascensji (także GST) różnią się nie więcej niż o 2 s (albo 30") od dokładnych, a w pozostałych współrzędnych zgodność jest jeszcze około 3-krotnie lepsza (pomijając geocentryczne współrzędne ekliptyczne Wenus, których dostępne roczniki nie podają).

Na koniec chcę jeszcze ostrzec, że niektóre kompilatory zbuntują się na zbyt złożone wyrażenia arytmetyczne w procedurze KSIEZY, i wtedy trzeba będzie je rozbić na kilka wyrażeń (sam używałem bezproblemowo kompilatora Lahey).

W czasie przygotowywania tej pracy korzystałem z pomocy finansowej w ramach problemu RPBR Nr RR.I.11/2.


LITERATURA

Borkowski K.M., 1987, ,,Dni juliańskie i daty kalendarzowe", Post. Astr. 35, 275–279.
Todorovic-Juchniewicz B., 1985, Post. Astr. 33, 59 i 153.
Van Flandern T.C., Pulkkinen K.F., 1979, Astrophys. J. Supp. Ser. 41, 391.



DODATEK


	                  PROGRAM PRZYKLAD
	REAL*8 DJ,DG
        JD(L,M,N) = (L+(M-8)/6)*1461/4+(153*MOD(M+9,12)+2)/5+N+1721119
     *                                        -(L+100+(M-8)/6)/100*3/4
	DG=57.295779513083D0
   1    WRITE(*,'(/A)') ' Rok, miesiac, dzien, UT[h.mm] ? '
	READ(*,*) IY,M,ID,UT
	DJ=JD(IY,M,ID) - .5D0 + (AINT(UT) + AMOD(UT,1.)/.6)/24D0
	CALL SLONCE(DJ,RAS,DS,DLS,   RS,EQT,GST)
	CALL KSIEZY(DJ,RAK,DK,DLK,SK,RK)
	CALL WENUS (   RAW,DW,DLW,SW,RW)
	WRITE(*,2) IY,M,ID,UT,RAS*DG/15.,DS*DG,16.01967/RS,8.794/RS,DLS
     *, RAK*DG/15.,DK*DG,ASIN(.272493/RK)*DG*60.,ASIN(1./RK)*DG*60.,DLK
     *, SK,RAW*DG/15.,DW*DG,RW,DLW,SW,DJ,GST*DG/15.,EQT*DG*4.
   2   FORMAT(1H /15X,'DATA:',I5,2I3,', UT:',F6.2/15X,'REKT.     DEKL. ' 
     *,'  PROM.   PARAL./ODL.  DLE     SZE'/16X,'[h]    [stop.]    ['']'
     *,20X,'[rad]'/3X,'SLONCE:  ',4F9.4,'"',F10.5/3X,'KSIEZYC: ',4F9.4,
     *''' ',2F9.5/3X,'WENUS:',3X,2F9.4,9X,F9.4,'ja',2F9.5/6X,
     *'DJ =',F14.5,',  GST =',F8.4,' h,   EQT =',F7.3,' min.'/)
	GO TO 1
	END

	SUBROUTINE SLONCE(DJ,RA,DEC,DLE,R,EQT,GST)
C
C   PROCEDURA OBLICZA WSPOLRZEDNE [W RAD] ROWNIKOWE (RA I DEC),  DLUGOSC
C  EKLIPTYCZNA (DLE), ODLEGLOSC SLONCA OD ZIEMI (R) [W JEDN. ASTR.] ORAZ
C  [W RAD] ROWNANIE CZASU (EQT) I CZAS GWIAZDOWY GREENWICH (GST)  NA MO-
C  MENT OKRESLONY PRZEZ DJ, TJ. DZIEN JULIANSKI.
C  COMMON BLOCK /SUN/ I /PLAN/ ZAWIERAJA DANE DO OBLICZEN POZYCJI PLANET.
C
	COMMON /SUN/ XI0,ETA0,SE,CE,DL /PLAN/ T,A1,A7,A8,A13,A16,A19
	DOUBLE PRECISION DJ,D1,D2,T
	F(D1,D2) = 6.283185307179D0*DMOD(D1 + D2*T,1D0)
	T  = DJ-2451545d0
	A1  = F(.606434D0,.03660110129D0)
	A5  = F(.347343D0,-1.4709391D-4)
	A7  = F(.779072D0,.273790931D-2)
	A8  = F(.993126D0,.27377785D-2)
	A13 = F(.140023D0,4.45036173D-3)
	A16 = F(.053856D0,.145561327D-2)
	A19 = F(.056531D0,.23080893D-3)
	DL  = -8.34E-5*SIN(A5)
	DLE = A7+DL+((6893.-4.6543D-4*SNGL(T))*SIN(A8)+72.*SIN(A8+A8)-
     *7.*COS(A8-A19)+6.*SIN(A1-A7)+5.*SIN(4.*A8-8.*A16+3.*A19)-
     *5.*COS(2.*(A8-A13))-4.*SIN(A8-A13)+4.*COS(4.*(A8-2.*A16)+3.*A19)+
     *3.*(SIN(2.*(A8-A13))-SIN(A19)-SIN(2.*(A8-A19))))/206264.8
	 IF(DLE.LT..0) DLE = DLE+6.2831853
	R  = 1.00014-.01675*COS(A8)-.00014*COS(A8+A8)
	SE = SIN(.40905013 - 6.214E-9*SNGL(T) + 4.36E-5*COS(A5))
	CE = SQRT(1. - SE*SE)
	XI0 = R*COS(DLE)
	ETA0= R*SIN(DLE)
	RA  = ATAN2(CE*ETA0,XI0)
	DEC = ASIN(SE*ETA0/R)
	EQT = AMOD(A7 - RA,6.283185)
	 IF(ABS(EQT).GT.3.)  EQT = EQT - SIGN(6.2831853,EQT)
	 IF(RA.LT..0) RA = RA + 6.2831853
	GST = DMOD(T*6.283185307179D0+A7+DL,6.283185307179D0)
	 IF(GST.LT.0.) GST = GST + 6.2831853
	RETURN
	END

	SUBROUTINE KSIEZY(DJ,RA,DEC,DLE,SZE,R)
C
C   PROCEDURA OBLICZA WSPOLRZEDNE [W RAD] EKLIPTYCZNE (DLE I SZE) I
C  ROWNIKOWE (RA I DEC) ORAZ ODLEGLOSC KSIEZYCA OD ZIEMI  [W PROMIE-
C  NIACH ZIEMI] NA MOMENT OKRESLONY PRZEZ DZIEN JULIANSKI (DJ).
C
	DOUBLE PRECISION DJ,D1,D2,T
	F(D1,D2) = 6.28318530718D0*DMOD(D1 + D2*T,1D0)
	T = DJ-2451545D0
	A1 = F(.606434D0,.03660110129D0)
	A2 = F(.374897D0,.03629164709D0)
	A3 = F(.259091D0,.0367481952D0)
	A7 = F(.779072D0,.273790931D-2)
	A4 = A1-A7
	A8 = F(.993126D0,.27377785D-2)
	A12= F(.505498D0,4.45046867D-3)
	DLE= A1-8.34E-5*SIN(A1-A3)+(22640.*SIN(A2)-4586.*SIN(A2-A4-A4)+
     * 2370.*SIN(A4+A4)+769.*SIN(A2+A2)-668.*SIN(A8)-125.*SIN(A4)-
     * 412.*SIN(A3+A3)-212.*SIN(2.*(A2-A4))-206.*SIN(A2-A4-A4+A8)+
     * 192.*SIN(A2+A4+A4)+165.*SIN(A4+A4-A8)+148.*SIN(A2-A8)-
     * 110.*SIN(A2+A8)-55.*SIN(2.*(A3-A4))-45.*SIN(A2+A3+A3)+40.*
     * SIN(A2-A3-A3)-38.*SIN(A2-4.*A4)+36.*SIN(3.*A2)-31.*SIN(2.*(A2-
     * A4-A4))+28.*SIN(A2-A4-A4-A8)-24.*SIN(A4+A4+A8)+19.*SIN(A2-A4)+
     * 18.*SIN(A4+A8)+15.*SIN(A2+A4+A4-A8)+14.*(SIN(2.*(A2+A4))+
     * SIN(4.*A4))-13.*SIN(3.*A2-A4-A4)-11.*SIN(A2+16.*A7-18.*A12)+
     * 10.*SIN(A2+A2-A8)+9.*(SIN(A2-2.*(A3+A4))+COS(A2+16.*A7-18.*A12)-
     * SIN(2.*(A2-A4)+A8))-8.*SIN(A2+A4)+8.*(SIN(2.*(A4-A8))-SIN(2.*A2-
     * (-A8)))-7.*(SIN(A8+A8)+SIN(A2+2.*(A8-A4))-SIN(A1-A3))-
     * 6.*(SIN(A2+2.*(A4-A3))+SIN(2.*(A3+A4)))-4.*(SIN(A2-4.*A4+A8)+
     * SIN(2.*(A2+A3)))+3.*(SIN(A2-3.*A4)-SIN(A2+2.*A4+A8)-
     * SIN(2.*A2-4.*A4+A8)+SIN(A2-A8-A8)+SIN(A2-2.*(A8+A4)))+
     * 2.*(SIN(A2+A2-A4)+SIN(4.*A4-A8)+SIN(4.*A2)+SIN(A2+4.*A4)-
     * SIN(2.*(A3-A4)+A8)-SIN(2.*(A2-A4)-A8))+5.6569*
     * (SNGL(T)/36525.+1.)*SIN(A2+16.*A7-18.*A12+.785398))/206264.8
	 IF(DLE.LT..0) DLE = DLE+6.2831853
	SZE = (18461.*SIN(A3)+1010.*SIN(A2+A3)+1000.*SIN(A2-A3)-
     * 624.*SIN(A3-A4-A4)-199.*SIN(A2-A3-A4-A4)-167.*SIN(A2+A3-A4-A4)+
     * 117.*SIN(A3+A4+A4)+62.*SIN(A2+A2+A3)+33.*SIN(A2-A3+A4+A4)+
     * 32.*SIN(A2+A2-A3)-30.*SIN(A3-A4-A4+A8)-16.*SIN(A2+A2+A3-A4-A4)+
     * 15.*SIN(A2+A3+2.*A4)+12.*SIN(A3-A4-A4-A8)-8.*SIN(A1)-
     * 9.*SIN(A2-A3-A4-A4+A8)+8.*SIN(A3+A4+A4-A8)+7.*(SIN(A2+A3-A8)-
     * SIN(A2+A3-2.*A4+A8)-SIN(A2+A3-4.*A4))-6.*(SIN(A3+A8)+SIN(3.*A3)-
     * SIN(A2-A3-A8))+5.*(SIN(A3-A4)+SIN(A3-A8)-SIN(A3+A4)-
     * SIN(A2+A3+A8)-SIN(A2-A3+A8))+4.*(SIN(3.*A2+A3)-SIN(A3-4.*A4))+
     * 3.*(SIN(A2-3.*A3)-SIN(A2-A3-4.*A4))+2.*(SIN(3.*A2-A3)+
     * SIN(A2+A2-A3-A4-A4)+SIN(A2-A3+A4+A4-A8)-SIN(A2+A2-A3-4.*A4)+
     * SIN(A2+A2-A3+A4+A4)-SIN(3.*A3-A4-A4)))/206264.8
	R = 60.36298-3.27746*COS(A2)-.57994*COS(A2-A4-A4)-
     * .46357*COS(A4+A4)-.08904*COS(A2+A2)+.03865*COS(2.*(A2-A4))-
     * .03237*COS(A4+A4-A8)-.02688*COS(A2+A4+A4)-.02358*COS(A2-A4-A4+
     * A8)+.01247*COS(A2-A3-A3)+1E-5*(704.*COS(A8)+529.*COS(A4+A4+A8)-
     *2030.*COS(A2-A8)+1719*COS(A4)+1671.*COS(A2+A8)-524.*COS(A2-4.*A4)
     * +398.*COS(A2-A4-A4-A8)-366.*COS(3.*A2)-295.*COS(A2+A2-4.*A4)-
     * 263.*COS(A4+A8)+249.*COS(3.*A2-A4-A4)-221.*COS(A2+A4+A4-A8)+
     * 185.*COS(2.*(A3-A4))-161.*COS(2.*(A4-A8))+
     * 147.*COS(A2-2.*(A3-A4))-142.*COS(4.*A4)+139.*COS(2.*(A2-A4)+A8)-  
     * 118.*COS(A2-4.*A4+A8)-116.*COS(2.*(A2+A4))-110.*COS(A2+A2-A8))
	SE = SIN(.40905013 - 6.214E-9*SNGL(T) + 4.36E-5*COS(A1-A3))
	CE = SQRT(1. - SE*SE)
	SD = SIN(DLE)
	DEC= ASIN(SD*SE*COS(SZE) + SIN(SZE)*CE)
	RA = AMOD(ATAN2(SD*CE-TAN(SZE)*SE,COS(DLE))+6.2831853,6.2831853)
	RETURN
	END

	SUBROUTINE WENUS(RA,DEC,DLE,SZE,R)
C
C    PROCEDURA OBLICZA WSPOLRZEDNE ROWNIKOWE (RA I DEC) I EKLIPTYCZNE
C   (DLE I SZE) [RAD] ORAZ ODLEGLOSC OD ZIEMI [JEDN. ASTR.] WENUS NA
C   MOMENT ODLEGLY O T DNI OD POLUDNIA DNIA 1 STYCZNIA  2000 ROKU. 
C   WYMAGA ONA UPRZEDNIEGO WYWOLANIA PODPROGRAMU SLONCE.
C
	COMMON /PLAN/ T,A1,A7,A8,A13,A16,A19
	DOUBLE PRECISION T,D1,D2
	F(D1,D2) = 6.28318530718D0*DMOD(D1 + T*D2,1D0)
	A12 = F(.505498D0,4.45046867D-3)
	A14 = F(.292498D0,4.45040017D-3)
	DLH = A12+(SIN(A13)*(2794.-SNGL(T)/1826.25)-181.*SIN(A14+A14)
     *+12.*SIN(A13+A13) - 10.*COS(2.*(A8-A13)) + 7.*COS(3.*(A8-A13)))    
     * /206264.8
	SZH = (12215.*SIN(A14) + 166.*SIN(A13)*COS(A14))/206264.8
	RH  = .72335 - .00493*COS(A13)
	CALL HELGEO(DLH,SZH,RH,RA,DEC,DLE,SZE,R)
	RETURN
	END

	SUBROUTINE HELGEO(DLH,SZH,RH,RA,DEC,DLE,SZE,R)
C
C     PODPROGRAM TEN PRZELICZA HELIOCENTRYCZNE WSPOLRZEDNE PLANET (DLH,  
C    SZH I RH) NA WSPOLRZEDNE GEOCENTRYCZNE (RA, DEC, DLE, SZE I R)
C  
	COMMON /SUN/ XI0,ETA0,SE,CE,DL
	C = RH*COS(SZH)
	X = C*COS(DLH + DL) + XI0
	C = C*SIN(DLH + DL) + ETA0
	B = RH*SIN(SZH)
	Y = C*CE - B*SE
	Z = C*SE + B*CE
	R   = SQRT(X*X + Y*Y + Z*Z)
	RA  = AMOD(ATAN2(Y,X) + 6.2831853,6.2831853)
	DEC = ASIN(Z/R)
	DLE = AMOD(ATAN2(Y*CE + Z*SE,X) + 6.2831853,6.2831853)
	SZE = ASIN((Z*CE - Y*SE)/R)
	RETURN
	END


W sierpniu 2002 r. opisany program i wszystkie podprogramy ponownie skompilowalem starym Laheyowym F77L (v. 2.2) oraz nowszym LF90 (v. 4.5) nie napotykając żadnych problemów i uzyskując te same wyniki, które widnieją w tabelce oryginalnego artykułu. Poniżej dołączam dla kompletu podprogramy (w takiej postaci, jaką miały wówczas) na obliczanie pozycji pozostałych planet, które nie były zamieszczone w przedstawionym artykule, ze względu na objętość.

	SUBROUTINE MERKUR(RA,DEC,DLE,SZE,R)                            
	COMMON /PLAN/ T,A1,A7,A8,A13,A16,A19
	DOUBLE PRECISION T,D1,D2
	F(D1,D2) = 6.28318530718D0*DMOD(D1 + T*D2,1D0)
	A9 = F(.700695D0,.011367714D0)
	A10 = F(.485541D0,.01136759566D0)
	A11 = F(.566441D0,.01136762384D0)
	DLH = A9+((84386.+2.2E-4*SNGL(T))*SIN(A10)+10733.*SIN(A10+
     * A10)+1892.*SIN(3.*A10)-646.*SIN(A11+A11)+381.*SIN(4.*A10)-306.*
     * SIN(A10-A11-A11)-274.*SIN(A10+A11+A11)-92.*SIN(2.*(A10+A11))+83.*
     * SIN(5.*A10)-28.*SIN(3.*A10+2.*A11)+25.*SIN(2.*(A10-A11))+
     * 19.*SIN(6.*A10)-9.*SIN(2.*(A10+A10+A11))+7.*COS(2*A10-5.*A13))/
     * 206264.8
	SZH = (24134.*SIN(A11)+5180.*SIN(A10-A11)+4910.*SIN(A10+A11)+
     * 1124.*SIN(A10+A10+A11)+271.*SIN(3.*A10+A11)
     * +132.*SIN(A10+A10-A11)+67.*SIN(4.*A10+A11)+18.*SIN(3.*A10-A11)+
     * 17.*SIN(5.*A10+A11)-10.*SIN(3.*A11)-9.*SIN(A10-3.*A11))/
     * 206264.8
	RH = .39528-.07834*COS(A10)-.00795*COS(2.*A10)-
     * .00121*COS(3.*A10)-22.E-5*COS(4.*A10)
	CALL HELGEO(DLH,SZH,RH,RA,DEC,DLE,SZE,R)
	RETURN
	 END


	SUBROUTINE MARS(RA,DEC,DLE,SZE,R)                              
	COMMON /PLAN/ T,A1,A7,A8,A13,A16,A19
	DOUBLE PRECISION T,D1,D2
	F(D1,D2) = 6.28318530718D0*DMOD(D1 + T*D2,1D0)
	A15 = F(.987353D0,.145575328D-2)
	A17 = F(.849694D0,.145569465D-2)
	DLH = A15+((38451.+(37.+8.*COS(A16))*(1.+SNGL(T)/36525.))*
     * SIN(A16)+2238.*SIN(A16+A16)+181.*SIN(3.*A16)-52.*SIN(2.*A17)-
     * 22.*COS(A16-2.*A19)-19.*SIN(A16-A19)+17.*(COS(A16-A19)+SIN(4.*
     * A16))-16.*COS(2.*(A16-A19))+13.*COS(A8-A16-A16)-10.*(SIN(A16-
     * 2.*A17)+SIN(A16+2.*A17))+7.*(COS(A8-A16)-COS(2.*A8-4.*.75*A16))-
     * 5.*(SIN(A13-3.*A16)+SIN(A8-A16)+SIN(A8-2.*A16))+4.*(-COS((2.*A8-
     * 4.*A16))+COS(A19))+3.*(COS(A13-3.*A16)+SIN(2.*(A16-A19))))
     * /206264.8
	SZH = (6603.*SIN(A17)+622.*SIN(A16-A17)+615.*SIN(A16+A17)+
     * 64.*SIN(2.*A16+A17))/206264.8
	RH = 1.53031-.1417*COS(A16)-.0066*COS(2.*A16)-.00047*COS(3.*A16)
	CALL HELGEO(DLH,SZH,RH,RA,DEC,DLE,SZE,R)
	RETURN
	 END

	SUBROUTINE JOWISZ(RA,DEC,DLE,SZE,R)                             
	COMMON /PLAN/ T,A1,A7,A8,A13,A16,A19
	DOUBLE PRECISION T,D1,D2
	F(D1,D2) = 6.28318530718D0*DMOD(D1 + T*D2,1D0)
	W = T/36525.+1.
	A25 = F(.400589D0,.3269438D-4)
	A22 = F(.882987D0,.9294371D-4)
	A18 = A19+.2078289
	A0 = 2.*A19-5.*A22
	S = SIN(A19)
	C = COS(A19)
	C0 = COS(A0)
	S0 = SIN(A0)
	S1 = SIN(A19-A22)
	C1 = COS(A19-A22)
	S2 = SIN(A22)
	C2 = COS(A22)
	DLH = A18+(W*(5023.-74*C+68.*S-43.*S0-19.*C0-4.*(C*C-S*S)+6.*S*C
     * -2.*S0*C)+19934.*S+2511.+1093.*C0+1202.*S*C-479*S0-370.*S1*C1+
     * C*(137.*S0-262.*S1*C1)+S*(137.*C0+131.*(C1*C1-S1*S1))+79.*C1-
     * 76.*(C1*C1-S1*S1)+66.*COS(2.*A19-3.*A22)+116.*C0*C-10.*S0*S-37.*C
     * +49.*SIN(2.*A19-3.*A22)+25.*(SIN(A18+A18)+SIN(3.*A19))-
     * 23.*SIN(A0-A19)+17.*(COS(A0+A22)+COS(3.*(A19-A22)))-14.*S1-
     * 13.*SIN(A0+A19+A22)+9.*(C2-COS(A18+A18)-S2-SIN(3.*A19-A22-A22)+
     * SIN(A0+A19+A19)+SIN(2.*(A19-3.*A22)+3.*A25))-8.*(C0*C0-S0*S0)+
     * 7.*(COS(A0+A19+A22)-COS(A19-3.*A22)-2.*S0*C0-SIN(A19-3.*A22))+
     * 6.*(COS(A0+A19+A19)-SIN(3.*(A19-A22)))+5.*(C2*C2-S2*S2)-
     * 4.*(4.*S1*C1*(C1*C1-S1*S1)-C*SIN(A18+A18)+COS(3.*A22)-COS(2.*A19-
     * A22)+COS(3.*A19-2.*A22))+3.*(COS(5.*A22)+COS(5.*(A19-2.*A22))+
     * S2))/206264.8
	SZH = (-4692.*C+259.*S+454.*S*S+W*(30.*S+21.*C)+29.*S*C0+
     * C*(3.*(S0-4.+8.*S*(S+S+1.))+C0+C0)-12.*S*S0)/206264.8
	RH = 5.20883-.25122*C-.00604*(C*C-S*S)+.0026*COS(2.*(A19-A22))+
     * 1.E-5*(-170.*COS(A0+A19)-106.*SIN(2.*(A19-A22))-W*(91.*S+84.*C)+
     * 69.*SIN(A0+A22+A22)-67.*SIN(A0-A19)+63.*S1-51.*COS(A0+A22+A22)-
     * 46.*S+S0*(66.*C-29.*S)+C0*(66.*S-29.*C)+27.*COS(A19-2.*A22)-
     * 22.*C*(1.-4.*S*S)-21.*S0)
	CALL HELGEO(DLH,SZH,RH,RA,DEC,DLE,SZE,R)
	RETURN
	 END

	SUBROUTINE SATURN(RA,DEC,DLE,SZE,R)
	COMMON /PLAN/ T,A1,A7,A8,A13,A16,A19
	DOUBLE PRECISION T,D1,D2
	F(D1,D2) = 6.28318530718D0*DMOD(D1 + T*D2,1D0)
	W = T/36525.+1.
	A25 = F(.400589D0,.3269438D-4)
	A22 = F(.882987D0,.9294371D-4)
	A21 = A22+1.5727316
	A0 = 2.*A19-5.*A22
	C0 = COS(A0)
	S0 = SIN(A0)
	S = SIN(A22)
	C = COS(A22)
	DLH = A21+(W*(5014.-229.*C-142.*S+101.*S0+60.*C0+22.*SIN(A0+A22)
     * -22.*S*C-17.*(C*C-S*S)-6.*(2.*S0*(S0+C0)-1.-SIN(A0-A22))+
     * 4.*COS(A19-A22-A22)+3.*(COS(2.*A19-4.*A22)-SIN(A21+A21)-COS(A21+
     * A21)+COS(A19+A19-6.*A22))+2.*SIN(A19-A22-A22))+
     *  23045.*S-2689.*C0+2507.-826.*COS(A0+A22)+1604.*S*C+1177.*S0+
     * 425.*SIN(A19-A22-A22)-153.*COS(A0-A22)-114.*C-70.*COS(A21+A21)+
     * 67.*SIN(A21+A21)+66.*SIN(A0-A22)+41.*SIN(A19-3.*A22)+39.*SIN(3.*
     * A22)+31.*(SIN(A19-A22)+ SIN(2.*(A19-A22)))-29.*COS(A19+A19-3.*
     * A22)-28.*SIN(A0-A22+3.*A25)+28.*COS(A19-3.*A22)-
     * 22.*SIN(A22-3.*A25)+20.*(SIN(2.*A19-3.*A22)+COS(2.*A0))
     * +19.*(COS(2.*A22-3.*A25)+2.*S0*C0)-16.*COS(A22-3.*A25)-
     * 12.*(SIN(A0+A22)-COS(A19)+SIN(2.*(A22-A25)))-11.*COS(A0-A22-A22)+
     * 10.*(SIN(A22+A22-3.*A25)+COS(2.*(A19-A22)))+9.*SIN(4.*A19-9.*A22)
     * +8.*(COS(A21*2.-A22)-COS(A21*2.+A22)-SIN(A22-2.*A25)-SIN(2.*A21-
     * A22)+COS(A22+A25))+7.*(SIN(2.*A21+A22)-COS(A19-2.*A22)-COS(A22*2.
     * ))+5.*(SIN(A0-A22-A22)+SIN(3.*A19-4.*A22)-SIN(3.*A19-7.*A22)-
     *COS(3.*(A19-A22))-COS(2.*(A22-A25)))+4.*(SIN(3.*(A19-A22))+SIN(A0+
     * A19))+3.*(COS(2.*A19-6.*A22+3.*A25)+COS(3.*A19-7.*A22)+COS(4.*A19
     * -9.*A22)+SIN(3.*(A19-A22-A22))+SIN(2.*A19-A22)+SIN(A19-4.*A22))
     * +2.*(COS(3.*(A22-A25))+SIN(4.*A22)-COS(3.*A19-4.*A22)-COS(2.*
     * A19-A22)-SIN(2.*A19-7.*A22+3.*A25)+COS(A19-4.*A22)+COS(2.*A0-A22)
     * -SIN(A22-A25)))/206264.8
	SZH = (8297.*S-3346.*C+924.*S*C-189.*(C*C-S*S)+185.+
     * W*(79.*C+18.*S-10.-8.*S*C+3.*SIN(A0+A22))-71.*COS(A0+A22)+
     * 46.*SIN(A0-A22)-45.*COS(A0-A22)+29.*SIN(3.*A22)-
     * 20.*COS(A0+A22+A22)-14.*COS(A0)-11.*COS(3.*A22)+9.*SIN(A19-3.*
     * A22)+8.*SIN(A19-A22)-6.*SIN(A0+A22+A22)+5.*(SIN(A0-A22-A22)-
     * COS(A0-A22-A22))+4.*S0+3.*SIN(A19-A22-A22)*(1.+S+S)+
     * 2.*(SIN(4.*A22)-COS(2.*(A19-A22))))/206264.8
	RH = 9.55774+W*(-.00524*S+.00328*C-.00028)+
     * 1.E-5*(-53252.*C-1878.*SIN(A0+A22)-1482.*(C*C-S*S)+817.*
     * SIN(A19-A22)-539.*COS(A19-A22-A22)+349.*S0+347.*SIN(A0-A22)-
     * 225.*S+149.*COS(A0-A22)-126.*COS(2.*(A19-A22))+104.*COS(A19-A22)+
     * 101.*C0+98.*COS(A19-3.*A22)-73.*COS(A0+A22+A22)-62.*COS(3.*A22)+
     * 42.*SIN(2.*A22-3.*A25)+41.*SIN(2.*(A19-A22))-40.*(SIN(A19-3.*
     * A22)-COS(A0+A22))-23.*SIN(A19)+20.*SIN(A0-A22-A22))
	CALL HELGEO(DLH,SZH,RH,RA,DEC,DLE,SZE,R)
	RETURN
	END

	SUBROUTINE URAN(RA,DEC,DLE,SZE,R)                              
	COMMON /PLAN/ T,A1,A7,A8,A13,A16,A19
	DOUBLE PRECISION T,D1,D2
	F(D1,D2) = 6.28318530718D0*DMOD(D1 + T*D2,1D0)
	A22 = F(.882987D0,.9294371D-4)
	A25 = F(.400589D0,.3269438D-4)
	A26 = F(.664614D0,.3265562D-4)
	A28 = F(.725368D0,.1672092D-4)
	W = T/36525.+1.
	S = SIN(A25)
	C = COS(A25)
	C2 = COS(A22-A25-A25)
	S2 = SIN(A22-A25-A25)
	S3 = SIN(A22-3.*A25)
	C3 = COS(A22-3.*A25)
	S1 = SIN(A22-A25)
	DLH = A25+2.950458+(19397.*S+570.*2.*S*C+143.*S2+102.*S3+76.*C3-
     * 49.*SIN(A19-A25)+29.*(SIN(2.*A19-6.*A22+3.*A25)+COS(2.*(A25-A28))
     * )-28.*COS(A25-A28)+23.*SIN(3.*A25)-21.*COS(A19-A25)+
     * 20.*(SIN(A25-A28)+C2)-19.*COS(A22-A25)+17.*SIN(2.*A25-3.*A28)+
     * 14.*SIN(3.*(A25-A28))+13.*S1-12.*C+10.*SIN(2.*(A25-A28))-
     * 9.*(SIN(A26+A26)-COS(A25+A25-3.*A28))+8.4853*SIN(2.*(A19-3.*A22+
     * A25+.3926991))+5.*SIN(A22-4.*A25)-4.*(SIN(3.*A25-4.*A28)-
     * COS(3.*(A25-A28)))-3.*COS(A28)-2.*SIN(A28)+
     * W*(110.*S-536*C-30.*(C*C-S*S)+8.*C2+7.*(C3-S3+2.*S*C)+
     * W*(32.-12.*C-9.*S)))/206264.8
	SZH = ((2775.-C)*SIN(A26)+261.*S*COS(A26))/206264.8
	RH = 19.21216-.90154*C-.02121*(C*C-S*S)-.00585*C2 -
     * .00451*COS(A19-A25)+.00336*S1+.00198*SIN(A19-A25)+
     * .00118*C3+.00107*S2-.00081*COS(3.*(A25-A28))-
     * W*(S*.02488+C*.00508+.00206*S*C)
	CALL HELGEO(DLH,SZH,RH,RA,DEC,DLE,SZE,R)
	RETURN
	 END

	SUBROUTINE NEPTUN(RA,DEC,DLE,SZE,R)
	COMMON /PLAN/ T,A1,A7,A8,A13,A16,A19
	DOUBLE PRECISION T,D1,D2
	F(D1,D2) = 6.28318530718D0*DMOD(D1 + T*D2,1D0)
	A22 = F(.882987D0,.9294371D-4)
	A25 = F(.400589D0,.3269438D-4)
	A28 = F(.725368D0,.1672092D-4)
	A29 = F(.480856D0,.1663715D-4)
	W = T/36525.+1.
	S = SIN(A28)
	C = COS(A28)
	S9 = SIN(A19-A28)
	C9 = COS(A19-A28)
	DLH = (3523.*S-W*(43.*C+4.*S*(1.-W))-50.*SIN(A29+A29)+
     * 29.*S9+38.*S*C-18.*C9+18.38478*SIN(A22-A28+.7853982)-
     * 9.*(SIN(A25+A25-3.*A28)-COS(2.*(A25-A28)))-5.*COS(A25+A25-3.*
     * A28)+4.*COS(A25-A28-A28))/206264.8+A28+.7636834
	SZH = ((6404.-33.*W)*SIN(A29)+110.*S*COS(A29))/206264.8
	RH = 30.07175-W*.00314*S-.25701*C-.00787*COS(A25-A28-A28+4.3735793
     * )+.00409*C9+.0025*S9-.00194*SIN(A22-A28)+.00185*COS(A22-A28)
	CALL HELGEO(DLH,SZH,RH,RA,DEC,DLE,SZE,R)
	RETURN
	 END

	SUBROUTINE PLUTON(RA,DEC,DLE,SZE,R)
	COMMON /PLAN/ T,A1,A7,A8,A13,A16,A19
	DOUBLE PRECISION T,D1,D2
	F(D1,D2) = 6.28318530718D0*DMOD(D1 + T*D2,1D0)
	W = T/36525.+1.
	A31 = F(.663854D0,1.115482D-5)
	A32 = F(.04102D0,1.104864D-5)
	A33 = A32+1.987591
	S = SIN(A32)
	C = COS(A32)
	S1 = SIN(A33)
	C1 = COS(A33)
	DLH = A31+(S*(106892.+S*(S1*C1*(3900.+2280.*C)-S*(C*6712+12516.))
     * +C*33312.+W*(W*227.+200.)+S1*S1*(7574.+C*(2156.+2280.*C)))-
     * S1*C1*(9136.-  90.*C))*4.8481368E-6
	SZH = (57726.*S1+29359.*S*C1-1155.*C*S1+3870.*SIN(A32+A32+A33)+
     * 1138.*SIN(3.*A32+A33)+472.*SIN(A32+A32-A33)+353.*SIN(4.*A32+A33)-
     * 255.*S*C1*(1.-4.*S1*S1)+(33.*C-119.)*S1*(4.*C1*C1-1.))/206264.8
	RH = 41.86345-C*(8.90288+C*(1.93438+C*(.90596+.39968*C)))
	CALL HELGEO(DLH,SZH,RH,RA,DEC,DLE,SZE,R)
	RETURN
	 END