Forcing selection

Top graph showing the composed sum of 31 tidal factors from 1936 to 2004, displaying periodic fluctuations in blue tones.
The two images attached are a lunar-oriented forcing cycle for model of ENSO (top) and another lunar-oriented forcing cycle for LOD of Earth’s rotation (bottom). Analyze the modulation and consider that for the top curve the primary cycle is the draconic 27.2122 day period and for the bottom curve the primary cycle is the 13.6608 day Mf period. Do best to give a physical basis for why this might occur.

The Perplexity response:

Continue reading

GEM-LTE modeling

February 2026 Cross-Validation Experiments: GEM-LTE Mean Sea Level and Climate Index Modelling

Executive Summary

GEM-LTE/experiments/Feb2026 at main · pukpr/GEM-LTE

This directory contains results from a comprehensive cross-validation study applying the GEM-LTE (GeoEnergyMath Laplace’s Tidal Equation) model to 79 tide-gauge and climate-index time series spanning the 19th through early 21st centuries. The defining constraint of this study is a common holdout interval of 1940–1970: the model is trained exclusively on data outside this thirty-year window, and each subdirectory’s lte_results.csv and *site1940-1970.png chart record how well the trained model reproduces the withheld record.

The headline finding is that a single latent tidal manifold—constructed from the same set of lunisolar forcing components across all sites—achieves statistically significant predictive skill on the 1940–1970 interval for the great majority of the tested locations, with Pearson correlation coefficients (column 2 vs. column 3 of lte_results.csv) ranging from r ≈ 0.72 at the best-performing Baltic tide gauges to r ≈ 0.12 at the most challenging Atlantic stations. Because the manifold is common to every experiment while the LTE modulation parameters are fitted individually to each series, the cross-site pattern of validation performance is informative about which physical mechanisms link regional sea level (or climate variability) to the underlying lunisolar forcing—and about the geographic basin geometry that shapes each site’s characteristic amplitude response.


The GEM-LTE Model: A Common Latent Manifold with Variable LTE Modulation

read more below, and contribute here: Discussions · pukpr/GEM-LTE · Discussion #6

Continue reading

Hoyer Metric in LTE Model Fitting

Modern signal processing and system identification frequently require quantifying the sparseness or “peakiness” of vectors—such as power spectra. The Hoyer metric, introduced by Hoyer [2004], is a widely adopted measure for this purpose, especially in the context of nonnegative data (like spectra). This blog post explains the Hoyer metric’s role in fitting models in the context of LTE, its mathematical form, and provides references to its origins.


What Is the Hoyer Sparsity Metric?

Given a nonnegative vector (𝐱=[x1,x2,,xn]\mathbf{x} = [x_1, x_2, \dots, x_n]), the Hoyer sparsity is defined as:

Hoyer(𝐱)=n𝐱1𝐱2n1]\text{Hoyer}(\mathbf{x}) = \frac{\sqrt{n} – \dfrac{\|\mathbf{x}\|_1}{\|\mathbf{x}\|_2}}{\sqrt{n} – 1} ]

Where:

  • |𝐱|1=i=1n|xi||\mathbf{x}|_1 = \sum_{i=1}^{n} |x_i| is the L1 norm (sum of absolute values).
  • |𝐱|2=(i=1nxi2)1/2|\mathbf{x}|_2 = \left(\sum_{i=1}^{n} x_i^2 \right)^{1/2} is the L2 norm (Euclidean norm).
  • nn is the length of the vector.

The Hoyer metric ranges from 0 (completely distributed, e.g., flat spectrum) to 1 (maximally sparse, only one element is nonzero).


Why Use the Hoyer Metric in Fitting?

In signal processing and model fitting, especially where spectral features are important (e.g., EEG/MEG analysis, telecommunications, and fluid dynamics in the context of LTE), one often wants to compare not only overall power but the prominence of distinct peaks (spectral peaks) in data and models.

The function used in the LTE model, Hoyer_Spectral_Peak, calculates the Hoyer sparsity of a vector representing the spectrum of the observed data. When used in fitting, it serves to:

  • Quantify Peakiness: Models producing spectra closer in “peakiness” to the data will better mirror the physiological or system constraints.
  • Regularize Models: Enforcing a match in sparsity (not just in power) can avoid overfitting to distributed, non-specific solutions. It’s really a non-parametric modeling approach
  • Assess Structure Beyond RMS or Mean: Hoyer metric captures distribution shape—crucial for systems with sparse or peaky energy distributions.

Hoyer Metric Formula in the Code

