From f096845cb0b4087691c6d003574013f3bae82aed Mon Sep 17 00:00:00 2001 From: "David A. Madore" Date: Thu, 19 Apr 2012 19:57:53 +0200 Subject: Re-add (rewritten) functions to compute Smart97 functions. (This is intended as a test, not to be actually used.) --- org/madore/ephem/Smart97.java | 65 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 65 insertions(+) create mode 100644 org/madore/ephem/Smart97.java (limited to 'org/madore/ephem/Smart97.java') diff --git a/org/madore/ephem/Smart97.java b/org/madore/ephem/Smart97.java new file mode 100644 index 0000000..21345bf --- /dev/null +++ b/org/madore/ephem/Smart97.java @@ -0,0 +1,65 @@ +package org.madore.ephem; + +import java.util.List; +import java.util.ArrayList; +import java.util.EnumMap; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.io.BufferedReader; + +public final class Smart97 { + + public static enum Variable { + PSI("psi"), OMEGA("omega"), PHI("phi"), + P("p"), EPSILON("epsilon"), CHI("chi"), SIDTIME("sidtime"); + final String name; + Variable(String name) { this.name = name; } + } + + // The argument is in Julian millennia (value is in radians). + public static Comput.Polynomial[] lambdas = new Comput.Polynomial[] { + new Comput.Polynomial(4.40260867435, 26088.1469432237), // Mercury + new Comput.Polynomial(3.17614652884, 10213.5293478605), // Venus + new Comput.Polynomial(1.75347029148, 6283.3196527950), // Earth + new Comput.Polynomial(6.20347594486, 3340.8562283493), // Mars + new Comput.Polynomial(0.59954632934, 529.9347667441), // Jupiter + new Comput.Polynomial(0.87401658845, 213.5428970875), // Saturn + new Comput.Polynomial(5.48129370354, 75.0254002168), // Uranus + new Comput.Polynomial(5.31188611871, 38.3768372873), // Neptune + new Comput.Polynomial(5.19846640063, 77713.7714481804), // Delaunay D + new Comput.Polynomial(1.62790513602, 84334.6615717837), // Delaunay F + new Comput.Polynomial(2.35555563875, 83286.9142477147), // Delaunay l + new Comput.Polynomial(4.89496121282, 2301216.7536515365), // phi + }; + + private static EnumMap data = new EnumMap(Variable.class); + + public static Comput.SumPoisson2Terms getFunc(Variable v) { + if ( ! data.containsKey(v) ) { + List series = new ArrayList(); + try { + InputStream str = Smart97.class.getResourceAsStream("smart97.dat"); + BufferedReader in = new BufferedReader(new InputStreamReader(str, "utf-8")); + String s; + while ( ( s = in.readLine() ) != null ) { + String[] fields = s.split("\t"); + if ( ! fields[1].equals(v.name) ) + continue; + int deg = Integer.parseInt(fields[2]); + String[] subfields = fields[3].split(","); + double[] om = new double[12]; + for ( int j=0 ; j<12 ; j++ ) + om[j] = Double.parseDouble(subfields[j]); + double b = Double.parseDouble(fields[4]); + double a = Double.parseDouble(fields[5]); + series.add(Comput.Poisson2Term.ab(deg, a, b, om, lambdas)); + } + } catch ( Exception e ) { + throw new RuntimeException(e); + } + data.put(v, new Comput.SumPoisson2Terms(series)); + } + return data.get(v); + } + +} -- cgit v1.2.3