summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid A. Madore <david+git@madore.org>2012-04-18 17:57:07 (GMT)
committerDavid A. Madore <david+git@madore.org>2012-04-18 17:57:07 (GMT)
commitaef12693c2ec946c5c88070f6707480df7eb26ec (patch)
tree05a679f5de3859f5a61497d5d379a60774957390
parent223ae5a5e66fc6808bdb345caa7bfe567bb23024 (diff)
downloadephem-aef12693c2ec946c5c88070f6707480df7eb26ec.zip
ephem-aef12693c2ec946c5c88070f6707480df7eb26ec.tar.gz
ephem-aef12693c2ec946c5c88070f6707480df7eb26ec.tar.bz2
Add a computation of zonal tide effects on UT1 (from IERS conventions).
Plus a Test2 class which tests this on the TAI-UTC difference.
-rw-r--r--org/madore/ephem/Test2.java33
-rw-r--r--org/madore/ephem/ZonalTides.java57
-rw-r--r--org/madore/ephem/zonal-tides.dat186
3 files changed, 276 insertions, 0 deletions
diff --git a/org/madore/ephem/Test2.java b/org/madore/ephem/Test2.java
new file mode 100644
index 0000000..e578719
--- /dev/null
+++ b/org/madore/ephem/Test2.java
@@ -0,0 +1,33 @@
+package org.madore.ephem;
+
+import java.io.FileInputStream;
+import java.io.InputStreamReader;
+import java.io.BufferedReader;
+
+public final class Test2 {
+
+ public static void main(String[] args) {
+ Comput.SumPoisson2Terms corr = ZonalTides.getFunc(ZonalTides.Variable.DUT1);
+ try {
+ // http://data.iers.org/products/214/14443/orig/eopc04_08_IAU2000.62-now
+ FileInputStream str = new FileInputStream("/tmp/eopc04_08_IAU2000.62-now");
+ BufferedReader in = new BufferedReader(new InputStreamReader(str, "utf-8"));
+ String s;
+ while ( ( s = in.readLine() ) != null ) {
+ String[] fields = s.split("\\s+");
+ if ( fields.length<1 || ! fields[0].matches("\\d{4}") )
+ continue;
+ int mjd = Integer.parseInt(fields[3]);
+ double utcOffset = Time.utcOffset(mjd, 0);
+ double t = Ephem.fromJd((utcOffset+32.184)/86400. + mjd + 2400000.5);
+ double v = corr.v(t) * 1.e-4;
+ double ut1Offset = Double.parseDouble(fields[6]);
+ double off = ut1Offset - utcOffset;
+ System.out.format("%d\t%.7f\t%.7f\t%.7f\n", mjd, off, v, off-v);
+ }
+ } catch ( Exception e ) {
+ throw new RuntimeException(e);
+ }
+ }
+
+}
diff --git a/org/madore/ephem/ZonalTides.java b/org/madore/ephem/ZonalTides.java
new file mode 100644
index 0000000..166abcc
--- /dev/null
+++ b/org/madore/ephem/ZonalTides.java
@@ -0,0 +1,57 @@
+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 ZonalTides {
+
+ public static enum Variable {
+ DUT1("dut1"), DLOD("dlod"), DOMEGA("domega");
+ final String name;
+ Variable(String name) { this.name = name; }
+ }
+
+ // The argument is in Julian centuries (value is in radians).
+ public static Comput.Polynomial[] lambdas = new Comput.Polynomial[] {
+ new Comput.Polynomial(134.96340251*Comput.degree, 1717915923.2178*Comput.arcsecond, 31.8792*Comput.arcsecond +0.051635*Comput.arcsecond, -0.00024470*Comput.arcsecond), // Delaunay l
+ new Comput.Polynomial(357.52910918*Comput.degree, 129596581.0481*Comput.arcsecond, -0.5532*Comput.arcsecond +0.000136*Comput.arcsecond, -0.00001149*Comput.arcsecond), // Delaunay l′
+ new Comput.Polynomial(93.27209062*Comput.degree, 1739527262.8478*Comput.arcsecond, -12.7512*Comput.arcsecond -0.001037*Comput.arcsecond, 0.00000417*Comput.arcsecond), // Delaunay F
+ new Comput.Polynomial(297.85019547*Comput.degree, 1602961601.2090*Comput.arcsecond, -6.3706*Comput.arcsecond +0.006593*Comput.arcsecond, -0.00003169*Comput.arcsecond), // Delaunay D
+ new Comput.Polynomial(125.04455501*Comput.degree, -6962890.5431*Comput.arcsecond, 7.4722*Comput.arcsecond +0.007702*Comput.arcsecond, -0.00005939*Comput.arcsecond) // Delaunay Ω
+ };
+
+ private static EnumMap<Variable, Comput.SumPoisson2Terms> data = new EnumMap<Variable, Comput.SumPoisson2Terms>(Variable.class);
+
+ public static Comput.SumPoisson2Terms getFunc(Variable v) {
+ if ( ! data.containsKey(v) ) {
+ List<Comput.Poisson2Term> series = new ArrayList<Comput.Poisson2Term>();
+ try {
+ InputStream str = ZonalTides.class.getResourceAsStream("zonal-tides.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[5];
+ for ( int j=0 ; j<5 ; 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);
+ }
+
+}
diff --git a/org/madore/ephem/zonal-tides.dat b/org/madore/ephem/zonal-tides.dat
new file mode 100644
index 0000000..0f88093
--- /dev/null
+++ b/org/madore/ephem/zonal-tides.dat
@@ -0,0 +1,186 @@
+zonal-tides dut1 0 1,0,2,2,2 -0.0235 0.0000
+zonal-tides dut1 0 2,0,2,0,1 -0.0404 0.0000
+zonal-tides dut1 0 2,0,2,0,2 -0.0987 0.0000
+zonal-tides dut1 0 0,0,2,2,1 -0.0508 0.0000
+zonal-tides dut1 0 0,0,2,2,2 -0.1231 0.0000
+zonal-tides dut1 0 1,0,2,0,0 -0.0385 0.0000
+zonal-tides dut1 0 1,0,2,0,1 -0.4108 0.0000
+zonal-tides dut1 0 1,0,2,0,2 -0.9926 0.0000
+zonal-tides dut1 0 3,0,0,0,0 -0.0179 0.0000
+zonal-tides dut1 0 -1,0,2,2,1 -0.0818 0.0000
+zonal-tides dut1 0 -1,0,2,2,2 -0.1974 0.0000
+zonal-tides dut1 0 1,0,0,2,0 -0.0761 0.0000
+zonal-tides dut1 0 2,0,2,-2,2 0.0216 0.0000
+zonal-tides dut1 0 0,1,2,0,2 0.0254 0.0000
+zonal-tides dut1 0 0,0,2,0,0 -0.2989 0.0000
+zonal-tides dut1 0 0,0,2,0,1 -3.1873 0.2010
+zonal-tides dut1 0 0,0,2,0,2 -7.8468 0.5320
+zonal-tides dut1 0 2,0,0,0,-1 0.0216 0.0000
+zonal-tides dut1 0 2,0,0,0,0 -0.3384 0.0000
+zonal-tides dut1 0 2,0,0,0,1 0.0179 0.0000
+zonal-tides dut1 0 0,-1,2,0,2 -0.0244 0.0000
+zonal-tides dut1 0 0,0,0,2,-1 0.0470 0.0000
+zonal-tides dut1 0 0,0,0,2,0 -0.7341 0.0000
+zonal-tides dut1 0 0,0,0,2,1 -0.0526 0.0000
+zonal-tides dut1 0 0,-1,0,2,0 -0.0508 0.0000
+zonal-tides dut1 0 1,0,2,-2,1 0.0498 0.0000
+zonal-tides dut1 0 1,0,2,-2,2 0.1006 0.0000
+zonal-tides dut1 0 1,1,0,0,0 0.0395 0.0000
+zonal-tides dut1 0 -1,0,2,0,0 0.0470 0.0000
+zonal-tides dut1 0 -1,0,2,0,1 0.1767 0.0000
+zonal-tides dut1 0 -1,0,2,0,2 0.4352 0.0000
+zonal-tides dut1 0 1,0,0,0,-1 0.5339 0.0000
+zonal-tides dut1 0 1,0,0,0,0 -8.4046 0.2500
+zonal-tides dut1 0 1,0,0,0,1 0.5443 0.0000
+zonal-tides dut1 0 0,0,0,1,0 0.0470 0.0000
+zonal-tides dut1 0 1,-1,0,0,0 -0.0555 0.0000
+zonal-tides dut1 0 -1,0,0,2,-1 0.1175 0.0000
+zonal-tides dut1 0 -1,0,0,2,0 -1.8236 0.0000
+zonal-tides dut1 0 -1,0,0,2,1 0.1316 0.0000
+zonal-tides dut1 0 1,0,-2,2,-1 0.0179 0.0000
+zonal-tides dut1 0 -1,-1,0,2,0 -0.0855 0.0000
+zonal-tides dut1 0 0,2,2,-2,2 -0.0573 0.0000
+zonal-tides dut1 0 0,1,2,-2,1 0.0329 0.0000
+zonal-tides dut1 0 0,1,2,-2,2 -1.8847 0.0000
+zonal-tides dut1 0 0,0,2,-2,0 0.2510 0.0000
+zonal-tides dut1 0 0,0,2,-2,1 1.1703 0.0000
+zonal-tides dut1 0 0,0,2,-2,2 -49.7174 0.4330
+zonal-tides dut1 0 0,2,0,0,0 -0.1936 0.0000
+zonal-tides dut1 0 2,0,0,-2,-1 0.0489 0.0000
+zonal-tides dut1 0 2,0,0,-2,0 -0.5471 0.0000
+zonal-tides dut1 0 2,0,0,-2,1 0.0367 0.0000
+zonal-tides dut1 0 0,-1,2,-2,1 -0.0451 0.0000
+zonal-tides dut1 0 0,1,0,0,-1 0.0921 0.0000
+zonal-tides dut1 0 0,-1,2,-2,2 0.8281 0.0000
+zonal-tides dut1 0 0,1,0,0,0 -15.8887 0.1530
+zonal-tides dut1 0 0,1,0,0,1 -0.1382 0.0000
+zonal-tides dut1 0 1,0,0,-1,0 0.0348 0.0000
+zonal-tides dut1 0 2,0,-2,0,0 -0.1372 0.0000
+zonal-tides dut1 0 -2,0,2,0,1 0.4211 0.0000
+zonal-tides dut1 0 -1,1,0,1,0 -0.0404 0.0000
+zonal-tides dut1 0 0,0,0,0,2 7.8998 0.0000
+zonal-tides dut1 0 0,0,0,0,1 -1617.2681 0.0000
+zonal-tides dlod 0 1,0,2,2,2 0.0000 0.2617
+zonal-tides dlod 0 2,0,2,0,1 0.0000 0.3706
+zonal-tides dlod 0 2,0,2,0,2 0.0000 0.9041
+zonal-tides dlod 0 0,0,2,2,1 0.0000 0.4499
+zonal-tides dlod 0 0,0,2,2,2 0.0000 1.0904
+zonal-tides dlod 0 1,0,2,0,0 0.0000 0.2659
+zonal-tides dlod 0 1,0,2,0,1 0.0000 2.8298
+zonal-tides dlod 0 1,0,2,0,2 0.0000 6.8291
+zonal-tides dlod 0 3,0,0,0,0 0.0000 0.1222
+zonal-tides dlod 0 -1,0,2,2,1 0.0000 0.5384
+zonal-tides dlod 0 -1,0,2,2,2 0.0000 1.2978
+zonal-tides dlod 0 1,0,0,2,0 0.0000 0.4976
+zonal-tides dlod 0 2,0,2,-2,2 0.0000 -0.1060
+zonal-tides dlod 0 0,1,2,0,2 0.0000 -0.1211
+zonal-tides dlod 0 0,0,2,0,0 0.0000 1.3804
+zonal-tides dlod 0 0,0,2,0,1 0.9266 14.6890
+zonal-tides dlod 0 0,0,2,0,2 2.4469 36.0910
+zonal-tides dlod 0 2,0,0,0,-1 0.0000 -0.0988
+zonal-tides dlod 0 2,0,0,0,0 0.0000 1.5433
+zonal-tides dlod 0 2,0,0,0,1 0.0000 -0.0813
+zonal-tides dlod 0 0,-1,2,0,2 0.0000 0.1082
+zonal-tides dlod 0 0,0,0,2,-1 0.0000 -0.2004
+zonal-tides dlod 0 0,0,0,2,0 0.0000 3.1240
+zonal-tides dlod 0 0,0,0,2,1 0.0000 0.2235
+zonal-tides dlod 0 0,-1,0,2,0 0.0000 0.2073
+zonal-tides dlod 0 1,0,2,-2,1 0.0000 -0.1312
+zonal-tides dlod 0 1,0,2,-2,2 0.0000 -0.2640
+zonal-tides dlod 0 1,1,0,0,0 0.0000 -0.0968
+zonal-tides dlod 0 -1,0,2,0,0 0.0000 -0.1099
+zonal-tides dlod 0 -1,0,2,0,1 0.0000 -0.4115
+zonal-tides dlod 0 -1,0,2,0,2 0.0000 -1.0093
+zonal-tides dlod 0 1,0,0,0,-1 0.0000 -1.2224
+zonal-tides dlod 0 1,0,0,0,0 0.5701 19.1647
+zonal-tides dlod 0 1,0,0,0,1 0.0000 -1.2360
+zonal-tides dlod 0 0,0,0,1,0 0.0000 -0.1000
+zonal-tides dlod 0 1,-1,0,0,0 0.0000 0.1169
+zonal-tides dlod 0 -1,0,0,2,-1 0.0000 -0.2332
+zonal-tides dlod 0 -1,0,0,2,0 0.0000 3.6018
+zonal-tides dlod 0 -1,0,0,2,1 0.0000 -0.2587
+zonal-tides dlod 0 1,0,-2,2,-1 0.0000 -0.0344
+zonal-tides dlod 0 -1,-1,0,2,0 0.0000 0.1542
+zonal-tides dlod 0 0,2,2,-2,2 0.0000 0.0395
+zonal-tides dlod 0 0,1,2,-2,1 0.0000 -0.0173
+zonal-tides dlod 0 0,1,2,-2,2 0.0000 0.9726
+zonal-tides dlod 0 0,0,2,-2,0 0.0000 -0.0910
+zonal-tides dlod 0 0,0,2,-2,1 0.0000 -0.4135
+zonal-tides dlod 0 0,0,2,-2,2 0.1490 17.1056
+zonal-tides dlod 0 0,2,0,0,0 0.0000 0.0666
+zonal-tides dlod 0 2,0,0,-2,-1 0.0000 -0.0154
+zonal-tides dlod 0 2,0,0,-2,0 0.0000 0.1670
+zonal-tides dlod 0 2,0,0,-2,1 0.0000 -0.0108
+zonal-tides dlod 0 0,-1,2,-2,1 0.0000 0.0082
+zonal-tides dlod 0 0,1,0,0,-1 0.0000 -0.0167
+zonal-tides dlod 0 0,-1,2,-2,2 0.0000 -0.1425
+zonal-tides dlod 0 0,1,0,0,0 0.0267 2.7332
+zonal-tides dlod 0 0,1,0,0,1 0.0000 0.0225
+zonal-tides dlod 0 1,0,0,-1,0 0.0000 -0.0053
+zonal-tides dlod 0 2,0,-2,0,0 0.0000 -0.0079
+zonal-tides dlod 0 -2,0,2,0,1 0.0000 -0.0203
+zonal-tides dlod 0 -1,1,0,1,0 0.0000 0.0008
+zonal-tides dlod 0 0,0,0,0,2 0.0000 0.1460
+zonal-tides dlod 0 0,0,0,0,1 0.0000 -14.9471
+zonal-tides domega 0 1,0,2,2,2 0.0000 -0.2209
+zonal-tides domega 0 2,0,2,0,1 0.0000 -0.3128
+zonal-tides domega 0 2,0,2,0,2 0.0000 -0.7630
+zonal-tides domega 0 0,0,2,2,1 0.0000 -0.3797
+zonal-tides domega 0 0,0,2,2,2 0.0000 -0.9203
+zonal-tides domega 0 1,0,2,0,0 0.0000 -0.2244
+zonal-tides domega 0 1,0,2,0,1 0.0000 -2.3884
+zonal-tides domega 0 1,0,2,0,2 0.0000 -5.7637
+zonal-tides domega 0 3,0,0,0,0 0.0000 -0.1031
+zonal-tides domega 0 -1,0,2,2,1 0.0000 -0.4544
+zonal-tides domega 0 -1,0,2,2,2 0.0000 -1.0953
+zonal-tides domega 0 1,0,0,2,0 0.0000 -0.4200
+zonal-tides domega 0 2,0,2,-2,2 0.0000 0.0895
+zonal-tides domega 0 0,1,2,0,2 0.0000 0.1022
+zonal-tides domega 0 0,0,2,0,0 0.0000 -1.1650
+zonal-tides domega 0 0,0,2,0,1 -0.7820 -12.3974
+zonal-tides domega 0 0,0,2,0,2 -2.0652 -30.4606
+zonal-tides domega 0 2,0,0,0,-1 0.0000 0.0834
+zonal-tides domega 0 2,0,0,0,0 0.0000 -1.3025
+zonal-tides domega 0 2,0,0,0,1 0.0000 0.0686
+zonal-tides domega 0 0,-1,2,0,2 0.0000 -0.0913
+zonal-tides domega 0 0,0,0,2,-1 0.0000 0.1692
+zonal-tides domega 0 0,0,0,2,0 0.0000 -2.6367
+zonal-tides domega 0 0,0,0,2,1 0.0000 -0.1886
+zonal-tides domega 0 0,-1,0,2,0 0.0000 -0.1749
+zonal-tides domega 0 1,0,2,-2,1 0.0000 0.1107
+zonal-tides domega 0 1,0,2,-2,2 0.0000 0.2228
+zonal-tides domega 0 1,1,0,0,0 0.0000 0.0817
+zonal-tides domega 0 -1,0,2,0,0 0.0000 0.0927
+zonal-tides domega 0 -1,0,2,0,1 0.0000 0.3473
+zonal-tides domega 0 -1,0,2,0,2 0.0000 0.8519
+zonal-tides domega 0 1,0,0,0,-1 0.0000 1.0317
+zonal-tides domega 0 1,0,0,0,0 -0.4811 -16.1749
+zonal-tides domega 0 1,0,0,0,1 0.0000 1.0432
+zonal-tides domega 0 0,0,0,1,0 0.0000 0.0844
+zonal-tides domega 0 1,-1,0,0,0 0.0000 -0.0987
+zonal-tides domega 0 -1,0,0,2,-1 0.0000 0.1968
+zonal-tides domega 0 -1,0,0,2,0 0.0000 -3.0399
+zonal-tides domega 0 -1,0,0,2,1 0.0000 0.2183
+zonal-tides domega 0 1,0,-2,2,-1 0.0000 0.0290
+zonal-tides domega 0 -1,-1,0,2,0 0.0000 -0.1302
+zonal-tides domega 0 0,2,2,-2,2 0.0000 -0.0333
+zonal-tides domega 0 0,1,2,-2,1 0.0000 0.0146
+zonal-tides domega 0 0,1,2,-2,2 0.0000 -0.8209
+zonal-tides domega 0 0,0,2,-2,0 0.0000 0.0768
+zonal-tides domega 0 0,0,2,-2,1 0.0000 0.3490
+zonal-tides domega 0 0,0,2,-2,2 -0.1257 -14.4370
+zonal-tides domega 0 0,2,0,0,0 0.0000 -0.0562
+zonal-tides domega 0 2,0,0,-2,-1 0.0000 0.0130
+zonal-tides domega 0 2,0,0,-2,0 0.0000 -0.1409
+zonal-tides domega 0 2,0,0,-2,1 0.0000 0.0092
+zonal-tides domega 0 0,-1,2,-2,1 0.0000 -0.0069
+zonal-tides domega 0 0,1,0,0,-1 0.0000 0.0141
+zonal-tides domega 0 0,-1,2,-2,2 0.0000 0.1202
+zonal-tides domega 0 0,1,0,0,0 -0.0222 -2.3068
+zonal-tides domega 0 0,1,0,0,1 0.0000 -0.0190
+zonal-tides domega 0 1,0,0,-1,0 0.0000 0.0045
+zonal-tides domega 0 2,0,-2,0,0 0.0000 0.0066
+zonal-tides domega 0 -2,0,2,0,1 0.0000 0.0171
+zonal-tides domega 0 -1,1,0,1,0 0.0000 -0.0007
+zonal-tides domega 0 0,0,0,0,2 0.0000 -0.1232
+zonal-tides domega 0 0,0,0,0,1 0.0000 12.6153