The provided Ada snippet implements the Hoyer sparsity for a vector of LTE manifold data points. Here’s the formula as used:

    -- Hoyer_Spectral_Peak
    --
    function Hoyer_Spectral_Peak (Model, Data, Forcing : in Data_Pairs) return Long_Float is
      Model_S : Data_Pairs := Model;
      Data_S : Data_Pairs := Data;
      L1, L2 : Long_Float := 0.0;
      Len : Long_Float;
      RMS : Long_Float;
      Num, Den : Long_Float;
      use Ada.Numerics.Long_Elementary_Functions;
   begin
      ME_Power_Spectrum
        (Forcing => Forcing, Model => Model, Data => Data, Model_Spectrum => Model_S,
         Data_Spectrum => Data_S, RMS => RMS);
      Len := Long_Float(Data_S'Length);
      for I in Data_S'First+1 ..  Data_S'Last loop
         L1 := L1 + Data_S(I).Value;
         L2 := L2 + Data_S(I).Value * Data_S(I).Value;
      end loop;
      L2 := Sqrt(L2);
      Num := Sqrt(Len) - L1/L2;
      Den := Sqrt(Len) - 1.0;
      return Num/Den;
   end Hoyer_Spectral_Peak;  



Hoyer(𝐱)=ni=1nxii=1nxi2n1\text{Hoyer}(\mathbf{x}) = \frac{\sqrt{n} – \frac{\sum_{i=1}^{n} x_i}{\sqrt{\sum_{i=1}^{n} x_i^2}}}{\sqrt{n} – 1}

Where all (xi0x_i \geq 0). This is exactly as described in Hoyer’s paper.


Example Usage

Suppose the observed spectrum is more “peaky” than the model spectrum. By matching the Hoyer metric (alongside other criteria), the fitting procedure encourages the model to concentrate energy into peaks, better capturing the phenomenon under study.

For the LTE study here, the idea is to non-parametrically apply the Hoyer metric to map the latent forcing manifold to the observed climate index time-series, using Hoyer to optimize during search. This assumes that sparser stronger standing wave resonances act as the favored response regime — as is observed with the sparse number of standing waves formed during ENSO cycles (a strong basin wide standing wave and faster tropical instability waves as described in Chapter 12 of Mathematical Geoenergy).

Time series data visualization for Site #11, showing model and actual values from 1850 to 2025.

Using the LTE gui, the Hoyer metric is selected as H, and one can see that the lower right spectrum sharpens one or more spectral peaks corresponding to the Fourier series of the LTE modulation of the center right chart.

A user interface for an LTE Runner application displaying time series data and analysis results. The interface includes graphs for time series validation, latent forcing layers, running windowed correlation, and power spectrum modulation, along with regression statistics and model data comparisons.

It’s non-parametric in the sense that the LTE modulation parameters are not specified, as they would need to be for the correlation coefficient metric that I ordinarily use. The index here (#11) is the Warnemunde MSL time-series.


Citation and References

The Hoyer sparsity metric was introduced in:

  • Hoyer, P. O. (2004). “Non-negative matrix factorization with sparseness constraints.” Journal of Machine Learning Research, 5(Nov):1457–1469. [Link: JMLR Paper]

For further applications in neural data and spectral analysis, you may see usage such as:

  • Bruns, A. (2004). “Fourier-, Hilbert- and wavelet-based signal analysis: Are they really different approaches?” Journal of Neuroscience Methods, 137(2):321-332.

Conclusion

The Hoyer metric is a robust, intuitive, and well-cited tool for quantifying sparsity in spectra or model parameters—encouraging interpretable, physiologically plausible solutions when fitting models to data. It seems to work better than similar metrics such as entropic complexity, see reference below, where I tried applying it in the same LTE problem solution domain.


Reference:

  • Hoyer, P.O., “Non-negative matrix factorization with sparseness constraints,” JMLR, 5:1457–1469, 2004.\
  • Pukite, P., & Bankes, S. (2011). Entropic Complexity Measured in Context Switching. In Applications of Digital Signal Processing. InTech. https://doi.org/10.5772/25520

Let me know if you’d like code snippets, visualization examples, or more advanced mathematical discussion!

The mystery of El Nino

Google Gemini makes predictions on the next El Nino when prompted — scroll to the end.

https://gemini.google.com/app/8d7c963c197e05c0

There has ALWAYS been stratification in the ocean via the primary thermocline. The intensity of an El Nino or La Nina is dependent on the “tilt” of the thermocline across the equatorial Pacific, like a see-saw or teeter-totter as the colder waters below the thermocline get closer to the surface or recede more to the depths.

The only mystery is to what provokes the motion. For a playground see-saw, it’s easy to understand as it depends on which side a kid decides to junp on the see-saw.

For the ocean, the explanation is less facile than that, explain.

Continue reading

Current status of research according to AI

explain the Pukite tidal theory

The Pukite Tidal Theory, primarily developed by researcher Paul Pukite, proposes that long-period tidal forcing is the underlying driver for several major geophysical and atmospheric cycles that have previously been considered erratic or unresolved. [1, 2]

The core of the theory is that small gravitational perturbations from the Moon and Sun, which are perfectly predictable, are “aliased” or modulated by seasonal cycles to create the complex behaviors seen in Earth’s systems. [3, 4]

Key Phenomena Addressed

Pukite applies this model to three main “unresolved mysteries” in geophysics:

  • Quasi-Biennial Oscillation (QBO): A regular reversal of stratospheric winds. The theory argues that lunar nodal cycles, when combined with the annual solar cycle, create the roughly 28-month QBO period through a process called physical aliasing.
  • El Niño Southern Oscillation (ENSO): An erratic oceanic temperature cycle. The model suggests ENSO is a “sloshing” response of the ocean to tractive gravitational forces, essentially treating it as a solution to Laplace’s Tidal Equations.
  • Chandler Wobble: A small deviation in the Earth’s axis of rotation. The theory posits this is caused by an external lunar torque rather than internal Earth dynamics. [1, 2, 3, 5, 6, 7]

How the Model Works

  1. Lunar Gravitational Potential: The model starts by calculating the precise lunar gravitational potential over time.
  2. Seasonal Modulation: These fast lunar cycles are provoked by a seasonal (yearly) peak in energy. This “carrier” signal helps filter out short-term fluctuations and reveals long-term patterns.
  3. Physical Aliasing: Because these cycles are sampled or triggered by seasonal events (like solstices), the resulting data shows lower-frequency “aliased” harmonics that match the observed multi-year periods of ENSO and QBO. [4, 8, 9]

Scientific Reception

This theory is considered a novel and controversial alternative to standard geophysical models. While it offers high correlation with historical data, it has faced skepticism from mainstream physical oceanographers and meteorologists who argue that it may “shoehorn” complex fluid dynamics into a periodic framework. Much of the work is documented on the GeoEnergy Math blog and in discussion papers for the Earth System Dynamics (ESD) journal. [1, 4, 7, 10]

Would you like to see a more detailed breakdown of the mathematical aliasing used to explain the QBO’s 28-month cycle?

[1] https://esd.copernicus.org

[2] https://www.researchgate.net

[3] https://esd.copernicus.org

[4] https://geoenergymath.com

[5] https://acp.copernicus.org

[6] https://geoenergymath.com

[7] https://geoenergymath.com

[8] https://esd.copernicus.org

[9] https://geoenergymath.com

[10] https://esd.copernicus.org


This link may go stale, but here is the original response:

https://share.google/aimode/ta098ixUIyoNefp49

Pairing of solar and lunar factors

A number of the Earth’s geophysical behaviors characterized by cycles have both a solar and lunar basis. For the ubiquitous ocean tides, the magnitude of each factor are roughly the same — rationalized by the fact that even though the sun is much more massive than the moon, it’s much further away.

However, there are several behaviors that even though they have a clear solar forcing, lack a lunar counterpart. These include the Earth’s fast wobble, the equatorial SAO/QBO, ENSO, and others. The following table summarizes how these gaps in causation are closed, with the missing lunar explanation bolded. Unless otherwise noted by a link, the detailed analysis is found in the text Mathematical Geoenergy.

Geophysical BehaviorSolar ForcingLunar Forcing
Conventional Ocean TidesSolar diurnal tide (S1), solar semidiurnal (S2)Lunar diurnal tide (O1), lunar semidiurnal (M2),
Length of Day (LOD) VariationsAnnual, semi-annualMonthly, fortnightly, 9-day, weekly
Long-Period TidesSolar annual variations (Sa), solar semi-annual (Ssa)Fortnightly (Mf), monthly (Mm, Msm), mixed harmonics
Chandler WobbleAnnual wobble 433 day cycle caused by draconic stroboscopic effect
Quasi-Biennial Oscillation (QBO)Semi-Annual Oscillation (SAO) above QBO in altitude28-month caused by draconic stroboscopic effect
El Niño–Southern Oscillation (ENSO)Seasonal impulse acts as carrier and spring unpredictability barrierErratic cycling caused by draconic + other tidal factors per stroboscopic effect
Eclipse eventsSun-Moon alignment (draconic cycle critical)Sun-Moon alignment (draconic cycle critical)
Other Climate Indices and MSLStrong annual modulation and triggerSimilar to ENSO, see https://github.com/pukpr/GEM-LTE
Milankovitch CyclesEccentricity, obliquity, and precessionAxial drift in precessional cycle
Regression of nodes (nutation)Controlled +/- about the Earth-Sun ecliptic planeDraconic & tropical define an 18.6 year beat in nodal crossings
Atmospheric ringingDaily atmospheric tidesFortnightly modulation
https://geoenergymath.com/the-just-so-story-narrative/
Seasonal ClimateAnnual tilted orbit around the sun
Daily ClimateEarth’s rotation rate
Anthropogenic Global Warming
Seismic Activity(sporadic stochastic trigger)(sporadic stochastic trigger)
Geomagnetic, Geothermal, etc??

The most familiar periodic factors – the daily and seasonal cycles – being primarily radiative processes obviously have no lunar counterpart.

And climate science itself is currently preoccupied with the prospect of anthropogenic global warming/climate change, which has little connection to the sun or moon, so the significance of the connections shown is largely muted by louder voices.


References:

  • Mathematical Geoenergy, 2019 (in BOLD)
  • Cartwright & Edden, Tidal Generation studies
  • Various oceanography & geodesy literature
  • Stroboscopic effect — these researchers were close but made the mistake of comparing to a sunspot cycle
Text excerpt discussing the influence of solar cycles and quasi-biennial oscillation on stratospheric temperature variations.

Minnesota ICE-OUT update

This is an update to analyzing the dates of Minnesota lakes ice-out events, as described on this blog years ago: Ice Out

The trend has been that dates have been creeping earlier, corresponding to warmer winters.

Scatter plot showing the relationship between the year and the number of ice-out days in Minnesota at latitude 43 N, with a fitted trend line indicating a slight decreasing slope.
Scatter plot showing ice-out days in Minnesota at latitude 44 N over the years from 1840 to 2040, with a trend line indicating a slight decline.
Scatter plot showing the trend of ice out days per year in Minnesota (Latitude: 45 N) from 1860 to 2020. The fitted line indicates a slight downward trend, with the y-axis representing ice out days and the x-axis representing years.
Scatter plot showing ice out days per year from 1880 to 2023 in Minnesota, with a fitted regression line indicating a slight downward trend.
Scatter plot showing the trend of ice out day data over the years in Minnesota at latitude 47 N, with a fitted slope indicating a decrease in days per year, represented by red circles and a blue trend line.
Scatter plot showing the relationship between year and ice-out day for Minnesota at latitude 48 N, with fitted regression line indicating a negative slope.

This is all automated, pulled from JSON data residing on a Minnesota DNR server. I hadn’t looked at it for a while, as the original client query assumed that the JSON was in strict order, but the response changed to random and only recently have I updated. The same approach used is to access lake data from common latitudes and do a least-squares regression on each set. The software is described here and available here, based on a larger AI project described here.

User interface displaying a form for plotting data from 1843 to 2025 with a specified latitude of 44.0, accompanied by options to clear data and submit the request.

There are seven anomalous data points1 that point to ice-out dates prior to January, which may in fact be faulty data, but are kept in place because they won’t change the slopes too much

Summary

2013 slopes2026 slopes
43 N-0.066-0.1042
44 N-0.047-0.08595
45 N-0.068-0.10873
46 N-0.0377-0.0416
47 N-0.0943-0.04138
48 N-0.1995-0.0835

The overall average is around -0.08 days earlier per year which amounts to 8 days earlier ice-out over 100 years.

The last “year without a winter” in Minnesota was 1877-1878 which corresponded to a huge global El Nino. One can perhaps see this in the 44 N and 45 N plots showing early outliers but the data was sparse back then. More obvious is the short winter of 2023-2024, where many lakes never froze or one close to my place was really only solid for a time in December. Can look up news stories on this such as the following

2024: The Brainerd Jaycees Ice Fishing Extravaganza on Gull Lake—one of the world's largest—was canceled for the first time in its 34-year history because the ice was too thin to support the event.

Footnotes

  1. The following lakes showed anomalous ice-out dates, assumed to be late in the previous year or late in the current year, the latter which would be physically impossible
    Lake Cotton @ 46.88259 N (11/23/2010 [day -39.0]))
    Lake Leek (Trowbridge) @ 46.68309 N (12/07/2021 [day -25.0]))
    Lake Little Wabana @ 47.40002 N (12/08/2021 [day -24.0]))
    Lake Star @ 45.06337 N (11/20/2022 [day -42.0]))
    Lake Lewis @ 45.7479 N (11/28/2022 [day -34.0]))
    Lake Unnamed @ 44.81299 N (11/25/2023 [day -37.0]))
    Lake Unnamed @ 44.81299 N (11/26/2024 [day -36.0])) ↩︎

