Data refresh available from http://www.flaterco.com/xtide/files.html#harmonicsfiles.
XTide 2.15 (2016-01-25)
The 2.15 revision of XTide makes xttpd work with IPv6 and systemd (neither
one is a hard requirement) and catches up with the API changes in Xaw3dXft
ver. 1.6.2d. See Changelog for what else
was done and get it from http://www.flaterco.com/xtide/files.html#xtide.
libtcd 2.2.7 (2015-08-08)
Fix an out-of-bounds access.
End of maintenance for non-free data
For various reasons, I have ended
maintenance of the non-free data set. Anyone interested in generating
new harmonic constants from published data can find information and a list of
data sources here.
There is an announce-only mailing list to which I send notices of each
update to XTide or the harmonics data. You can subscribe or read the
archives at http://ten.pairlist.net/mailman/listinfo/xtide-announce.
Please note: If an announcement to you gets bounced by your
mail server, you fall off the list. Some long-time contributors
have fallen off because, unbeknownst to them, their ISPs subscribed to
a spam blackholing service that blackholed all pair.com-hosted domains
after one of them sent out spam.
To do list
Nit: Fix parallel make race condition where congen link fails
because libcongen didn't exist yet.
Without context, somebody sent a YEARDATA.DAT file and a decoding thereof
which indicated that the phases of 3KM5, RP1, and KJ2 were reversed relative
to the output of Congen.
Investigation revealed the following:
- These three minor constituents have never gotten much amplitude at any
station. The only impacted station in 2015 harmonics-dwf was Anchorage,
with an amplitude of 0.04 ft for 3KM5.
- The 2006 IHO constituent list shows ETA2 and KJ2, and RP1 and PSI1, as
pairs of constituents that differ only by a 180 degree phase shift.
- Congen's definitions of KJ2 and PSI1 are directly from SP 98 Table 2, Ref
Nos. A49 and B24 respectively. SP98 makes no mention of ETA2 or RP1
except in the glossary, where it states that RP1 and PSI1 are the same.
- Congen's RP1 is consistent with the 2006 IHO definition, and Congen's
PSI1 differs from it by a 180 degree phase shift, as expected.
- Congen's KJ2 is in conflict with the 2006 IHO definition, and it does not
have a phase shift from ETA2. NAVO.xls (spreadsheet of
constituent definitions contributed by Art Najjar of NAVO) reflects a
'correction' to make KJ2 consistent with the IHO definition.
- The inference function of libtcd infers KJ2 and PSI1, albeit with low
amplitudes (0.007⋅M2 and 0.011⋅O1 respectively). The text
in SP98 that is referenced by the code (Article 229 et seq.) claims that "the
difference in the epochs or lags of the constituents have a relation
conforming, in general, with the relation of the differences in their speeds"
without acknowledging the existence of pairs of constituents that differ only
by a 180 degree phase shift. Determining which constituent conforms to
the phase assumption that is built into Eqn. 324 is left as an exercise for
the reader. None of the constituents in question is directly mentioned
in the Inference section of SP98.
N.B., The inference function described in Sec. 2.3.4 of Foreman, "Manual for
Tidal Heights Analysis and Prediction" is different. It infers the
phase from only one known constituent, but involves the equilibrium argument
of the inferred constituent, so there should be no ambiguity.
- Congen's definition of 3KM5 as a compound constituent equaling
3⋅K1+M2 is consistent with the 2006 IHO definition. Both IOS and
the unidentified YEARDATA.dat application instead used K1+M2+K2. When
calculated by Congen, K1+M2+K2 is close to but not exactly the same as a
phase reversal of 3⋅K1+M2.
- Comparing XTide output against hourly predictions from tidesandcurrents.noaa.gov for
Anchorage in year 2006 (when 3KM5 had a relatively large node factor)
revealed that NOAA is almost certainly not using the 3⋅K1+M2 definition
used by Congen ("Regular"), but it is not possible to distinguish K1+M2+K2
("Testnew") from a simple phase-reversal of 3⋅K1+M2 ("Flipped").
Resolution of predictions: 0.001 ft
Regular Testnew Flipped
3KM5 amplitude * 2006 node: 0.053 0.056 0.053
Range of error: -0.264..0.231 -0.168..0.143 -0.169..0.145 ± 0.001 ft
RMS error (95% CI): 0.090..0.092 0.053..0.054 0.053..0.054
Bias (95% CI): -0.002..0.002 -0.001..0.001 -0.001..0.001
As a baseline or control, here is the same comparison using Eastport instead
Range of error: -0.064..0.043 ± 0.001 ft
RMS error (95% CI): 0.013..0.013
Bias (95% CI): 0.000..0.001
- There is nothing wrong with RP1.
- KJ2 probably is wrong in SP98 and Congen. No station is using it;
however, it is one of the constituents that can be inferred.
TODO: check consistency of inferred KJ2 and PSI1 in libtcd.
- The IHO definition of 3KM5 is not what NOAA's tide prediction web service
is using. Without independent verification, it is not possible to
say which definition was used when the harmonic constants were
derived, i.e., which definition should be used when generating
predictions, but one would hope and assume that the web service is
consistent with it.
- It is reasonable to suspect that there is at least one more undiscovered
constituent clash in the expanded set of constituents used by Anchorage.
The 2016 harmonics update will include the K1+M2+K2 definition of
3KM5. That change and the above discussion should be included
in a revised congen_input.txt.
Upstream any harmless portability nits from XTideMac.
The XML parser should be bundled under the libxtide namespace but isn't.
Major things to do in XTide 3 if life turns out not to be too short after
- Renovate programming practices again (exceptions, checked and const
- On exceptions: get the application-specific error messages OUT of
- Move from Latin-1 to UTF-8 (requires libtcd revision).
- Harmonize the globe location chooser with the way that
Google Earth operates. Use OpenGL of course.
- Find a way to put an end to the infinite number of customization settings
for graph mode, such as by dumping ALL of the data, metadata, and events to
a single-file format that an external graphing app will read.
- Migrate to the windowing system that replaces X.
The following graph mode wish list was submitted by Kirby Vandivort in
- Print the prediction value below the time.
- Print the times of sunrise/sunset.
- Suppress the location line.
- Repeat the scale on the right side.
- Subdued color/linestyle (c.f. gnuplot) when using tenths.
- Fix wrong error message, "error on line 1 of --name," when congen input
- Use liboctave instead of a script file or convert to R.
- Update congen inputs if indicated by "quagmire" resolution above.
Remember to update the version strings in the pre-generated
DOS/tcd.h and VS/tcd.h files.
Remember to update the DOS and VS build instructions in the documentation
and in VS/README.txt.
Things to do in the next major revision, if there ever is one:
- Add header field to flag tides versus currents.
- Add depth field for currents.
- Get rid of internal state; fix inability to have more than one database
- Remove gratuitous complexity in the encoding of speeds, equilibrium
arguments, and node factors; make speeds 32-bit unsigned with no
- Possibly permit node factors to be specified for intervals shorter than
1 year and/or support apps that use libcongen to generate the
node factors themselves.