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

Thread on tidal modeling

Someone on Twitter suggested that tidal models are not understood “The tides connection to the moon should be revised.”. Unrolled thread after the “Read more” break

Continue reading

Tidal Gauge Differential

A climate science breakthrough likely wonโ€™t be on some massive computation but on a novel formulation that exposes some fundamental pattern (perhaps discovered by deep mining during a machine learning exercise). Over 10 years ago, I wrote on a blog post on how one can extract the ENSO signal by doing simple signal processing on a sea-level height (SLH) tidal time-series โ€” in this case, at Fort Denison located in Sydney harbor.

The formulation/trick is to take the difference between the SLH reading and that from 2 years (24 months) prior, described here

Check the recent blog post Lunar Torque Controls All for context of how it fits in to the unified model.

The rationale for this 24 month difference is likely related to the sloshing of the ocean triggered on an annual basis. I think this is a pattern that any ML exercise would find with very little effort. After all, it didnโ€™t take me that long to find it. But the point is that the ML configuration has to be open and flexible enough to be able to search, generate, and test for the same formulation. IOW, it may not find it if the configuration, perhaps focused on computationally massive PDEs, is too narrow. That was my comment to a RC post on applying machine learning to climate science, see the following link and subsequent quote:

Nick McGreivy commented on:

โ€œML-based parameterizations have to work well for thousands of years of simulations, and thus need to be very stable (no random glitches or periodic blow-ups) (harder than you might think). Bias corrections based on historical observations might not generalize correctly in the future.โ€

This same issue arises when using ML to simulate PDEs. The solution is to analytically calculate what the stability condition(s) is (are), then at each timestep to add some numerical diffusion that nudges the solution towards satisfying the stability condition(s). I imagine this same technique could be used for ML-based parametrizations.

Sea-Level Height as a proxy for ENSO

Sea-level height has several scales. At the daily scale it represents the well-known lunisolar tidal cycle. At a multi-decadal, long-term scale it represents behaviors such as global warming. In between these two scales is what often appears to be noisy fluctuations to the untrained eye. Yet it’s fairly well-accepted [1] that much of this fluctuation is due to the side-effects of alternating La Nina and El Nino cycles (aka ENSO, the El Nino Southern Oscillation), as represented by measures such as NINO34 and SOI.

To see how startingly aligned this mapping is, consider the SLH readings from Ft. Denison in Sydney Harbor. The interval from 1980 to 2012 is shown below, along with a fit used recently to model ENSO.

(click to expand chart)

I chose a shorter interval to somewhat isolate the trend from a secular sea-level rise due to AGW. The last point is 2012 because tide gauge data collection ended then.

As cross-validation, this fit is extrapolated backwards to show how it matches the historic SOI cycles

Much of the fine structure aligns well, indicating that intrinsically the dynamics behind sea-level-height at this scale are due to ENSO changes, associated with the inverted barometer effect. The SOI is essentially the pressure differential between Darwin and Tahiti, so the prevailing atmospheric pressure occurring during varying ENSO conditions follows the rising or lowering Sydney Harbor sea-level in a synchronized fashion. The change is 1 cm for a 1 mBar change in pressure, so that with the SOI extremes showing 14 mBar variation at the Darwin location, this accounts for a 14 cm change in sea-level, roughly matching that shown in the first chart. Note that being a differential measurement, SOI does not suffer from long-term secular changes in trend.

Yet, the unsaid implication in all this is that not only are the daily variations in SLH due to lunar and solar cyclic tidal forces, but so are these monthly to decadal variations. The longstanding impediment is that oceanographers have not been able to solve Laplace’s Tidal Equations that reflected the non-linear character of the ocean’s response to the long-period lunisolar forcing. Once that’s been analytically demonstrated, we can observe that both SLH and ENSO share essentially identical lunisolar forcing (see chart below), arising from that same common-mode linked mechanism.

Many geographically located tidal gauge readings are available from the Permanent Service for Mean Sea Level (PSMSL) repository so I can imagine much can be done to improve the characterization of ENSO via SLH readings.

REFERENCES

[1] F. Zou, R. Tenzer, H. S. Fok, G. Meng and Q. Zhao, “The Sea-Level Changes in Hong Kong From Tide-Gauge Records and Remote Sensing Observations Over the Last Seven Decades,” in IEEE Journal of Selected Topics in Applied Earth Observations and Remote Sensing, vol. 14, pp. 6777-6791, 2021, doi: 10.1109/JSTARS.2021.3087263.