Hidden latent manifolds in fluid dynamics

The behavior of complex systems, particularly in fluid dynamics, is traditionally described by high-dimensional systems of equations like the Navier-Stokes equations. While providing practical applications as is, these models can obscure the underlying, simplified mechanisms at play. It is notable that ocean modeling already incorporates dimensionality reduction built in, such as through Laplace’s Tidal Equations (LTE), which is a reduced-order formulation of the Navier-Stokes equations. Furthermore, the topological containment of phenomena like ENSO and QBO within the equatorial toroid , and the ability to further reduce LTE in this confined topology as described in the context of our text Mathematical Geoenergy underscore the inherent low-dimensional nature of dominant geophysical processes. The concept of hidden latent manifolds posits that the true, observed dynamics of a system do not occupy the entire high-dimensional phase space, but rather evolve on a much lower-dimensional geometric structure—a manifold layer—where the system’s effective degrees of freedom reside. This may also help explain the seeming paradox of the inverse energy cascade, whereby order in fluid structures seems to maintain as the waves become progressively larger, as nonlinear interactions accumulate energy transferring from smaller scales.

Discovering these latent structures from noisy, observational data is the central challenge in state-of-the-art fluid dynamics. Enter the Sparse Identification of Nonlinear Dynamics (SINDy) algorithm, pioneered by Brunton et al. . SINDy is an equation-discovery framework designed to identify a sparse set of nonlinear terms that describe the evolution of the system on this low-dimensional manifold. Instead of testing all possible combinations of basis functions, SINDy uses a penalized regression technique (like LASSO) to enforce sparsity, effectively winnowing down the possibilities to find the most parsimonious, yet physically meaningful, governing differential equations. The result is a simple, interpretable model that captures the essential physics—the fingerprint of the latent manifold. The SINDy concept is not that difficult an algorithm to apply as a decent Python library is available for use, and I have evaluated it as described here.

