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

Simpler models can outperform deep learning at climate prediction

This article in MIT News:

https://news.mit.edu/2025/simpler-models-can-outperform-deep-learning-climate-prediction-0826

“New research shows the natural variability in climate data can cause AI models to struggle at predicting local temperature and rainfall.” … “While deep learning has become increasingly popular for emulation, few studies have explored whether these models perform better than tried-and-true approaches. The MIT researchers performed such a study. They compared a traditional technique called linear pattern scaling (LPS) with a deep-learning model using a common benchmark dataset for evaluating climate emulators. Their results showed that LPS outperformed deep-learning models on predicting nearly all parameters they tested, including temperature and precipitation.

Machine learning and other AI approaches such as symbolic regression will figure out that natural climate variability can be done using multiple linear regression (MLR) with cross-validation (CV), which is an outgrowth or extension of linear pattern scaling (LPS).

https://pukpr.github.io/results/image_results.html

When this was initially created on 9/1/2025, there were 3000 CV results on time-series
that averaged around 100 years (~1200 monthly readings/set) so over 3 million data points

In this NINO34 (ENSO) model, the test CV interval is shown as a dashed region

I developed this github model repository to make it easy to compare many different data sets, much better than using an image repository such as ImageShack.

There are about 130 sea-level height monitoring stations in the sites, which is relevant considering how much natural climate variation a la ENSO has an impact on monthly mean SLH measurements. See this paper Observing ENSO-modulated tides from space

“In this paper, we successfully quantify the influences of ENSO on tides from multi-satellite altimeters through a revised harmonic analysis (RHA) model which directly builds ENSO forcing into the basic functions of CHA. To eliminate mathematical artifacts caused by over-fitting, Lasso regularization is applied in the RHA model to replace widely-used ordinary least squares. “

Mathematical GeoEnergy 2018 vs ChatGPT 2025

On RealClimate.org

Paul Pukite (@whut) says

1 JUL 2025 AT 9:48 PM

Your comment is awaiting moderation.

“If so, do you have an explanation why the diurnal tides do not move the thermocline, whereas tides with longer periods do?”

The character of ENSO is that it shifts by varying amounts on an annual basis. Like any thermocline interface, it reaches the greatest metastability at a specific time of the year. I’m not making anything up here — the frequency spectrum of ENSO (pick any index NINO4, NINO34, NINO3) shows a well-defined mirror symmetry about the value 0.5/yr. Given that Incontrovertible observation, something is mixing with the annual impulse — and the only plausible candidate is a tidal force.
So the average force of the tides at this point is the important factor to consider. Given a very sharp annual impulse, the near daily tides alias against the monthly tides — that’s all part of mathematics of orbital cycles. So just pick the monthly tides as it’s convenient to deal with and is a more plausible match to a longer inertial push.

Sunspots are not a candidate here.

Some say wind is a candidate. Can’t be because wind actually lags the thermocline motion.

So the deal is, I can input the above as a prompt to ChatGPT and see what it responds with

https://chatgpt.com/share/68649088-5c48-8010-a767-4fe75ddfeffc

Chat GPT also produces a short Python script which generates the periodogram of expected spectral peaks.

I placed the results into a GitHub Gist here, with charts:
https://gist.github.com/pukpr/498dba4e518b35d78a8553e5f6ef8114

