1 /* This file contains code to calculate the libration in Lunar lat and long.
2  * It is based entirely on code supplied to me 2 Oct 1996 by Stephen L. Moshier,
3  * <moshier@world.std.com>, which implements a trigonometric expansion to
4  * approximate the librations according to JPL DE403. The following doc file
5  * was also supplied therewith:
6 
7 This program calculates a trigonometric series adjusted for a best fit
8 to the lunar librations from the Jet Propulsion Laboratory's DE403
9 ephemeris.
10 
11 lblon403.c and lblat403.c are series for the selenographic longitude
12 and latitude of the earth.  The longitude series matches DE403
13 with a maximum discrepancy of 2.6" (0.4" rms).  The latitude has a
14 maximum discrepancy of 1.9" (0.2" rms).  The two series are valid in
15 the Julian year interval 1600 to 2200.
16 
17 In both Eckhardt and DE403 the moon's principal moment of inertia axes
18 form the lunar body coordinate system. The estimated geographic
19 locations of these axes vary as measurements and theories gradually
20 become more refined.  There is a significant difference between
21 Eckhardt and DE403 in the constant term of the longitude.  Almanac and
22 cartography coordinates drop the constant term (which is -64" for
23 DE403).  That practice gives librations relative to the mean
24 selenographic longitude of the earth, for which the discrepancy from
25 one theory to the next is small.
26 
27 Steve Moshier
28 October, 1996
29 
30  * Any errors in adapting this code to xephem are strictly my own.
31  * Elwood Downey.
32 */
33 
34 #include <stdio.h>
35 #include <math.h>
36 
37 #include "astro.h"
38 
39 #define CHAR short
40 
41 
42 /* plantbl.h */
43 
44 struct plantbl {
45   /*  char max_harmonic[9]; */
46   char max_harmonic[14];
47   char max_power_of_t;
48   CHAR *arg_tbl;
49   int *lon_tbl;
50   int *lat_tbl;
51   int *rad_tbl;
52   double distance;
53   double timescale;
54   double trunclvl;
55 };
56 
57 
58 /* libra403.c */
59 
60 static double JD2000 = 2451545.0;
61 /* Conversion factors between degrees and radians */
62 static double STR = 4.8481368110953599359e-6;	/* radians per arc second */
63 
64 static double ss[14][24];
65 static double cc[14][24];
66 
67 /* Reduce arc seconds modulo 360 degrees,
68    answer in arc seconds.  */
69 static double
mods3600(double x)70 mods3600 (double x)
71 {
72   double y;
73   y = x - 1.296e6 * floor (x / 1.296e6);
74   return y;
75 }
76 
77 /* Prepare lookup table of sin and cos ( i * L_k )
78    for required multiple angles.
79    K is the array offset corresponding to the planet.
80    ARG is in radians.
81    n is the highest harmonic to compute.  */
82 static int
sscc(int k,double arg,int n)83 sscc (int k, double arg, int n)
84 {
85   double cu, su, cv, sv, s;
86   int i;
87 
88   if (n <= 0)
89     return 0;
90 
91   su = sin (arg);
92   cu = cos (arg);
93   ss[k][0] = su;		/* sin(L) */
94   cc[k][0] = cu;		/* cos(L) */
95   sv = 2.0 * su * cu;
96   cv = cu * cu - su * su;
97   ss[k][1] = sv;		/* sin(2L) */
98   cc[k][1] = cv;
99   for (i = 2; i < n; i++)
100     {
101       s = su * cv + cu * sv;
102       cv = cu * cv - su * sv;
103       sv = s;
104       ss[k][i] = sv;		/* sin( i+1 L ) */
105       cc[k][i] = cv;
106     }
107   return (0);
108 }
109 
110 
111 /* Mean elements.
112    Copied from cmoon.c, DE404 version.  */
113 
114 static double Jlast = -1.0e38;
115 static double T;
116 
117 static int
dargs(double J,struct plantbl * plan)118 dargs (double J, struct plantbl *plan)
119 {
120   double T2, w;
121 
122   if (J == Jlast)
123     return 0;
124 
125   T = (J - JD2000) / 36525.0;
126   T2 = T * T;
127 
128   /* Mean anomaly of sun = l' (J. Laskar) */
129   w = mods3600 (129596581.038354 * T + 1287104.76154);
130   w += ((((((((
131 		1.62e-20 * T
132 		- 1.0390e-17) * T
133 	      - 3.83508e-15) * T
134 	     + 4.237343e-13) * T
135 	    + 8.8555011e-11) * T
136 	   - 4.77258489e-8) * T
137 	  - 1.1297037031e-5) * T
138 	 + 1.4732069041e-4) * T
139 	- 0.552891801772) * T2;
140   sscc (10, STR * w, plan->max_harmonic[10]);
141 
142   /* Mean distance of moon from its ascending node = F */
143   w = mods3600 ((1739527263.0983 - 2.079419901760e-01) * T + 335779.55755);
144   w = w + ((-9.646018347184e-06 * T2	/* F, t^4 */
145 	    - 1.138215912580e-03) * T	/* F, t^3 */
146 	   - 1.312045233711e+01) * T;	/* F, t^2 */
147   sscc (11, STR * w, plan->max_harmonic[11]);
148 
149   /* Mean anomaly of moon = l */
150   w = mods3600 ((1717915923.4728 - 2.035946368532e-01) * T + 485868.28096);
151   w = w + ((-3.421689790404e-04 * T2	/* l, t^4 */
152 	    + 4.768357585780e-02) * T	/* l, t^3 */
153 	   + 3.146734198839e+01) * T;	/* l, t^2 */
154   sscc (9, STR * w, plan->max_harmonic[9]);
155 
156   /* Mean elongation of moon = D */
157   w = mods3600 ((1602961601.4603 + 3.962893294503e-01) * T + 1072260.73512);
158   w = w + ((-2.905334122698e-04 * T2	/* D, t^4 */
159 	    - 5.834100476561e-03) * T	/* D, t^3 */
160 	   - 6.847070905410e+00) * T;	/* D, t^2 */
161   sscc (12, STR * w, plan->max_harmonic[12]);
162 
163   /* Mean longitude of moon, re mean ecliptic and equinox of date */
164   w = mods3600 ((1732564372.83264 - 6.784914260953e-01) * T + 785939.95571);
165   w = w + ((-8.466472828815e-05 * T2	/* L, t^4 */
166 	    + 5.722859298199e-03) * T	/* L, t^3 */
167 	   - 5.663161722088e+00) * T;	/* L, t^2 */
168   sscc (13, STR * w, plan->max_harmonic[13]);
169 
170   /* Mean longitudes of planets (Laskar, Bretagnon) */
171 
172   /* Venus.  */
173   w = mods3600 (210664136.4335482 * T + 655127.283046);
174   w += ((((((((
175 		-9.36e-023 * T
176 		- 1.95e-20) * T
177 	      + 6.097e-18) * T
178 	     + 4.43201e-15) * T
179 	    + 2.509418e-13) * T
180 	   - 3.0622898e-10) * T
181 	  - 2.26602516e-9) * T
182 	 - 1.4244812531e-5) * T
183 	+ 0.005871373088) * T2;
184   sscc (1, STR * w, plan->max_harmonic[1]);
185 
186   /* Earth.  */
187   w = mods3600 (129597742.26669231 * T + 361679.214649);
188   w += ((((((((-1.16e-22 * T
189 	       + 2.976e-19) * T
190 	      + 2.8460e-17) * T
191 	     - 1.08402e-14) * T
192 	    - 1.226182e-12) * T
193 	   + 1.7228268e-10) * T
194 	  + 1.515912254e-7) * T
195 	 + 8.863982531e-6) * T
196 	- 2.0199859001e-2) * T2;
197   sscc (2, STR * w, plan->max_harmonic[2]);
198 
199   /* Mars.  */
200   w = mods3600 (68905077.59284 * T + 1279559.78866);
201   w += (-1.043e-5 * T + 9.38012e-3) * T2;
202   sscc (3, STR * w, plan->max_harmonic[3]);
203 
204   /* Jupiter.  */
205   w = mods3600 (10925660.428608 * T + 123665.342120);
206   w += (1.543273e-5 * T - 3.06037836351e-1) * T2;
207   sscc (4, STR * w, plan->max_harmonic[4]);
208 
209   /* Saturn.  */
210   w = mods3600 (4399609.65932 * T + 180278.89694);
211   w += ((4.475946e-8 * T - 6.874806E-5) * T + 7.56161437443E-1) * T2;
212   sscc (5, STR * w, plan->max_harmonic[5]);
213   return 0;
214 }
215 
216 
217 
218 /* Evaluate series PLAN at Julian date J.
219    Result in arcseconds, usually.  */
220 
221 static double
gplan(double J,struct plantbl * plan)222 gplan (double J, struct plantbl *plan)
223 {
224   double su, cu, sv, cv;
225   double t, sl;
226   int j, k, m, k1, ip, np, nt;
227   CHAR *p;
228   int *pl;
229 
230   dargs (J, plan);
231   /* Point to start of table of arguments. */
232   p = plan->arg_tbl;
233   /* Point to tabulated cosine and sine amplitudes.  */
234   pl = plan->lon_tbl;
235   sl = 0.0;
236 
237   for (;;)
238     {
239       /* Find sine and cosine of argument for this term in the series.
240 	 The argument has the form J_1 L_1 + J_2 L_2 + ...
241 	 where J_i are integers and L_i are mean elements.  */
242 
243       /* Number of periodic arguments. */
244       np = *p++;
245       if (np < 0)
246 	break;
247       if (np == 0)
248 	{
249 	  /* If no periodic arguments, it is a polynomial term.
250 	     Evaluate A_n T^n + A_n-1 T^n-1 + ... + A_0.  */
251 	  nt = *p++;
252 	  cu = *pl++;
253 	  for (ip = 0; ip < nt; ip++)
254 	    cu = cu * T + *pl++;
255 	  sl += cu;
256 	  continue;
257 	}
258       k1 = 0;
259       cv = 0.0;
260       sv = 0.0;
261       for (ip = 0; ip < np; ip++)
262 	{
263 	  /* What harmonic.  */
264 	  j = *p++;
265 	  /* Which planet.  */
266 	  m = *p++ - 1;
267 	  if (j)
268 	    {
269 	      k = j;
270 	      if (j < 0)
271 		k = -k;
272 	      k -= 1;
273 	      /* sin(k*angle) for planet m.  */
274 	      su = ss[m][k];
275 	      if (j < 0)
276 		su = -su;
277 	      /* cos(k*angle) for planet m.  */
278 	      cu = cc[m][k];
279 	      if (k1 == 0)
280 		{
281 		  /* Set sine and cosine of first angle. */
282 		  sv = su;
283 		  cv = cu;
284 		  k1 = 1;
285 		}
286 	      else
287 		{
288 		  /* Combine angles by trigonometry.  */
289 		  t = su * cv + cu * sv;
290 		  cv = cu * cv - su * sv;
291 		  sv = t;
292 		}
293 	    }
294 	}
295       /* Now cv = cos(arg), sv = sin(arg).
296 	 Evaluate
297 	 cu = (C_n T^n + C_n-1 T^n-1 + ... + C_0) cos(arg)
298 	 su = (S_n T^n + S_n-1 T^n-1 + ... + S_0) sin(arg).  */
299 
300       /* Highest power of T.  */
301       nt = *p++;
302       /* Coefficients C_i, S_i.  */
303       cu = *pl++;
304       su = *pl++;
305       for (ip = 0; ip < nt; ip++)
306 	{
307 	  cu = cu * T + *pl++;
308 	  su = su * T + *pl++;
309 	}
310       sl += cu * cv + su * sv;
311     }
312   return (plan->trunclvl * sl);
313 }
314 
315 
316 /* lblat403.c */
317 
318 static int lattabr[] = {-1};
319 static int lattabb[] = {-1};
320 static int lattabl[] = {
321     785710,
322 
323      -1958,       780,
324 
325       -178,      2850,      2243,      5927,      2714,     -2911,
326 
327       -174,      5888,    -16705,     10828,    -15113,    -25049,
328 
329       -172,      1976,
330 
331         37,    -13560,
332 
333        -40,      -911,
334 
335       -300,       691,
336 
337       3779,       722,
338 
339         68,     -1048,
340 
341      -3092,        -4,      3011,       -31,       250, -14293664,
342 
343       -149,      -228,
344 
345         -5,      -842,
346 
347         62,     57967,
348 
349         -7,    -11207,
350 
351         15,    -66055,
352 
353        -79,    -71560,
354 
355          8,      2998,
356 
357      -1062,       -46,
358 
359         -2,       711,
360 
361         -5,        -2,
362 
363        367,        -5,      -353,         1,      -117,   2324027,
364 
365          0,      -176,
366 
367         19,        -4,
368 
369         -3,     -1229,
370 
371          7,      4327,
372 
373         -2,       112,
374 
375         -1,      -540,
376 
377         73,    102982,
378 
379          0,      -137,
380 
381          2,       239,
382 
383          0,      -216,
384 
385          2,      3707,
386 
387         -1,      -100,
388 
389         -2,       124,
390 
391          0,       408,
392 
393          1,       561,
394 
395          0,       594,
396 
397          0,     11866,
398 
399         -2,      -229,
400 
401         11,      6768,
402 
403          2,         1,
404 
405         -2,      -788,       -24,    314732,
406 
407         -5,     -3238,
408 
409         -2,     -1263,
410 
411         -1,        94,
412 
413         -2,       206,
414 
415       -283,   6489836,
416 
417         63,      2562,
418 
419         -6,      1220,
420 
421          0,       135,
422 
423        795,      -338,
424 
425       -406,      -101,
426 
427        757,      -383,
428 
429        -73,    -31018,
430 
431         -5,     -3010,
432 
433          6,      5821,
434 
435        167,         7,
436 
437          2,    122623,
438 
439         41,    138924,
440 
441          2,       253,
442 
443          0,      -198,
444 
445        135,        30,
446 
447          2,       934,
448 
449         62,       -14,
450 
451       -531,   -297537,
452 
453         -3,      -205,
454 
455          1,      -393,
456 
457         -4,      -156,
458 
459       -467,        90,
460 
461          9,      -346,
462 
463        -55,      1368,
464 
465       4414,      2094,
466 
467        480,       510,
468 
469         35,       728,
470 
471       6832,      6429,
472 
473      -2099,     -3703,
474 
475         -9,       579,
476 
477        239,      1738,
478 
479         22,       968,     60260,     -8929,
480 
481         26,       -64,
482 
483          0,         0,
484 
485        -47,      -351,      2248,     -1175,      3976,      7150,
486 
487      15191,         1,    -15535,      -143,     -2308,-239959618,
488 
489        -45,       355,      2252,      1189,      4009,     -7131,
490 
491       -158,       499,
492 
493        776,       -34,
494 
495       -389,      4363,
496 
497         30,        28,
498 
499          0,      -593,
500 
501          1,        -1,
502 
503         58,       -66,
504 
505          4,      1552,
506 
507         -1,       244,
508 
509        288,        59,
510 
511       -276,        62,
512 
513          8,      3309,
514 
515          2,      1249,
516 
517       -156,        -3,
518 
519          0,     -7903,
520 
521        -47,    154458,
522 
523       -710,       160,
524 
525          0,       288,
526 
527        328,    219514,
528 
529         -1,       113,
530 
531         -1,      1515,
532 
533        -20,     28493,
534 
535         13,      9011,
536 
537         -1,      1110,
538 
539         -1,      -103,
540 
541          0,       312,
542 
543          1,       360,
544 
545          6,      6139,
546 
547         -1,       142,
548 
549         -1,      -709,
550 
551         -1,      -242,
552 
553         67,     67200,
554 
555          5,      4148,
556 
557          1,       137,
558 
559        -15,    -17969,
560 
561         -2,     -3372,
562 
563         -2,     -1739,
564 
565        154,    116200,
566 
567         -1,      -640,
568 
569       -269,   -336274,
570 
571          0,     -1557,
572 
573         -1,      -353,
574 
575        993,        39,
576 
577         -1,      -294,
578 
579       -646,      -135,
580 
581        750,        -3,      -661,         8,      -163,   2591179,
582 
583         -1,      -258,
584 
585          0,       381,
586 
587          6,      8272,
588 
589        -44,    -92044,
590 
591        -29,     70397,
592 
593        -25,    -17892,
594 
595          1,        67,
596 
597        -44,    -17118,
598 
599       2743,       349,
600 
601         -4,       231,
602 
603       1501,      3099,
604 
605        -33,        21,
606 
607      -1130,        97,      1263,       164,      -226, -13139965,
608 
609        839,      -202,
610 
611         -1,       660,
612 
613         12,    -10482,
614 
615          1,        17,
616 
617         -2,     -1480,
618 
619        -45,    -26084,
620 
621          2,       259,
622 
623          0,       258,
624 
625         -1,     -1560,
626 
627         32,     73046,
628 
629         -1,      -370,
630 
631         -1,       -77,
632 
633         46,     20687,
634 
635          1,       742,
636 
637          1,      2399,
638 
639          2,       741,
640 
641          0,        52,
642 
643          0,       112,
644 
645          0,       297,
646 
647          2,       825,
648 
649          0,       161,
650 
651          1,      4228,
652 
653          0,       212,
654 
655         -1,      -105,
656 
657          6,      2782,
658 
659          9,     37199,
660 
661          3,      5045,
662 
663        105,        -1,
664 
665         -1,      -179,
666 
667         75,     31274,
668 
669         -3,     -1321,
670 
671         -1,       363,
672 
673          0,      1137,
674 
675         58,    104090,
676 
677         -2,     -2695,
678 
679         -1,      -392,
680 
681        -35,    -21763,
682 
683         -2,      -205,
684 
685        567,        38,
686 
687         -7,       117,
688 
689       -569,        -9,       321,  -1522061,
690 
691         -4,       276,
692 
693         -2,      -590,
694 
695          2,       632,
696 
697        -14,    -10601,
698 
699          4,      8703,
700 
701        -10,     16870,
702 
703         -4,      -995,
704 
705        597,        -6,      -386,   -805403,
706 
707       1025,      -474,
708 
709         -2,       201,
710 
711        -95,        16,
712 
713       -127,    135570,
714 
715          0,      -173,
716 
717         10,      8565,
718 
719         -3,      1812,
720 
721         -1,      -108,
722 
723       -107,      -649,
724 
725          0,       151,
726 
727          1,       950,
728 
729          1,       312,
730 
731          1,       403,
732 
733          0,      -576,
734 
735          7,      4418,
736 
737         -3,     -4769,
738 
739         -1,      -769,
740 
741         63,     38890,
742 
743          0,      -101,
744 
745          0,       169,
746 
747         -3,    -14837,
748 
749          1,       372,
750 
751          0,      -674,
752 
753         -3,     -1488,
754 
755        -36,   -196300,
756 
757          0,      -176,
758 
759        -10,     -4811,
760 
761         -2,      -991,
762 
763          1,       831,
764 
765          1,      3138,
766 
767       -103,    -51819,
768 
769          0,      -133,
770 
771         -4,     22171,
772 
773          2,       820,
774 
775          1,       149,
776 
777       2227,      1277,
778 
779       -502,     -3049,
780 
781          1,       122,
782 
783          0,       370,
784 
785          0,       166,
786 
787          2,       772,
788 
789          2,      2057,
790 
791         -1,      -486,
792 
793         13,    -15447,
794 
795         -2,     -1619,
796 
797          0,       335,
798 
799          0,      -206,
800 
801          0,      -104,
802 
803        -19,    -19726,
804 
805          0,       414,
806 
807         -8,     -3425,
808 
809        -19,        -1,
810 
811          1,       546,
812 
813          0,      -392,
814 
815          0,     -2754,
816 
817          0,      -158,
818 
819         -3,     -1790,
820 
821         -1,      -230,
822 
823          0,      -190,
824 
825          0,      -366,
826 
827          0,      -154,
828 
829 };
830 
831 static CHAR latargs[] = {
832   0,  0,
833   3,  1,  2,  9,  3,-20,  4,  0,
834   4,  1, 13, -1, 10,  3,  2, -4,  3,  2,
835   4,  1, 13, -1, 10, -5,  2,  9,  3,  2,
836   3,  9, 10, -9, 14,  1,  3,  0,
837   3,  1, 11, -1, 12,  1, 13,  0,
838   4,  1, 10, -2, 11,  1, 12, -2, 13,  0,
839   4,  2, 11, -1, 14, 18,  2,-18,  3,  0,
840   3,  1, 13, -1, 10,  1,  3,  0,
841   2,  1, 10, -1, 14,  0,
842   2,  1, 10, -1, 12,  2,
843   4,  1, 14,-18,  2, 16,  3,  1,  5,  0,
844   3,  2, 10, -1, 12, -1, 13,  0,
845   3,  1, 10,  1, 11, -1, 12,  0,
846   4,  1, 10, -1, 11,  1, 12, -2, 13,  0,
847   2,  1, 12, -1, 13,  0,
848   3,  1, 10, -1, 11, -1, 12,  0,
849   3,  3, 10, -1, 12, -2, 13,  0,
850   2,  2, 10, -2, 13,  0,
851   3,  1, 10,  2, 11, -1, 12,  0,
852   3,  1, 10, -2, 13,  1,  3,  0,
853   3,  1, 10,  1, 12, -2, 13,  2,
854   3,  1, 11,  1, 12, -1, 13,  0,
855   2,  2, 12, -2, 13,  0,
856   3,  1, 10, -2, 11, -1, 12,  0,
857   3,  1, 10, -3, 12,  2, 13,  0,
858   4,  3, 10,  1, 11, -1, 12, -2, 13,  0,
859   3,  2, 10,  1, 12, -3, 13,  0,
860   4,  1, 10,  1, 11,  1, 12, -2, 13,  0,
861   2,  3, 12, -3, 13,  0,
862   4,  1, 10, -1, 11, -3, 12,  2, 13,  0,
863   3,  3, 10,  1, 12, -4, 13,  0,
864   4,  1, 10,  2, 11,  1, 12, -2, 13,  0,
865   3,  1, 10,  3, 12, -4, 13,  0,
866   4,  1, 10,  3, 11,  1, 12, -2, 13,  0,
867   3,  3, 11,  1, 12, -2, 13,  0,
868   4,  2, 10,  1, 11,  1, 12, -4, 13,  0,
869   2,  3, 12, -4, 13,  0,
870   3,  2, 11,  1, 12, -2, 13,  0,
871   4,  1, 10,  1, 11,  1, 12, -3, 13,  0,
872   3,  2, 10,  1, 12, -4, 13,  0,
873   4,  1, 14, -3,  2,-16,  3, -4,  4,  0,
874   3,  1, 11,  1, 12, -2, 13,  1,
875   3,  1, 10,  1, 12, -3, 13,  0,
876   4,  2, 10,  1, 11, -1, 12, -2, 13,  0,
877   3,  2, 10, -3, 12,  2, 13,  0,
878   4,  1, 10, -1, 11, -1, 12,  1, 13,  0,
879   2,  1, 12, -2, 13,  0,
880   2,  2, 13, -1, 14,  0,
881   2,  2, 11, -1, 12,  0,
882   4,  1, 10, -1, 11,  1, 12, -3, 13,  0,
883   3,  2, 10, -3, 14,  4,  4,  0,
884   2,  1, 10, -2, 13,  0,
885   3,  1, 13, -3,  3,  4,  4,  0,
886   3,  2, 10, -1, 12, -2, 13,  0,
887   3,  2, 10, -1, 11, -1, 12,  0,
888   3,  1, 10, -1, 12,  1, 13,  0,
889   2,  1, 10, -1, 11,  0,
890   3,  1, 11, -1, 12,  2, 13,  0,
891   2,  1, 11, -1, 12,  0,
892   3,  1, 10, -1, 12, -1, 13,  0,
893   4,  2, 13, -1, 12,  2,  2, -2,  3,  0,
894   3,  1, 13,  2,  2, -3,  3,  0,
895   4,  2, 10, -1, 11, -1, 12, -2, 13,  0,
896   3,  1, 13, -1,  2,  2,  3,  0,
897   2,  2, 10, -1, 12,  0,
898   4,  2, 13, -1, 12,  2,  3, -2,  5,  0,
899   4,  2, 13, -1, 12,  3,  2, -3,  3,  0,
900   4,  2, 10, -2, 11,  1, 12, -2, 13,  0,
901   3,  1, 13,  1,  3, -2,  5,  0,
902   4,  1, 10,  1, 11, -1, 12,  1, 13,  0,
903   3,  1, 13, -5,  2,  9,  3,  0,
904   3,  1, 14,  2,  3, -4,  4,  0,
905   3,  3, 10,  4, 12, -6, 14,  0,
906   3,  1, 13,  3,  2, -4,  3,  0,
907   1,  1, 10,  0,
908   3,  1, 13, -3, 12,  9,  2,  0,
909   4,  1, 10, -1, 11,  1, 12, -1, 13,  0,
910   3,  2, 11, -1, 12,  2, 13,  0,
911   1,  1, 14,  1,
912   4,  1, 12,  1, 10, -1, 14,  1,  5,  0,
913   4,  9, 13, -9, 10,  7,  2, 10,  3,  0,
914   3,  1, 12, -8,  2, 13,  3,  2,
915   1,  1, 12,  2,
916   3,  1, 12,  8,  2,-13,  3,  2,
917   2,  1, 13,  2,  4,  0,
918   4,  2, 13, -1, 12,  5,  2, -6,  3,  0,
919   3,  1, 13, -2, 12,  1,  3,  0,
920   3,  1, 13, -3,  2,  6,  3,  0,
921   4,  1, 10, -1, 11, -1, 12, -1, 13,  0,
922   2,  1, 14,  2,  5,  0,
923   2,  1, 10, -2, 12,  0,
924   2,  2, 10, -3, 12,  0,
925   4,  2, 13, -1, 12,  4,  2, -4,  3,  0,
926   3,  1, 14,  4,  2, -6,  3,  0,
927   2,  1, 13,  1,  2,  0,
928   3,  2, 10,  1, 11, -1, 12,  0,
929   4,  2, 10, -1, 11,  1, 12, -2, 13,  0,
930   2,  1, 10,  1, 11,  0,
931   3,  1, 10,  1, 12, -1, 13,  0,
932   2,  1, 11,  1, 12,  0,
933   3,  3, 12, -2, 13, -1,  3,  0,
934   3,  4, 10, -1, 12, -2, 13,  0,
935   3,  2, 10,  1, 12, -2, 13,  0,
936   4,  1, 10,  1, 11,  1, 12, -1, 13,  0,
937   2,  2, 11,  1, 12,  0,
938   2,  3, 12, -2, 13,  0,
939   4,  2, 10,  1, 11,  1, 12, -2, 13,  0,
940   3,  1, 11,  3, 12, -2, 13,  0,
941   3,  4, 10,  1, 12, -4, 13,  0,
942   4,  2, 10,  2, 11,  1, 12, -2, 13,  0,
943   4,  1, 10,  2, 11,  1, 12, -4, 13,  0,
944   4,  1, 10,  1, 11,  1, 12, -4, 13,  0,
945   4,  1, 10,  3, 11, -1, 12, -2, 13,  0,
946   4,  1, 10, -2, 11, -1, 12,  2, 13,  0,
947   3,  1, 11,  1, 12, -3, 13,  0,
948   3,  1, 10,  1, 12, -4, 13,  0,
949   4,  1, 10,  2, 11, -1, 12, -2, 13,  0,
950   3,  3, 10, -1, 12, -4, 13,  0,
951   4,  1, 10, -1, 11, -1, 12,  2, 13,  0,
952   2,  1, 12, -3, 13,  0,
953   4,  1, 10, -1, 11,  1, 12, -4, 13,  0,
954   4,  1, 10,  1, 11, -1, 12, -2, 13,  0,
955   3,  2, 10, -1, 12, -3, 13,  0,
956   3,  1, 10, -1, 12,  2, 13,  0,
957   3,  1, 10, -2, 11,  1, 12,  0,
958   3,  1, 11, -1, 12,  3, 13,  0,
959   1,  2, 13,  0,
960   3,  1, 11, -1, 12, -1, 13,  0,
961   3,  1, 10, -3, 13, -1,  3,  0,
962   3,  1, 10, -1, 12, -2, 13,  2,
963   3,  3, 10, -1, 11, -1, 12,  0,
964   3,  2, 10, -1, 12,  1, 13,  0,
965   4,  1, 10,  1, 11, -1, 12,  2, 13,  0,
966   3,  1, 10, -1, 11,  1, 12,  0,
967   2,  1, 12,  1, 13,  0,
968   4,  1, 10, -1, 11, -1, 12, -2, 13,  0,
969   3,  1, 10,  1, 11, -3, 12,  0,
970   2,  3, 10, -1, 12,  0,
971   1,  2, 10,  0,
972   4,  2, 10, -1, 11,  1, 12, -1, 13,  0,
973   3,  1, 13,  1, 10,  1, 11,  0,
974   3,  2, 13,  3,  3, -2, 11,  0,
975   2,  1, 10,  1, 12,  2,
976   3,  1, 10, -3, 14,  2,  5,  0,
977   3,  3, 10, -1, 14,  4,  5,  0,
978   3,  1, 11,  1, 12,  1, 13,  0,
979   1,  2, 12,  0,
980   4,  1, 10, -2, 11, -1, 12, -2, 13,  0,
981   2,  1, 10, -3, 12,  0,
982   3,  3, 10,  1, 11, -1, 12,  0,
983   4,  3, 10, -1, 11,  1, 12, -2, 13,  0,
984   3,  2, 10,  1, 12, -1, 13,  0,
985   3,  1, 10,  1, 11,  1, 12,  0,
986   2,  3, 12, -1, 13,  0,
987   3,  1, 10, -1, 11, -3, 12,  0,
988   3,  3, 10,  1, 12, -2, 13,  0,
989   3,  1, 10,  2, 11,  1, 12,  0,
990   3,  1, 10,  3, 12, -2, 13,  0,
991   4,  3, 10,  1, 11,  1, 12, -2, 13,  0,
992   4,  1, 10,  1, 11,  3, 12, -2, 13,  0,
993   4,  2, 10,  1, 11,  1, 12, -6, 13,  0,
994   3,  2, 11,  1, 12, -4, 13,  0,
995   3,  2, 10,  1, 12, -6, 13,  0,
996   4,  2, 10,  2, 11, -1, 12, -4, 13,  0,
997   3,  1, 11,  1, 12, -4, 13,  0,
998   3,  3, 11, -1, 12, -2, 13,  0,
999   3,  1, 10,  1, 12, -5, 13,  0,
1000   4,  2, 10,  1, 11, -1, 12, -4, 13,  0,
1001   2,  1, 12, -4, 13,  0,
1002   3,  2, 11, -1, 12, -2, 13,  0,
1003   2,  1, 10, -4, 13,  0,
1004   4,  1, 10,  1, 11, -1, 12, -3, 13,  0,
1005   3,  2, 10, -1, 12, -4, 13,  0,
1006   4,  2, 10, -1, 11, -1, 12,  2, 13,  0,
1007   3,  1, 10, -1, 12,  3, 13,  0,
1008   3,  1, 11, -1, 12,  4, 13,  0,
1009   3,  1, 11, -1, 12, -2, 13,  0,
1010   3,  1, 10, -1, 12, -3, 13,  0,
1011   4,  2, 10, -1, 11, -1, 12, -4, 13,  0,
1012   3,  2, 10, -1, 12,  2, 13,  0,
1013   3,  2, 10, -2, 11,  1, 12,  0,
1014   2,  1, 10,  2, 13,  0,
1015   4,  1, 10, -1, 11,  1, 12,  1, 13,  0,
1016   2,  1, 12,  2, 13,  1,
1017   4,  1, 10, -1, 11, -1, 12, -3, 13,  0,
1018   3,  2, 10, -3, 12, -2, 13,  0,
1019   4,  2, 10,  1, 11, -1, 12,  2, 13,  0,
1020   3,  2, 10, -1, 11,  1, 12,  0,
1021   3,  1, 10,  1, 12,  1, 13,  0,
1022   3,  1, 11,  1, 12,  2, 13,  0,
1023   2,  4, 10, -1, 12,  0,
1024   2,  2, 10,  1, 12,  1,
1025   4,  1, 13,  1, 12, 10,  2, -2,  3,  0,
1026   3,  2, 11,  1, 12,  2, 13,  0,
1027   2,  2, 12,  1, 14,  0,
1028   1,  3, 12,  0,
1029   3,  3, 10,  1, 12, -1, 13,  0,
1030   3,  2, 10,  1, 11,  1, 12,  0,
1031   3,  4, 10,  1, 12, -2, 13,  0,
1032   3,  2, 10,  3, 12, -2, 13,  0,
1033   3,  4, 10, -9,  3, -1,  4,  0,
1034   4,  1, 10,  1, 11,  1, 12, -6, 13,  0,
1035   3,  1, 10,  1, 12, -6, 13,  0,
1036   4,  1, 10,  2, 11, -1, 12, -4, 13,  0,
1037   3,  3, 10, -1, 12, -6, 13,  0,
1038   4,  1, 10, -1, 11, -1, 12,  4, 13,  0,
1039   4,  1, 10,  1, 11, -1, 12, -4, 13,  0,
1040   3,  1, 10, -1, 12,  4, 13,  0,
1041   4,  1, 10, -2, 11,  1, 12,  2, 13,  0,
1042   3,  1, 10, -1, 12, -4, 13,  0,
1043   4,  3, 10, -1, 11, -1, 12,  2, 13,  0,
1044   4,  1, 10,  1, 11, -1, 12,  4, 13,  0,
1045   4,  1, 10, -1, 11,  1, 12,  2, 13,  0,
1046   2,  1, 12,  3, 13,  0,
1047   4,  1, 10, -1, 11, -1, 12, -4, 13,  0,
1048   3,  3, 10, -1, 12,  2, 13,  0,
1049   3,  1, 10,  1, 12,  2, 13,  0,
1050   3,  1, 11,  1, 12,  3, 13,  0,
1051   3,  1, 10, -3, 12, -2, 13,  0,
1052   3,  3, 10, -1, 11,  1, 12,  0,
1053   3,  2, 10,  1, 12,  1, 13,  0,
1054   4,  1, 10,  1, 11,  1, 12,  2, 13,  0,
1055   2,  3, 10,  1, 12,  0,
1056   4,  2, 10,  1, 11,  1, 12,  1, 13,  0,
1057   2,  1, 10,  3, 12,  0,
1058   3,  3, 10,  1, 11,  1, 12,  0,
1059   3,  5, 10,  1, 12, -2, 13,  0,
1060   3,  4, 14, -4,  2,  8,  3,  0,
1061   3,  5, 10, -9,  3, -1,  4,  0,
1062   4,  2, 10,  1, 11, -1, 12, -6, 13,  0,
1063   2,  1, 12, -6, 13,  0,
1064   3,  2, 11, -1, 12, -4, 13,  0,
1065   3,  2, 10, -1, 12, -6, 13,  0,
1066   3,  1, 11, -1, 12, -4, 13,  0,
1067   3,  2, 10, -1, 12,  4, 13,  0,
1068   2,  1, 12,  4, 13,  0,
1069   4,  2, 10, -1, 11,  1, 12,  2, 13,  0,
1070   3,  1, 11,  1, 12,  4, 13,  0,
1071   3,  1, 11, -3, 12, -2, 13,  0,
1072   3,  4, 10, -1, 12,  2, 13,  0,
1073   3,  2, 10,  1, 12,  2, 13,  0,
1074   4,  2, 10,  1, 11,  1, 12,  2, 13,  0,
1075   2,  4, 10,  1, 12,  0,
1076   3,  7, 12, -2, 10, -4,  5,  0,
1077   3,  1, 10, -1, 12, -6, 13,  0,
1078   4,  1, 10, -1, 11,  1, 12,  4, 13,  0,
1079   3,  1, 10,  1, 12,  4, 13,  0,
1080   4,  3, 10, -1, 11,  1, 12,  2, 13,  0,
1081   3,  3, 10,  1, 12,  2, 13,  0,
1082   2,  5, 10,  1, 12,  0,
1083   2,  1, 12,  6, 13,  0,
1084   3,  2, 10,  1, 12,  4, 13,  0,
1085   3,  4, 10,  1, 12,  2, 13,  0,
1086  -1
1087 };
1088 
1089 /* Total terms = 254, small = 254 */
1090 static struct plantbl liblat = {
1091   /*  {  0, 18, 18, 20,  4,  0,  0,  0,  0,  9,  3,  7,  9,  9,}, */
1092   /* Use max of liblon, liblat.  */
1093   {  0, 18, 18, 20,  4,  2,  0,  0,  0,  9, 16,  7,  9,  9,},
1094  2,
1095  latargs,
1096  lattabl,
1097  lattabb,
1098  lattabr,
1099  3.850000e+05,
1100  36525.0,
1101  1.0e-4,
1102 };
1103 
1104 /* lblon403.c */
1105 static int lontabr[] = {-1};
1106 static int lontabb[] = {-1};
1107 static int lontabl[] = {
1108    -640001,
1109 
1110        -19,         3,
1111 
1112         -1,         0,
1113 
1114         -3,        17,
1115 
1116          2,        -9,
1117 
1118          2,         3,
1119 
1120        141,      1816,
1121 
1122          2,       -76,
1123 
1124         78,       -81,
1125 
1126          3,         1,
1127 
1128         50,       -13,
1129 
1130        -12,        18,
1131 
1132         -6,        74,
1133 
1134         19,        10,
1135 
1136        -19,       701,
1137 
1138        -26,        37,
1139 
1140         36,      -122,
1141 
1142        131,       -71,
1143 
1144        -40,         1,
1145 
1146      61463,     12853,
1147 
1148          5,       -29,
1149 
1150        354,       201,
1151 
1152         94,        -5,
1153 
1154         31,        25,
1155 
1156        -73,       -22,
1157 
1158        673,      1435,
1159 
1160       3844,        44,
1161 
1162        -44,        -8,
1163 
1164        195,       -16,
1165 
1166       -827,   -171768,
1167 
1168       7051,     -4116,
1169 
1170       1036,       616,     -2034,      6300,    -13786,     -3808,
1171 
1172       -118,      -536,     -1246,       771,      2555,      3214,
1173 
1174        203,        26,
1175 
1176       2975,      -715,
1177 
1178       -743,      1286,
1179 
1180       -232,       -50,
1181 
1182          4,       234,
1183 
1184       -139,       475,
1185 
1186          0,       -98,
1187 
1188         -3,    -11848,
1189 
1190          0,       118,
1191 
1192       -202,       146,
1193 
1194     -33673,      7601,
1195 
1196       -150,        88,
1197 
1198      -1720,      1002,
1199 
1200       -293,       481,
1201 
1202      -2078,         1,
1203 
1204        199,    220655,
1205 
1206        137,      7459,
1207 
1208       -127,        28,
1209 
1210        -10,      2259,
1211 
1212          4,       450,
1213 
1214        -26,        30,       -76,     19043,       215,  -7577830,
1215 
1216        -65,       -45,
1217 
1218         -5,    -14189,
1219 
1220         -6,      -496,
1221 
1222          9,      3265,
1223 
1224          0,      -131,
1225 
1226         48,       -90,
1227 
1228         -9,      -155,
1229 
1230         -2,        21,
1231 
1232        151,        19,
1233 
1234       -101,      -516,
1235 
1236       -827,         3,       796,         2,       134,  -2215850,
1237 
1238        -11,     -1908,
1239 
1240          0,       451,
1241 
1242         -2,      1399,
1243 
1244          3,         7,
1245 
1246       -163,         5,
1247 
1248      -1582,        61,
1249 
1250        -22,    -77215,
1251 
1252        167,   -471084,
1253 
1254        -85,       -28,
1255 
1256          1,      -473,
1257 
1258         -1,       444,
1259 
1260          4,        89,
1261 
1262          6,       -88,
1263 
1264       -157,    -87813,
1265 
1266          3,       274,
1267 
1268         -3,     -1036,
1269 
1270          7,    -17005,
1271 
1272         -1,      -332,
1273 
1274          0,        50,
1275 
1276         -1,      -228,
1277 
1278         -5,     -2986,
1279 
1280         -1,      -334,
1281 
1282          1,      -452,
1283 
1284          0,         4,
1285 
1286          0,      -247,
1287 
1288         -3,     -2493,
1289 
1290         -4,     -1000,
1291 
1292          0,      -160,
1293 
1294          0,     -3163,
1295 
1296        -75,    -74207,
1297 
1298         13,       829,
1299 
1300         32,       481,
1301 
1302        -33,    -11859,
1303 
1304         -2,     -3634,
1305 
1306          7,     -1611,
1307 
1308          3,       520,
1309 
1310         -1,      2534,
1311 
1312          5,      -446,
1313 
1314       -471,         8,       399,      5160,       201,  -2057189,
1315 
1316         83,     -2106,
1317 
1318         11,     12240,
1319 
1320          3,      -270,
1321 
1322        248,      1112,
1323 
1324        -63,    -61809,
1325 
1326       -183,       594,
1327 
1328         27,     25844,
1329 
1330         -3,      5594,
1331 
1332          8,       571,
1333 
1334        -23,     -1855,
1335 
1336        477,      -466,
1337 
1338          0,     -1257,
1339 
1340        247,      1550,
1341 
1342     -10178,      -175,      9570,      -423,      2610, -45917681,
1343 
1344        -51,       937,
1345 
1346      -1001,       168,
1347 
1348       -168,       882,
1349 
1350       1260,     -2894,      4306,     -1515,
1351 
1352          7,       402,
1353 
1354          0,        36,
1355 
1356       -280,      -373,
1357 
1358        -19,       840,
1359 
1360      -1227,      -138,
1361 
1362       3486,   1478247,
1363 
1364       1649,      -644,
1365 
1366        840,       377,
1367 
1368         47,     -1464,
1369 
1370        167,  -1251123,
1371 
1372       -194,      -713,       133,    284429,
1373 
1374          0,      -191,
1375 
1376         -3,      1534,
1377 
1378       -700,       918,
1379 
1380         -7,      -633,
1381 
1382       -221,      -559,
1383 
1384          1,        99,
1385 
1386        -17,     -3513,
1387 
1388        -30,        14,
1389 
1390       -602,     -5006,
1391 
1392        908,      4178,
1393 
1394        542,      -379,
1395 
1396       1568,       782,       528,      2761,
1397 
1398     -38994,    -25804,
1399 
1400    1696398,   -324306,
1401 
1402      47292,     71061,    457883,     52470,    159777, 224906030,
1403 
1404     -13068,    -18508,
1405 
1406       -104,      3754,
1407 
1408        541,       614,      -290,      1412,
1409 
1410        -48,       162,
1411 
1412         42,       -50,
1413 
1414       -609,     -4969,
1415 
1416         44,    -11435,
1417 
1418       -473,      -412,
1419 
1420         22,     -6389,
1421 
1422        -87,        44,
1423 
1424        -39,    180182,
1425 
1426      -4186,     -2227,
1427 
1428       -503,      -208,
1429 
1430        976,      -512,     -1016,     -4403,
1431 
1432         16,     25357,
1433 
1434        565,      -891,
1435 
1436         28,     38836,
1437 
1438       -659,      -855,
1439 
1440       -200,       619,
1441 
1442          1,     -1780,
1443 
1444         24,     17531,
1445 
1446       1053,       335,
1447 
1448        502,      2745,      -309,  -1094576,
1449 
1450         -1,      -263,
1451 
1452          3,      -394,
1453 
1454          0,      4152,
1455 
1456         -1,      -467,
1457 
1458       -339,   -132142,
1459 
1460        -14,    -11676,
1461 
1462         29,     63360,
1463 
1464          0,       129,
1465 
1466        -12,     -4802,
1467 
1468         -1,      -180,
1469 
1470          2,      3424,
1471 
1472          0,        45,
1473 
1474         -1,      -155,
1475 
1476         -1,       -74,
1477 
1478          0,      -134,
1479 
1480         -4,     -1588,
1481 
1482         -1,     -3424,
1483 
1484          2,       119,
1485 
1486        -57,    -27417,
1487 
1488          0,       168,
1489 
1490          0,       206,
1491 
1492        -21,    -80823,
1493 
1494          8,      2324,
1495 
1496         -4,       835,
1497 
1498        396,        -6,      -244,   -308040,
1499 
1500          0,      -294,
1501 
1502        -56,     -1332,
1503 
1504          2,      -110,
1505 
1506        306,      4060,       -58,  -1644587,
1507 
1508       -155,      -210,
1509 
1510         67,     -1642,
1511 
1512         27,     32070,
1513 
1514          9,      3592,
1515 
1516         -8,       -17,
1517 
1518         -1,         2,
1519 
1520         -9,     -4580,
1521 
1522          5,      1940,
1523 
1524          5,     -1217,
1525 
1526         62,      -862,
1527 
1528       -522,     -1163,
1529 
1530          0,         0,
1531 
1532      -1646,         1,      1169,       109,      1395,  23634968,
1533 
1534          2,         0,
1535 
1536       -512,      1148,
1537 
1538         -9,        32,
1539 
1540          0,     -2749,
1541 
1542        969,        -4,
1543 
1544          2,       351,
1545 
1546          1,       105,
1547 
1548        152,     97075,
1549 
1550        -55,    -84524,
1551 
1552        -49,       607,        29,   -242117,
1553 
1554          4,      6518,
1555 
1556          5,       -77,
1557 
1558          1,       -39,
1559 
1560          9,         1,
1561 
1562          5,      -231,
1563 
1564       2296,       -10,     -2453,         3,       138,   7689964,
1565 
1566          0,      -689,
1567 
1568          1,     12635,
1569 
1570       5444,       372,
1571 
1572          9,     -1843,
1573 
1574       3485,      -560,
1575 
1576        909,         3,      -742,        -1,       -66,  -6945414,
1577 
1578          8,        -7,
1579 
1580         -3,      -181,
1581 
1582          1,      1282,
1583 
1584       -115,    -76497,
1585 
1586          3,       -90,
1587 
1588          1,      -142,
1589 
1590         -5,     10263,
1591 
1592        -33,     -9479,
1593 
1594          0,      -657,
1595 
1596         19,     15040,
1597 
1598         -2,      1084,
1599 
1600         -1,      -295,
1601 
1602       -161,       403,
1603 
1604          0,      -175,
1605 
1606         -1,      -392,
1607 
1608         -4,     -3096,
1609 
1610         -9,     -2928,
1611 
1612          1,       332,
1613 
1614        -56,    -43733,
1615 
1616          1,       572,
1617 
1618          2,      -660,
1619 
1620          4,      7540,
1621 
1622          4,      -659,
1623 
1624       -505,   -382941,
1625 
1626         -3,       256,
1627 
1628          2,        30,
1629 
1630         76,    145296,
1631 
1632         -4,      4115,
1633 
1634          9,      6329,
1635 
1636         11,      6962,
1637 
1638          0,      -338,
1639 
1640          1,       153,
1641 
1642          2,      -147,
1643 
1644       -270,       211,
1645 
1646       -519,        97,       385,   1912268,
1647 
1648         -1,      1495,
1649 
1650         -3,       223,
1651 
1652        254,    152832,
1653 
1654         15,      6709,
1655 
1656         -8,     -5835,
1657 
1658        -12,    -29016,
1659 
1660          0,     -5641,
1661 
1662         -2,      4217,
1663 
1664         -2,     -1176,
1665 
1666       -496,         4,       331,    360972,
1667 
1668          1,       918,
1669 
1670         -2,      -136,
1671 
1672       -111,   -762309,
1673 
1674          2,      -610,
1675 
1676          1,        96,
1677 
1678        -11,     -5468,
1679 
1680          0,      4856,
1681 
1682          0,        -2,
1683 
1684        -16,      -668,
1685 
1686         20,      1963,
1687 
1688         -1,       -95,
1689 
1690          0,       -83,
1691 
1692          0,       -96,
1693 
1694         -2,      -902,
1695 
1696          0,     -1523,
1697 
1698        -14,     -5691,
1699 
1700        -10,    -18650,
1701 
1702          0,       131,
1703 
1704          0,       128,
1705 
1706          0,       243,
1707 
1708          1,       644,
1709 
1710        -76,    138046,
1711 
1712         -1,       316,
1713 
1714          8,      2703,
1715 
1716         15,     11758,
1717 
1718         -1,        16,
1719 
1720          2,     -2867,
1721 
1722          5,      6504,
1723 
1724        180,    143085,
1725 
1726         -1,       224,
1727 
1728         86,    -96384,
1729 
1730          1,       471,
1731 
1732          0,      -407,
1733 
1734         -3,     -2886,
1735 
1736         -1,      -919,
1737 
1738          0,       742,
1739 
1740         -2,      1145,
1741 
1742         59,     19306,
1743 
1744          0,        67,
1745 
1746        -61,    -67569,
1747 
1748        -14,     11725,
1749 
1750         -1,      -395,
1751 
1752          1,       772,
1753 
1754         -1,       -49,
1755 
1756        563,       871,      1951,       -22,
1757 
1758         -1,      -711,
1759 
1760          0,       240,
1761 
1762         -6,     -3912,
1763 
1764          1,      2812,
1765 
1766          0,       106,
1767 
1768          0,       378,
1769 
1770          4,     19609,
1771 
1772          6,      3331,
1773 
1774          2,       930,
1775 
1776          0,       -37,
1777 
1778          0,      -502,
1779 
1780          0,     -1257,
1781 
1782         21,     10531,
1783 
1784          2,    -16662,
1785 
1786          0,      -267,
1787 
1788         -1,        22,
1789 
1790          6,      1104,
1791 
1792        -14,     -5544,
1793 
1794          1,      -250,
1795 
1796         -1,      1248,
1797 
1798          0,       325,
1799 
1800          2,      2163,
1801 
1802          2,     -1421,
1803 
1804          0,        73,
1805 
1806         -1,       -67,
1807 
1808          2,       771,
1809 
1810         -1,     -2085,
1811 
1812          0,        67,
1813 
1814          1,       226,
1815 
1816          1,       212,
1817 
1818          0,        56,
1819 
1820 };
1821 
1822 static CHAR lonargs[] = {
1823   0,  0,
1824   4,  1, 10,  3, 11,-18,  2, 13,  3,  0,
1825   4, -2, 12,  2, 13,  5,  2, -6,  3,  0,
1826   4,  2, 10, -2, 13, -2,  3,  3,  5,  0,
1827   3,  1, 10, -1, 14,  1,  5,  0,
1828   4, -2, 10,  2, 13, -5,  3, -6,  4,  0,
1829   2,  1, 12, -1, 14,  0,
1830   4, -2, 10,  2, 13,  2,  3, -2,  5,  0,
1831   2,  1,  3, -2,  4,  0,
1832   4, -1, 12,  1, 13, -3,  2,  6,  3,  0,
1833   1,  1,  5,  0,
1834   4, -1, 10,  2, 13,-15,  2, 13,  3,  0,
1835   4,  2, 10, -2, 13, -3,  2,  3,  3,  0,
1836   2,  2, 12, -2, 14,  0,
1837   3,  1, 10, -1, 11, -1, 13,  0,
1838   2, 11,  2,-18,  3,  0,
1839   2,  3,  2, -5,  3,  0,
1840   2,  2,  3, -4,  4,  0,
1841   2,  5,  2, -8,  3,  0,
1842   2,  1, 10, -1, 12,  0,
1843   4, -1, 12,  1, 14,  3,  2, -5,  3,  0,
1844   3,  6, 12, -6, 13, -4,  2,  0,
1845   2,  3,  3, -6,  4,  0,
1846   2,  5,  3, -9,  4,  0,
1847   4, -1, 10,  2, 13,-18,  2, 18,  3,  0,
1848   3,  2, 10, -2,  3, -2, 13,  0,
1849   2,  2,  2, -3,  3,  0,
1850   4,  2, 10, -2, 13, -4,  2,  5,  3,  0,
1851   2,  4,  3, -7,  4,  0,
1852   2,  2, 10, -2, 12,  0,
1853   2,  3,  3, -5,  4,  0,
1854   3,  3,  2, -4,  3, -1,  4,  2,
1855   3,  1,  2, -5,  3,  7,  4,  2,
1856   4, -2, 10,  2, 13,  5,  2, -6,  3,  0,
1857   2,  1,  2, -2,  3,  0,
1858   2,  2,  3, -3,  4,  0,
1859   4, -1, 12,  1, 14,  4,  2, -6,  3,  0,
1860   2,  1,  3, -1,  4,  0,
1861   2,  4,  2, -6,  3,  0,
1862   4,  2, 10, -2, 13, -2,  2,  2,  3,  0,
1863   2,  1,  2, -1,  3,  0,
1864   3,  2, 10,  1, 11, -2, 12,  0,
1865   2,  1,  3, -3,  5,  0,
1866   3,  2, 10, -1,  3, -2, 13,  0,
1867   2,  4,  3, -6,  4,  0,
1868   2,  1,  3, -2,  5,  0,
1869   2,  3,  3, -4,  4,  0,
1870   2,  3,  2, -4,  3,  0,
1871   2,  1, 10, -1, 13,  0,
1872   2,  1,  3, -1,  5,  0,
1873   2,  1,  3, -2,  6,  0,
1874   2,  2,  3, -2,  4,  0,
1875   2,  1,  3, -1,  6,  0,
1876   1,  1, 11,  2,
1877   2,  1,  3,  1,  5,  0,
1878   3,  1, 11, -2, 12,  2, 13,  0,
1879   3,  1, 10, -2, 12,  1, 13,  0,
1880   2,  2,  2, -2,  3,  0,
1881   3,  2, 10, -1, 11, -2, 12,  0,
1882   2,  4,  3, -5,  4,  0,
1883   2,  3,  3, -3,  4,  0,
1884   3,  4, 10, -2, 12, -2, 13,  0,
1885   1,  1,  2,  0,
1886   2,  2,  3, -3,  5,  0,
1887   2,  2, 10, -2, 13,  2,
1888   2,  2,  3, -2,  5,  0,
1889   2,  3,  3, -3,  2,  0,
1890   3,  1, 10,  1, 11, -1, 13,  0,
1891   3,  3,  3, -1,  2,  1,  4,  0,
1892   2,  2,  3, -1,  5,  0,
1893   3,  1, 10,  1, 12, -2, 13,  0,
1894   1,  2, 11,  0,
1895   2,  2, 12, -2, 13,  0,
1896   2,  2,  2, -1,  3,  0,
1897   2,  4,  2, -4,  3,  0,
1898   2,  3, 10, -3, 13,  0,
1899   4,  2, 10, -2, 13,  1,  3, -1,  5,  0,
1900   2,  3,  3, -3,  5,  0,
1901   3,  2, 10,  1, 11, -2, 13,  0,
1902   3,  1, 10,  2, 12, -3, 13,  0,
1903   1,  3, 11,  0,
1904   3,  1, 11,  2, 12, -2, 13,  0,
1905   2,  5,  2, -5,  3,  0,
1906   2,  4, 10, -4, 13,  0,
1907   2,  6,  2, -6,  3,  0,
1908   3,  2, 10,  2, 11, -2, 13,  0,
1909   3,  2, 10,  2, 12, -4, 13,  0,
1910   3,  2, 11,  2, 12, -2, 13,  0,
1911   3,  4, 10,  1, 11, -4, 13,  0,
1912   4,  1, 10,  1, 11,  2, 12, -4, 13,  0,
1913   3,  1, 10,  3, 11, -2, 13,  0,
1914   3,  3, 10,  1, 11, -4, 13,  0,
1915   4,  1, 10, -2, 11, -2, 12,  2, 13,  0,
1916   3,  1, 10,  2, 12, -4, 13,  0,
1917   3,  1, 10,  2, 11, -2, 13,  0,
1918   3,  2, 10,  1, 11, -3, 13,  0,
1919   3,  1, 13, -2,  2,  1,  4,  0,
1920   2,  3, 10, -4, 13,  0,
1921   4,  1, 10, -1, 11, -2, 12,  2, 13,  0,
1922   4, -1, 10,  2, 13, -2,  2,  2,  3,  0,
1923   2,  1, 10, -3, 11,  0,
1924   2,  2, 12, -3, 13,  0,
1925   2,  2, 11, -1, 13,  0,
1926   3,  1, 10,  1, 11, -2, 13,  2,
1927   4, -1, 10,  2, 13, -1,  3,  1,  5,  0,
1928   2,  2, 10, -3, 13,  0,
1929   3,  3, 10, -1, 11, -4, 13,  0,
1930   3,  4, 11,  2, 13,-11,  2,  0,
1931   3,  1, 10, -2, 12,  2, 13,  0,
1932   3,  1, 12, -2, 13,  1,  5,  0,
1933   2,  1, 10, -2, 11,  0,
1934   2,  1, 11, -1, 13,  0,
1935   3,  1, 10, -2, 13,  1,  5,  0,
1936   3,  1, 10, -2,  3,  2,  5,  0,
1937   3, 18,  2,-18,  3,  2,  5,  0,
1938   3,  1, 10, -3,  2,  3,  3,  0,
1939   3,  2, 13, 16, 11,-18,  2,  0,
1940   2,  1, 10, -2, 13,  2,
1941   3,  1, 13, -2, 10,  5,  4,  0,
1942   3,  2, 12, -2, 14,  7,  2,  0,
1943   3,  1, 10, -2,  3,  3,  5,  0,
1944   3,  1, 12, -1,  3, -2,  5,  1,
1945   3,  2, 10, -1, 11, -3, 13,  0,
1946   3,  3, 10, -2, 12, -2, 13,  0,
1947   2,  8,  2, -1,  3,  0,
1948   4,  1, 10,  1, 11, -2, 12,  2, 13,  0,
1949   3,  1, 12, -2, 14,  2,  4,  0,
1950   2,  1, 10, -1, 11,  0,
1951   3,  8,  2, -5,  3,  8,  4,  0,
1952   2, 18,  2,-17,  3,  0,
1953   3,  1, 10, -1,  3,  1,  5,  0,
1954   1,  1, 13,  0,
1955   3,  1, 10, -1, 11, -2, 13,  1,
1956   3,  1, 10,  1, 11, -2, 12,  0,
1957   3,  1, 10, -1,  2,  1,  3,  0,
1958   3,  2, 13, -8,  2,  1,  3,  0,
1959   2,  3, 10, -2, 12,  0,
1960   3,  2, 10, -1, 12, -1,  5,  0,
1961   3,  3, 10, -2, 11, -2, 13,  0,
1962   3,  2, 10, -1, 11, -1, 13,  0,
1963   3,  2, 10,  1,  3, -2,  4,  0,
1964   3,  1, 12, -1, 10, -1, 14,  0,
1965   4, -1, 10,  2, 13,  2,  3, -3,  5,  0,
1966   3,  2, 13, -4,  2, -5,  3,  0,
1967   3,  2, 12,  2, 10, -3, 14,  1,
1968   2,  1, 12, -2,  5,  0,
1969   2, 10,  2, -3, 11,  0,
1970   1,  1, 10,  2,
1971   3,  1, 12, -2, 10, -2,  5,  0,
1972   2, 18,  2,-16,  3,  0,
1973   2,  2, 12, -3, 14,  1,
1974   3,  1, 13,-17,  2,  2, 11,  0,
1975   3,  1, 10,  1,  2, -3,  4,  0,
1976   3,  1, 12,  1, 10, -1, 14,  0,
1977   4, -1, 10,  2, 13,  2,  3, -2,  5,  0,
1978   3,  1, 10, -1,  3,  2,  4,  0,
1979   4, -1, 10,  2, 13,  3,  2, -3,  3,  0,
1980   4,  1, 10, -2, 11,  2, 12, -2, 13,  0,
1981   2,  1, 11,  1, 13,  0,
1982   3,  8,  2,  2,  3, -3,  4,  0,
1983   1,  1, 12,  0,
1984   3,  6,  2,  9,  3,-10,  4,  1,
1985   3,  1, 10, -2, 11, -2, 13,  0,
1986   2,  8,  2,  1,  4,  0,
1987   2,  1, 10, -2, 12,  0,
1988   2, 11,  2, -4,  3,  0,
1989   3,  3, 11, -2, 14,  6,  2,  0,
1990   3,  3, 10, -1, 11, -2, 13,  0,
1991   2,  2, 10, -1, 13,  0,
1992   3,  1, 12, -2,  2,  4,  3,  0,
1993   2,  1, 10,  1, 11,  1,
1994   4,  1, 10, -1, 11,  2, 12, -2, 13,  0,
1995   2,  2, 11,  1, 13,  0,
1996   2,  2, 12, -1, 13,  0,
1997   3,  1, 10, -1, 11, -2, 12,  0,
1998   2,  3, 10, -2, 13,  0,
1999   2,  1, 10,  2, 11,  0,
2000   3,  1, 10,  2, 12, -2, 13,  0,
2001   3,  1, 11,  2, 12, -1, 13,  0,
2002   3,  3, 10,  1, 11, -2, 13,  0,
2003   2,  1, 10,  3, 11,  0,
2004   4,  1, 10,  1, 11,  2, 12, -2, 13,  0,
2005   2,  5, 10, -4, 13,  0,
2006   3,  3, 10,  2, 11, -2, 13,  0,
2007   3,  3, 10,  2, 12, -4, 13,  0,
2008   2,  4, 11, -2, 13,  0,
2009   3,  2, 10,  2, 11, -4, 13,  0,
2010   2,  3, 11, -2, 13,  0,
2011   3,  1, 10,  2, 11, -3, 13,  0,
2012   3,  2, 10,  1, 11, -4, 13,  0,
2013   2,  3, 10, -5, 13,  0,
2014   2,  2, 12, -4, 13,  0,
2015   2,  2, 11, -2, 13,  0,
2016   3,  1, 10,  1, 11, -3, 13,  0,
2017   3,  2, 13, -2,  3,  2,  5,  0,
2018   2,  2, 10, -4, 13,  1,
2019   4,  2, 10, -1, 11, -2, 12,  2, 13,  0,
2020   2,  2, 14, -2,  2,  0,
2021   3,  1, 10, -2, 12,  3, 13,  0,
2022   2,  1, 11, -2, 13,  1,
2023   3,  2, 14, -2,  2,  3,  5,  0,
2024   3,  2, 13, -1,  3,  1,  5,  0,
2025   2,  1, 10, -3, 13,  0,
2026   3,  2, 10, -1, 11, -4, 13,  0,
2027   4,  2, 10,  1, 11, -2, 12, -2, 13,  0,
2028   3,  2, 13,  1, 14, -8,  2,  0,
2029   3,  2, 10, -2, 12,  2, 13,  0,
2030   2,  2, 10, -2, 11,  0,
2031   3,  1, 10, -1, 11,  1, 13,  0,
2032   3,  1, 12, -2, 13, -1, 14,  0,
2033   3,  2, 13, -8,  2, 13,  3,  0,
2034   3,  3, 10, -5, 13,  5,  4,  0,
2035   1,  2, 13,  2,
2036   3,  3, 10, -1, 13,  5,  4,  0,
2037   3,  2, 13,  8,  2,-13,  3,  0,
2038   2,  2, 11, -2, 12,  0,
2039   3,  1, 10, -1, 11, -3, 13,  0,
2040   3,  1, 10, -1, 12, -2, 13,  0,
2041   3,  2, 10, -2, 11, -4, 13,  0,
2042   3,  2, 10, -2, 12, -2, 13,  0,
2043   2,  2, 10, -1, 11,  0,
2044   2,  1, 10,  1, 13,  0,
2045   2,  1, 11,  2, 13,  1,
2046   2,  1, 11, -2, 12,  0,
2047   3,  1, 10, -2, 12, -1, 13,  0,
2048   2,  4, 10, -2, 12,  0,
2049   2,  3, 10, -1, 12,  0,
2050   3,  3, 10, -1, 11, -1, 13,  0,
2051   1,  2, 10,  2,
2052   2,  2, 14, -2,  5,  0,
2053   3,  1, 10,  1, 11,  1, 13,  0,
2054   2,  1, 10,  1, 12,  0,
2055   2,  2, 11,  2, 13,  0,
2056   2,  1, 12,  1, 14,  0,
2057   1,  2, 12,  2,
2058   2,  1, 10, -3, 12,  0,
2059   3,  4, 10, -1, 11, -2, 13,  0,
2060   2,  3, 10, -1, 13,  0,
2061   2,  2, 10,  1, 11,  0,
2062   3,  1, 10,  2, 11,  1, 13,  0,
2063   3,  1, 10,  2, 12, -1, 13,  0,
2064   2,  1, 11,  2, 12,  0,
2065   2,  4, 10, -2, 13,  0,
2066   2,  2, 10,  2, 11,  0,
2067   3,  2, 10,  2, 12, -2, 13,  0,
2068   2,  4, 12, -2, 13,  0,
2069   3,  4, 10,  1, 11, -2, 13,  0,
2070   3,  2, 13, 11,  2,-13,  3,  0,
2071   3,  1, 10,  3, 11, -4, 13,  0,
2072   3,  3, 10,  1, 11, -6, 13,  0,
2073   3,  1, 10,  2, 11, -4, 13,  0,
2074   2,  3, 10, -6, 13,  0,
2075   3,  1, 10, -3, 11,  2, 13,  0,
2076   3,  1, 10,  1, 11, -4, 13,  0,
2077   2,  2, 10, -5, 13,  0,
2078   3,  1, 10, -2, 12,  4, 13,  0,
2079   3,  1, 10, -2, 11,  2, 13,  0,
2080   2,  1, 11, -3, 13,  0,
2081   2,  1, 10, -4, 13,  0,
2082   4,  1, 10,  2, 11, -2, 12, -2, 13,  0,
2083   3,  3, 10, -2, 12, -4, 13,  0,
2084   3,  1, 10, -1, 11,  2, 13,  0,
2085   1,  3, 13,  0,
2086   3,  1, 10, -1, 11, -4, 13,  0,
2087   4,  1, 10,  1, 11, -2, 12, -2, 13,  0,
2088   3,  3, 10, -2, 12,  2, 13,  0,
2089   2,  3, 10, -2, 11,  0,
2090   3,  2, 10, -1, 11,  1, 13,  0,
2091   3,  1, 12,  2, 13, -2,  5,  0,
2092   2,  1, 10,  2, 13,  1,
2093   2,  1, 11,  3, 13,  0,
2094   3,  1, 10, -2, 11, -4, 13,  0,
2095   3,  1, 10, -2, 12, -2, 13,  0,
2096   2,  3, 10, -1, 11,  0,
2097   2,  2, 10,  1, 13,  0,
2098   3,  1, 10,  1, 11,  2, 13,  0,
2099   3,  1, 10, -1, 11,  2, 12,  0,
2100   2,  2, 12,  1, 13,  0,
2101   4,  1, 10, -1, 11, -2, 12, -2, 13,  0,
2102   1,  3, 10,  1,
2103   3,  2, 10,  1, 11,  1, 13,  0,
2104   3,  1, 10,  2, 11,  2, 13,  0,
2105   2,  1, 10,  2, 12,  0,
2106   3,  1, 11,  2, 12,  1, 13,  0,
2107   2,  4, 10, -1, 13,  0,
2108   2,  3, 10,  1, 11,  0,
2109   3,  1, 10,  1, 11,  2, 12,  0,
2110   4,  1, 10, -1, 11,  4, 12, -2, 13,  0,
2111   2,  5, 10, -2, 13,  0,
2112   3,  3, 10,  2, 12, -2, 13,  0,
2113   3,  1, 10,  4, 12, -2, 13,  0,
2114   3,  2, 10,  2, 11, -6, 13,  0,
2115   2,  3, 11, -4, 13,  0,
2116   3,  2, 10,  1, 11, -6, 13,  0,
2117   2,  2, 11, -4, 13,  0,
2118   2,  2, 10, -6, 13,  0,
2119   2,  1, 11, -4, 13,  0,
2120   2,  1, 10, -5, 13,  0,
2121   3,  2, 10, -1, 11, -6, 13,  0,
2122   4,  2, 10,  1, 11, -2, 12, -4, 13,  0,
2123   3,  2, 10, -2, 11,  2, 13,  0,
2124   1,  4, 13,  0,
2125   3,  2, 11, -2, 12, -2, 13,  0,
2126   3,  2, 10, -2, 12, -4, 13,  0,
2127   3,  2, 10, -1, 11,  2, 13,  0,
2128   2,  1, 10,  3, 13,  0,
2129   2,  1, 11,  4, 13,  0,
2130   3,  1, 11, -2, 12, -2, 13,  0,
2131   2,  2, 10,  2, 13,  0,
2132   3,  1, 10,  1, 11,  3, 13,  0,
2133   2,  2, 12,  2, 13,  0,
2134   2,  4, 10, -1, 11,  0,
2135   2,  3, 10,  1, 13,  0,
2136   3,  2, 10,  1, 11,  2, 13,  0,
2137   3,  2, 10, -1, 11,  2, 12,  0,
2138   3,  1, 10,  2, 12,  1, 13,  0,
2139   3,  1, 11,  2, 12,  2, 13,  0,
2140   1,  4, 10,  0,
2141   3,  3, 10,  1, 11,  1, 13,  0,
2142   2,  2, 10,  2, 12,  0,
2143   1,  4, 12,  0,
2144   2,  4, 10,  1, 11,  0,
2145   3,  2, 10,  1, 11,  2, 12,  0,
2146   2,  6, 10, -2, 13,  0,
2147   3,  5, 12, -1, 14,  2,  4,  1,
2148   3,  1, 10,  1, 11, -6, 13,  0,
2149   3,  1, 10, -2, 11,  4, 13,  0,
2150   2,  1, 10, -6, 13,  0,
2151   3,  1, 10, -1, 11,  4, 13,  0,
2152   3,  1, 10, -1, 11, -6, 13,  0,
2153   4,  1, 10,  1, 11, -2, 12, -4, 13,  0,
2154   2,  1, 10,  4, 13,  0,
2155   3,  1, 10, -2, 12, -4, 13,  0,
2156   3,  3, 10, -1, 11,  2, 13,  0,
2157   2,  2, 10,  3, 13,  0,
2158   3,  1, 10,  1, 11,  4, 13,  0,
2159   4,  1, 10, -1, 11,  2, 12,  2, 13,  0,
2160   2,  3, 10,  2, 13,  0,
2161   3,  1, 10,  2, 12,  2, 13,  0,
2162   3,  3, 10,  1, 11,  2, 13,  0,
2163   3,  1, 10, -1, 11,  4, 12,  0,
2164   1,  5, 10,  0,
2165   2,  3, 10,  2, 12,  0,
2166   2,  1, 11, -6, 13,  0,
2167   1,  6, 13,  0,
2168   3,  2, 10, -1, 11,  4, 13,  0,
2169   2,  2, 10,  4, 13,  0,
2170   2,  2, 12,  4, 13,  0,
2171   3,  4, 10, -1, 11,  2, 13,  0,
2172   3,  2, 10,  1, 11,  4, 13,  0,
2173   2,  4, 10,  2, 13,  0,
2174   3,  2, 10,  2, 12,  2, 13,  0,
2175   1,  6, 10,  0,
2176   2,  1, 10,  6, 13,  0,
2177   2,  3, 10,  4, 13,  0,
2178   2,  5, 10,  2, 13,  0,
2179  -1
2180 };
2181 
2182 /* Total terms = 356, small = 356 */
2183 static struct plantbl liblon = {
2184   /*  {  0, 18, 18, 10,  3,  2,  0,  0,  0,  6, 16,  6,  6,  3,}, */
2185   /* Use max of liblon, liblat.  */
2186   {  0, 18, 18, 20,  4,  2,  0,  0,  0,  9, 16,  7,  9,  9,},
2187  2,
2188  lonargs,
2189  lontabl,
2190  lontabb,
2191  lontabr,
2192  3.850000e+05,
2193  36525.0,
2194  1.0e-4,
2195 };
2196 
2197 
2198 /* given a Julian date, return the lunar libration in lat and long, in rads.
2199  */
2200 void
llibration(double JD,double * llatp,double * llonp)2201 llibration (double JD, double *llatp, double *llonp)
2202 {
2203 	double lg, lt;	/* arc seconds */
2204 
2205 	lg = gplan (JD, &liblon);
2206 	lt = gplan (JD, &liblat);
2207 
2208 	*llonp = degrad (lg/3600.0);
2209 	*llatp = degrad (lt/3600.0);
2210 }
2211 
2212