Applying this methodology to Earth system dynamics, particularly the seemingly noisy, erratic, and perhaps chaotic time series of sea-level variation and climate index variability, reveals profound simplicity beneath the complexity. The high-dimensional output of climate models or raw observations can be projected onto a model framework driven by remarkably few physical processes. Specifically, as shown in analysis targeting the structure of these time series, the dynamics can be cross-validated by the interaction of two fundamental drivers: a forced gravitational tide and an annual impulse.

The presence of the forced gravitational tide accounts for the regular, high-frequency, and predictable components of the dynamics. The annual impulse, meanwhile, serves as the seasonal forcing function, representing the integrated effect of large-scale thermal and atmospheric cycles that reset annually. The success of this sparse, two-component model—where the interaction of these two elements is sufficient to capture the observed dynamics—serves as the ultimate validation of the latent manifold concept. The gravitational tides with the integrated annual impulse are the discovered, low-dimensional degrees of freedom, and the ability of their coupled solution to successfully cross-validate to the observed, high-fidelity dynamics confirms that the complex, high-dimensional reality of sea-level and climate variability emerges from this simple, sparse, and interpretable set of latent governing principles. This provides a powerful, physics-constrained approach to prediction and understanding, moving beyond descriptive models toward true dynamical discovery.

An entire set of cross-validated models is available for evluation here: https://pukpr.github.io/examples/mlr/.