I made one change to the script (multiplying each tidal factor by its frequency to indicate its inertial potential, see the ## comment)

At the end of the Gist, I placed a representative power spectrum for the actual NINO4 and NINO34 data sets showing where the spectral peaks match. They all match. More positions match if you consider a biennial modulation as well.

Now, you might be saying — yes, but this all ChatGPT and I am likely coercing the output. Nothing of the sort. Like I said, I did the original work years ago and it was formally published as Mathematical Geoenergy (Wiley, 2018). This was long before LLMs such as ChatGPT came into prominence. ChatGPT is simply recreating the logical explanation that I had previously published. It is simply applying known signal processing techniques that are generic across all scientific and engineering domains and presenting what one would expect to observe.

In this case, it carries none of the baggage of climate science in terms of “you can’t do that, because that’s not the way things are done here”. ChatGPT doesn’t care about that prior baggage — it does the analysis the way that the research literature is pointing and how the calculation is statistically done across domains when confronted with the premise of an annual impulse combined with a tidal modulation. And it nailed it in 2025, just as I nailed it in 2018.

Reply

Teleconnection vs Common-Mode

A climate teleconnection is understood as one behavior impacting another — for example NINOx => AMO, meaning the Pacific ocean ENSO impacting the Atlantic ocean AMO via a remote (i.e. tele) connectiion. On the other hand, a common-mode behavior is a result of a shared underlying cause impacting a response in a uniquely parameterized fashion — for example NINOx = g(F(t), {n1, n2, n3, ...}) and AMO = g(F(t), {a1, a2, a3, ...}), where the n's are a set of constant parameters for NINOx and the a's are for AMO.

In this formulation F(t) is a forcing and g() is a transformation. Perhaps the best example of a common-mode response to a forcing is in the regional tidal response in local sea-level height (SLH). Obviously, the lunisolar forcing is a common mode in different regions and subtle variations in the parametric responses is required to model SLH uniquely. Once the parameters are known, one can make practical predictions (subject to recalibration as necessary).

Continue reading

Topology shapes climate dynamics

A paper from last week with high press visibility that makes claims to climate1 applicability is titled: Topology shapes dynamics of higher-order networks

The higher-order Topological Kuramoto dynamics, defined in Eq. (1), entails one linear transformation of the signal induced by a boundary operator, a non-linear transformation due to the application of the sine function, concatenated by another linear transformation induced by another boundary operator. These dynamical transformations are also at the basis of simplicial neural architectures, especially when weighted boundary matrices are adopted.

\dot{\theta}_i = \omega_i + \sum_{j} K_{ij} \sin(\theta_j - \theta_i) + F(t)

This may be a significant unifying model as it could resolve the mystery of why neural nets can fit fluid dynamic behaviors effectively without deeper understanding. In concise terms, a weighted sine function acts as a nonlinear mixing term in a NN and serves as the non-linear transformation in the Kuramoto model2.

Continue reading

20yrs of blogging in hindsight

Reminded by a 20-year anniversary post at RealClimate.org, that I’ve been blogging for 20 years + 6 months on topics of fossil fuel depletion + climate change. The starting point was at a BlogSpot blog I created in May 2004, where the first post set the stage:


Click on the above to go to the complete archives (almost daily posts) until I transitioned to WordPress and what became the present blog. After 2011, my blogging pace slowed down considerably as I started to write in more in more technical terms. Eventually the most interesting and novel posts were filtered down to a set that would eventually become the contents of Mathematical Geoenergy : Discovery, Depletion, and Renewal, published in late 2018/early 2019 by Wiley with an AGU imprint.

The arc that my BlogSpot/WordPress blogging activity followed occupies somewhat of a mirror universe to that of RealClimate. I initially started out with an oil depletion focus and by incrementally understanding the massive inertia that our FF-dependent society had developed, it placed the climate science aspect into a different perspective and context. After realizing that CO2 did not like to sequester, it became obvious that not much could be done to mitigate the impact of gradually increasing GHG levels, and that it would evolve into a slow-moving train wreck. That’s part of the reason why I focused more on research into natural climate variability. In contrast, RealClimate (and all the other climate blogs) continued to concentrate on man-made climate change. At this point, my climate fluid dynamics understanding is at some alternate reality level, see the last post, still very interesting but lacking any critical acceptance (no debunking either, which keeps it alive and potentially valid).

The oil depletion aspect more-or-less spun off into the PeakOilBarrel.com blog [*] maintained by my co-author Dennis Coyne. That’s like watching a slow-moving train wreck as well, but Dennis does an excellent job of keeping the suspense up with all the details in the technical modeling. Most of the predictions regarding peak oil that we published in 2018 are panning out.

As a parting thought, the RealClimate hindsight post touched on how AI will impact information flow going forward. Having worked on AI knowledgebases for environmental modeling during the LLM-precursor stage circa 2010-2013, I can attest that it will only get better. At the time, we were under the impression that knowledge used for modeling should be semantically correct and unambiguous (with potentially a formal representation and organization, see figure below), and so developed approaches for that here and here (long report form).


As it turned out, lack of correctness is just a stage, and AI users/customers are satisfied to get close-enough for many tasks. Eventually, the LLM robots will gradually clean up the sources of knowledge and converge more to semantic correctness. Same will happen with climate models as machine learning by the big guns at Google, NVIDIA, and Huawei will eventually discover what we have found in this blog over the course of 20+ years.

Note:
[*] In some ways the PeakOilBarrel.com blog is a continuation of the shuttered TheOilDrum.com blog, which closed shop in 2013 for mysterious reasons.

Lunar Torque Controls All

Mathematical Geoenergy

The truly massive scale in the motion of fluids and solids on Earth arises from orbital interactions with our spinning planet. The most obvious of these, such as the daily and seasonal cycles, are taken for granted. Others, such as ocean tides, have more complicated mechanisms than the ordinary person realizes (e.g. ask someone to explain why there are 2 tidal cycles per day). There are also less well-known motions, such as the variation in the Earth’s rotation rate of nominally 360° per day, which is called the delta in Length of Day (LOD), and in the slight annual wobble in the Earth’s rotation axis. Nevertheless, each one of these is technically well-characterized and models of the motion include a quantitative mapping to the orbital cycles of the Sun, Moon, and Earth. This is represented in the directed graph below, where the BLUE ovals indicate behaviors that are fundamentally understood and modeled via tables of orbital factors.

The cyan background represents behaviors that have a longitudinal dependence
(rendered by GraphViz
)

However, those ovals highlighted in GRAY are nowhere near being well-understood in spite of being at least empirically well-characterized via years of measurements. Further, what is (IMO) astonishing is the lack of research interest in modeling these massive behaviors as a result of the same orbital mechanisms as that which causes tides, seasons, and the variations in LOD. In fact, everything tagged in the chart is essentially a behavior relating to an inertial response to something. That something, as reported in the Earth sciences literature, is only vaguely described — and never as a tidal or tidal/annual interaction.

I don’t see how it’s possible to overlook such an obvious causal connection. Why would the forcing that causes a massive behavior such as tides suddenly stop having a connection to other related inertial behaviors? The answers I find in the research literature are essentially that “someone looked in the past and found no correlation” [1].

Continue reading

Common forcing for ocean indices

In Mathematical Geoenergy, Chapter 12, a biennially-impulsed lunar forcing is suggested as a mechanism to drive ENSO. The current thinking is that this lunar forcing should be common across all the oceanic indices, including AMO for the Atlantic, IOD for the Indian, and PDO for the non-equatorial north Pacific. The global temperature extreme of the last year had too many simultaneous concurrences among the indices for this not to be taken seriously.

NINO34

PDO

AMO

IOD – East

IOD-West

Each one of these uses a nearly identical annual-impulsed tidal forcing (shown as the middle green panel in each), with a 5-year window providing a cross-validation interval. So many possibilities are available with cross-validation since the tidal factors are essentially invariantly fixed over all the climate indices.

The approach follows 3 steps as shown below

The first step is to generate the long-period tidal forcing. I go into an explanation of the tidal factors selected in a Real Climate comment here.

Then apply the lagged response of an annual impulse, in this case alternating in sign every other year, which generates the middle panel in the flow chart schematic (and the middle panel in the indexed models above).

Finally, the Laplace’s Tidal Equation (LTE) modulation is applied, with the lower right corner inset showing the variation among indices. This is where the variability occurs — the best approach is to pick a slow fundamental modulation and generate only integer harmonics of this fundamental. So, what happens is that different harmonics are emphasized depending on the oceanic index chosen, corresponding to the waveguide structure of the ocean basin and what standing waves are maximally resonant or amplified.

Note that for a dipole behavior such as ENSO, the LTE modulation will be mirror-inverses for the maximally extreme locations, in this case Darwin and Tahiti

A machine learning application is free to scrape the following GIST GitHub site for model fitting artifacts.

https://gist.github.com/pukpr/3a3566b601a54da2724df9c29159ce16

Another analysis that involved a recursively cycled fit between AMO and PDO. It switched fitting AMO for 2.5 minutes and then PDO for 2.5 minutes, cycling 50 times. This created a common forcing with an optimally shared fit, forcing baselined to PDO.

PDO

AMO

NINO34

IOD-East

IOD-West

Darwin

Tahiti

The table above shows the LTE modulation factors for Darwin and Tahiti model fits. The highlighted blocks show the phase of the modulation, which should have a difference of π radians for a perfect dipole and higher harmonics associated with it. (The K0 wavenumber = 0 has no phase, but just a sign). Of the modes that are shared 1, 45, 23, 36, 18, 39, 44, the average phase is 3.09, close to π (and K0 switches sign).

1.23-(-1.72) = 2.95 
1.47-(-2.05) = 3.52
-2.89-(0.166) = -3.056 
-0.367-(-2.58) = 2.213 
1.59-(-2.175) = 3.765 
0.27 - (-2.84) = 3.11 
-1.87 -1.14 = -3.01 

Average (2.95+3.52+3.056+2.213+3.765+3.11+3.01)/7 = 3.0891

Contrast to the IOD East/West dipole. Only the K0 (wavenumber=0) shows a reversal in sign. The LTE modulation terms are within 1 radian of each other, indicating much less of a dipole behavior on those terms. It’s possible that these sites don’t span a true dipole, either by its nature or from siting of the measurements.

Cross-validating a large interval span on PDO

using CC

using DTW metric, which pulls out more of the annual/semi-annual signal

adding a 3rd harmonic

Complement of the fitting interval, note the spectral composition maintains the same harmonics, indicating that the structure mapped to is stationary in the sense that the tidal pattern is not changing and the LTE modulation is largely fixed.

This is the resolved tidal forcing, finer than the annual impulse sampling used on the models above.

Below can see the primary 27.5545 lunar anomalistic cycle, mixed with the draconic 27.2122/13.606 cycle to create the 6/3 year modulation and the 206 day perigee-syzygy cycle (or 412 full cycle, as 206 includes antipodal full moon or new moon orientation).

(click on any image to magnify)

Are the QBO disruptions anomalous?

Based on the previous post on applying Dynamic Time Warping as a metric for LTE modeling of oceanic indices, it makes sense to apply the metric to the QBO model of atmospheric winds. A characteristic of QBO data is the sharp transitions of wind reversals. As described previously, DTW allows a fit to adjust the alignment between model and data without incurring a potential over-fitting penalty that a conventional correlation coefficient will often lead to.

Continue reading