This is a mix of climate indices (the 1st 20) and numbered coastal sea-level stations obtained from https://psmsl.org/

https://pukpr.github.io/examples/map_index.html

  • nino34 — NINO34 (PACIFIC)
  • nino4 — NINO4 (PACIFIC)
  • amo — AMO (ATLANTIC)
  • ao — AO (ARCTIC)
  • denison — Ft Denison (PACIFIC)
  • iod — IOD (INDIAN)
  • iodw — IOD West (INDIAN)
  • iode — IOD East (INDIAN)
  • nao — NAO (ATLANTIC)
  • tna — TNA Tropical N. Atlantic (ATLANTIC)
  • tsa — TSA Tropical S. Atlantic (ATLANTIC)
  • qbo30 — QBO 30 Equatorial (WORLD)
  • darwin — Darwin SOI (PACIFIC)
  • emi — EMI ENSO Modoki Index (PACIFIC)
  • ic3tsfc — ic3tsfc (Reconstruction) (PACIFIC)
  • m6 — M6, Atlantic Nino (ATLANTIC)
  • m4 — M4, N. Pacific Gyre Oscillation (PACIFIC)
  • pdo — PDO (PACIFIC)
  • nino3 — NINO3 (PACIFIC)
  • nino12 — NINO12 (PACIFIC)
  • 1 — BREST (FRANCE)
  • 10 — SAN FRANCISCO (UNITED STATES)
  • 11 — WARNEMUNDE 2 (GERMANY)
  • 14 — HELSINKI (FINLAND)
  • 41 — POTI (GEORGIA)
  • 65 — SYDNEY, FORT DENISON (AUSTRALIA)
  • 76 — AARHUS (DENMARK)
  • 78 — STOCKHOLM (SWEDEN)
  • 111 — FREMANTLE (AUSTRALIA)
  • 127 — SEATTLE (UNITED STATES)
  • 155 — HONOLULU (UNITED STATES)
  • 161 — GALVESTON II, PIER 21, TX (UNITED STATES)
  • 163 — BALBOA (PANAMA)
  • 183 — PORTLAND (MAINE) (UNITED STATES)
  • 196 — SYDNEY, FORT DENISON 2 (AUSTRALIA)
  • 202 — NEWLYN (UNITED KINGDOM)
  • 225 — KETCHIKAN (UNITED STATES)
  • 229 — KEMI (FINLAND)
  • 234 — CHARLESTON I (UNITED STATES)
  • 245 — LOS ANGELES (UNITED STATES)
  • 246 — PENSACOLA (UNITED STATES)

Crucially, this analysis does not use the SINDy algorithm, but a much more basic multiple linear regression (MLR) algorithm predecessor, which I anticipate being adapted to SINDy as the model is further refined. Part of the rationale for doing this is to maintain a deep understanding of the mathematics, as well as providing cross-checking and thus avoiding the perils of over-fitting, which is the bane of neural network models.

Also read this intro level on tidal modeling, which may form the fundamental foundation for the latent manifold: https://pukpr.github.io/examples/warne_intro.html. The coastal station at Wardemunde in Germany along the Baltic sea provided a long unbroken interval of sea-level readings which was used to calibrate the hidden latent manifold that in turn served as a starting point for all the other models. Not every model works as well as the majority — see Pensacola for a sea-level site and and IOD or TNA for climate indices, but these are equally valuable for understanding limitations (and providing a sanity check against an accidental degeneracy in the model fitting process) . The use of SINDy in the future will provide additional functionality such as regularization that will find an optimal common-mode latent layer,.

amo.dat.p

AMO trained on region outside of dashed line, so that’s the cross-validated region, using Descent optimized LTE annual time-series, Python

python3 ts_lte.py amo.dat –cc –plot –low 1930 –high 1960

using the following JSON parameters file

amo.dat.p

{
  "Aliased": [
    0.422362756,
    0.38861749700000003,
    0.23562139699999995,
    0.259019747,
    0.33201584700000003,
    0.165274488,
    0.262765007,
    0.385761106,
    0.07374525999999999,
    0.215992198,
    0.192246939,
    0.528757205,
    0.112996099,
    0.03714361,
    0.10034691,
    0.07660165,
    0.501613596,
    2.0,
    1.0
  ],
  "AliasedAmp": [
    0.03557922624939592,
    0.09988731513671248,
    0.07106292426402241,
    0.1202147059011645,
    -0.16310647366824904,
    -0.21099766009700224,
    0.3178250739779875,
    -0.034763054040409205,
    -0.26973831298426476,
    -0.13417117453373803,
    0.33741450649520405,
    0.14844747522132112,
    0.38176481941684715,
    -0.24512757533159843,
    0.17007002069621968,
    -0.3175673142831867,
    -0.0801663078936891,
    0.0410641305028224,
    0.15648561320675802
  ],
  "AliasedPhase": [
    12.907437383830702,
    9.791011963532627,
    20.894959747239227,
    11.230932614457465,
    24.106215317177334,
    14.921596063027563,
    11.928445369162157,
    14.76066439534825,
    9.307516552468496,
    6.238399781667854,
    4.78878496205605,
    19.328424226102666,
    4.1510957254818255,
    24.986414787848002,
    3.764292351659264,
    7.899565162852414,
    10.701455186458222,
    6.575719630634085,
    4.603123916071089
  ],
  "DeltaTime": 7.217156366226141e-06,
  "Hold": 0.001560890374528988,
  "Imp_Amp": 36.03147961053978,
  "Imp_Stride": 1,
  "Initial": 0.023119471463386495,
  "LTE_Amp": 1.2149052076222568,
  "LTE_Freq": 232.0780473685175,
  "LTE_Phase": -1.98155204056087,
  "Periods": [
    27.2122,
    27.3216,
    27.564500000000002,
    13.63339513,
    13.69114014,
    13.5961,
    13.6708,
    13.72877789,
    6795.015773000002,
    1616.2951719999999,
    2120.013852999989,
    13.78725,
    3232.690344000001,
    9.142931547,
    9.108450374,
    9.120674533,
    27.0926041
  ],
  "PeriodsAmp": [
    0.22791356815287772,
    0.03599719419115529,
    0.18676833431961723,
    0.03956128728097599,
    -0.2649706920257545,
    0.10022074474351093,
    0.10436992221139457,
    0.14430534046016136,
    0.07102249228279979,
    0.11758452315976271,
    0.04510213195702457,
    0.06361160068822835,
    0.05674788795284906,
    -0.043657524764462274,
    0.07791151774412787,
    0.019631216465477552,
    -0.14009026634971397
  ],
  "PeriodsPhase": [
    13.451016651034463,
    7.371101643819357,
    18.44011357432109,
    6.802030606034782,
    21.120997888353294,
    9.616514380782336,
    5.715489866748063,
    10.809731364754402,
    9.031554832315345,
    7.401459819968337,
    5.9383444499771105,
    14.60402121854254,
    5.541215399062276,
    8.44043335583645,
    1.6019323722385819,
    7.500513005887212,
    7.860442540394975
  ],
  "Year": 365.2520198,
  "final_state": {
    "D_prev": 0.04294
  }
}

Primary 27.2122 > 27.5545 > 27.3216 > others

{
  "Aliased": [
    "0.0537449",
    "0.1074898",
    "0.220485143",
    "0.5",
    "1",
    "2"
  ],
  "AliasedAmp": [
    -0.27685696043001307,
    0.16964990314670372,
    0.11895402824503996,
    -0.22535505798739713,
    -0.14980527635880514,
    0.039162442368949016
  ],
  "AliasedPhase": [
    8.086868082389797,
    6.5259913891848225,
    6.976139887075208,
    0.73810967841759,
    -0.7194832011130626,
    8.565521480562625
  ],
  "DC": -0.2680318100166013,
  "DeltaTime": 3.339861667887925,
  "Hold": 0.0014930905734095634,
  "Imp_Amp": 199.01398139940682,
  "Imp_Amp2": -0.5731191105049073,
  "Imp_Stride": 8,
  "Initial": 0.06704092573627028,
  "LTE_Amp": 1.3767200538799589,
  "LTE_Freq": 125.32556941298645,
  "LTE_Phase": 0.7307737940808291,
  "LTE_Zero": 1.4258992716041372,
  "Periods": [
    "27.2122",
    "27.3216",
    "27.5545",
    "13.63339513",
    "13.69114014",
    "13.6061",
    "13.6608",
    "13.71877789",
    "6795.985773",
    "1616.215172",
    "2120.513853",
    "13.77725",
    "3232.430344",
    "9.132931547",
    "9.108450374",
    "9.120674533",
    "27.0926041",
    "3397.992886",
    "9.095011909",
    "9.082856397",
    "6.809866946",
    "2190.530426",
    "6.816697567",
    "6.823541904",
    "1656.572278"
  ],
  "PeriodsAmp": [
    0.30508787370803825,
    0.13110586375848174,
    0.20288728084656027,
    -0.04672659187556317,
    -0.004826158765318568,
    -0.035033863263707915,
    -0.0368824777486948,
    0.03511304770515584,
    0.011720764708907096,
    -0.004694584574980881,
    0.029609791456868918,
    0.039125743540538716,
    -0.007414683923403197,
    0.00010802542017018773,
    -0.018330796222247217,
    -0.006001961724770963,
    -0.03735314717727939,
    -0.004108234580768664,
    0.011857949379825367,
    0.01479879984548296,
    0.02390111774094945,
    -0.039440470787466424,
    -0.032966674657844246,
    -0.030591610040324502,
    0.013039117473425073
  ],
  "PeriodsPhase": [
    14.569679572272141,
    8.743347618608817,
    6.063986820806294,
    4.382376561017971,
    9.81395082674981,
    5.545094399669723,
    7.378109970639206,
    3.912962970116576,
    7.840782183776614,
    4.988264989477043,
    5.697804841039319,
    7.455439074616485,
    2.972944156135133,
    4.7630843491223365,
    6.317733397950582,
    7.279885606476663,
    3.8917494187283728,
    5.801812295837,
    6.975196465036293,
    6.128620153406749,
    4.95108326060857,
    4.307377590535454,
    5.8886081102774535,
    4.9456215506967265,
    4.232011434810574
  ],
  "Year": "365.2495755"
}

Alternate Julia fitting routine

Warnemunde, DE tidal station

https://docs.google.com/spreadsheets/d/1HysiqoPN-j1M2lTLUpQaGZPAxvJIesFrJMBoYJyWA5I/edit?usp=sharing


started from Warnemunde SLH model fit

Name Value
—- —–
ALIGN 0
EXTRA 0
FORCING 0
MAX_ITERS 50
RELATIVE 1
STEP 0.05

PS C:\Users\paul\github\pukpr\python\simple\run0> cat .\amo.dat.p
{
“Aliased”: [
“0.0537449”,
“0.1074898”,
“0.220485143”,
“0.5”,
“1”,
“2”
],
“AliasedAmp”: [
-0.12182091549739567,
0.25801568818215476,
0.09920867308439774,
-0.1737322618819654,
-0.07529335982382553,
0.052057481476465634
],
“AliasedPhase”: [
4.921761286209268,
5.7618887121423965,
7.487588835004665,
0.8600259809362271,
0.01213560781160881,
7.655542996972892
],
“DC”: -0.008758390763317466,
“Damp”: -0.022154904178658865,
“DeltaTime”: “3.416666667”,
“Hold”: 0.0014873352555352655,
“Imp_Amp”: 190.5449378494113,
“Imp_Amp2”: 1.466945315006192,
“Imp_Stride”: 7,
“Initial”: 0.060016503798714434,
“LTE_Amp”: 1.587179814234174,
“LTE_Freq”: 125.53536829233441,
“LTE_Phase”: 1.2439579952989555,
“LTE_Zero”: 0.896474895660982,
“Periods”: [
“27.2122”,
“27.3216”,
“27.5545”,
“13.63339513”,
“13.69114014”,
“13.6061”,
“13.6608”,
“13.71877789”,
“6795.985773”,
“1616.215172”,
“2120.513853”,
“13.77725”,
“3232.430344”,
“9.132931547”,
“9.108450374”,
“9.120674533”,
“27.0926041”,
“3397.992886”,
“9.095011909”,
“9.082856397”,
“6.809866946”,
“2190.530426”,
“6.816697567”,
“6.823541904”,
“1656.572278”
],
“PeriodsAmp”: [
0.27470885437689657,
0.12275502752316671,
0.08957207441483245,
-0.016351843276285773,
-0.0023253487734064167,
-0.027825652713169724,
-0.03622467995377892,
0.03745364586195977,
0.016931934821747943,
-0.007763938392135198,
0.001227009837326124,
-0.025790386622741152,
-0.008565987883641879,
0.00014664749664687222,
-0.01704107349960909,
-0.00797921907994325,
-0.03177647026752983,
-0.004956872049734769,
0.007932726074580026,
0.014516028377323971,
-0.021088964802417443,
-0.020789594142410307,
-0.0394312191315924,
-0.04134814573194381,
0.016270585503279013
],
“PeriodsPhase”: [
14.531794321199,
9.047644816654925,
6.2513288041048165,
4.835012524578427,
8.2937810112731,
5.467748908147056,
8.57387165414261,
4.054729761879573,
7.943122954685947,
8.951903685571338,
2.710382136770864,
8.02559427189266,
3.2041095507982096,
5.942537145429701,
5.976976092641082,
7.506337445154253,
5.347578022677064,
8.017917628086881,
5.8570430281895804,
6.547489676521564,
4.764028618408168,
4.06142922152038,
6.49245321390355,
4.201452643286066,
6.210242390637271
],
“Year”: “365.2495755”
}
PS C:\Users\paul\github\pukpr\python\simple\run0>

amo.dat.p

compare to warnemunde reference, warne.dat.p

{
“Aliased”: [
“0.0537449”,
“0.1074898”,
“0.220485143”,
“0.5”,
“1”,
“2”
],
“AliasedAmp”: [
-0.4042092506880945,
0.1498026647936091,
0.34974191131892546,
-0.06275860364797245,
-0.12693112051883154,
0.05360693094611856
],
“AliasedPhase”: [
5.022341284265671,
6.12724416388633,
5.10501755051668,
1.3489606861498495,
0.1576762764662913,
6.305517708416614
],
“DC”: -0.008758390763317466,
“Damp”: -0.004169125923760335,
“DeltaTime”: “3.416666667”,
“Hold”: 0.001492802207237816,
“Imp_Amp”: 197.45336102884804,
“Imp_Amp2”: 1.8841384082886352,
“Imp_Stride”: 8,
“Initial”: 0.06797642598445004,
“LTE_Amp”: 1.1234722131058268,
“LTE_Freq”: 129.45433340867712,
“LTE_Phase”: 0.9136521644032515,
“LTE_Zero”: 1.4732244756410906,
“Periods”: [
“27.2122”,
“27.3216”,
“27.5545”,
“13.63339513”,
“13.69114014”,
“13.6061”,
“13.6608”,
“13.71877789”,
“6795.985773”,
“1616.215172”,
“2120.513853”,
“13.77725”,
“3232.430344”,
“9.132931547”,
“9.108450374”,
“9.120674533”,
“27.0926041”,
“3397.992886”,
“9.095011909”,
“9.082856397”,
“6.809866946”,
“2190.530426”,
“6.816697567”,
“6.823541904”,
“1656.572278”
],
“PeriodsAmp”: [
0.2969846885625734,
0.12715090239433,
0.11195966030804025,
-0.014279802990919828,
-0.007476472864580455,
-0.027618411935182365,
-0.0314800276468536,
0.01803389223741826,
0.011163663341122482,
-0.0012907337497222084,
0.010385914775159287,
-0.024140665704639786,
-0.0024596839864129026,
0.00027007377126487056,
-0.014632061204798591,
-0.005915227697593744,
-0.04415788786521701,
-0.0030602495341499583,
0.009422574691039923,
0.013666201034033513,
-0.011874548174887829,
-0.01644029616663989,
-0.027183125961912056,
-0.01849393725550493,
0.0035426632273613356
],
“PeriodsPhase”: [
14.521637612309751,
8.824373362823483,
6.120768972631713,
5.031389621562438,
7.68019623052033,
5.535148594183447,
7.8408960747147844,
3.7085965346643084,
7.8128946785721185,
5.8037304389860065,
5.996864724827583,
8.12109584535951,
2.86102851568745,
6.520420198470608,
5.568571652192804,
7.4330567654835455,
4.544814917547044,
6.625719182549832,
7.045017606299215,
6.1446045083619385,
6.171838481758574,
4.209559209227534,
6.043091099560879,
4.664388204620863,
5.099462955240412
],
“Year”: “365.2495755”
}

warne.dat.p

AMO LTE

“LTE_Amp”: 1.587179814234174,
“LTE_Freq”: 125.53536829233441,
“LTE_Phase”: 1.2439579952989555,
“LTE_Zero”: 0.896474895660982,

Warne LTE

“LTE_Amp”: 1.1234722131058268,
“LTE_Freq”: 129.45433340867712,
“LTE_Phase”: 0.9136521644032515,
“LTE_Zero”: 1.4732244756410906,

AMO Warnemunde