Harmonic Constituents for the free42
Overview
-"HCST" employs the gradient method to find the harmonic constituents
in a port, given 2000 water-levels.
-More than 2000 data may be used if you change the corresponding lines
in the listing.
Program Listing
-The water-levels may be calculated by:
WL(t) ~ SUM Aj [ cos ( fj
.t + Vj ) + aj cos ( fj .t + Vj
- 2 N' ) + bj cos ( fj .t + Vj -
N' ) + cj cos ( fj .t + Vj + N' ) +
dj cos ( fj .t + Vj + 2 N' ) ]
where a , b , c , d are constants to take the nodal corrections into account f = angular speed of the wave , V = phase
and N' = 234.98° + 0.05295376°
t where t = numbers of days since 2000/01/01 0h
UT
-You store in R100 thru R436 the approximate values of amplitudes A and phases V, and the gradient method improves these coefficients.
-I've used 2000 water-levels and 168 waves to get the harmonic constituents.
Data Registers: R00 = gradient-method parameter < 0 ( All the • Registers are to be initialized before executing "HCST" )
R01 = Sum errors^2 R02 = Sum errors R03 to R16: temp R17 thru R99: unused
-----------------------------------------------------------------------------------------------------------------------------------------------------
• R100 = Z0 • R101 = V1
• R103 = V2 .......................... •
R435 = V168
These registers are initialized by approximate values
• R102 = A1 • R104 = A2
.......................... • R436 = A168
and finally contain the improved constituents
------------------------------------------------------------------------------------------------------------------------------------------------------
• R501 = f1 • R506 = f2
.......................... • R1336 = f168
the 168 angular speeds of the 168 waves
• R502 = a1 • R507 = a2
.......................... • R1337 = a168
the 168 coefficients corresponding to -2.N'
• R503 = b1 • R508 = b2
.......................... • R1338 = b168
the 168 coefficients corresponding to -N'
• R504 = c1 • R509 = c2
.......................... • R1339 = c168
the 168 coefficients corresponding to +N'
• R505 = d1 • R510 = d2
.......................... • R1340 = d168
the 168 coefficients corresponding to +2.N'
------------------------------------------------------------------------------------------------------------------------------------------------------
• R1501 = t1 • R1502 = t2
.......................... • R3500 = t2000
the 2000 instants, expressed in days since 2000/01/01 0h UT
• R4001 = wl1 • R4002 = wl2 .......................
• R6000 = wl2000 the 2000 water-levels corresponding
to the instants above
R6501 = e1 R6502 = e2 ............................. R8500 = e2000 the 2000 errors
Flags: /
Subroutines: /
01 LBL "HCST"
02 -.0001 03 STO 00 04 234.98 05 STO 13 06 .05295376 07 STO 14 08 E99 09 STO 16 10 100.436 11 STO 11 12 LBL 01 13 8500 14 STO 03 15 6000 16 STO 04 17 3500 18 STO 05 19 CLX 20 STO 01 21 STO 02 22 LBL 02 23 RCL 11 24 STO 06 |
25 501
26 STO 07 27 RCL IND 06 28 STO 08 29 ISG 06 30 LBL 03 31 RCL IND 05 32 RCL IND 07 33 * 34 RCL IND 06 35 + 36 STO 09 37 COS 38 LASTX 39 RCL 14 40 RCL IND 05 41 * 42 RCL 13 43 + 44 STO 10 45 ST+ X 46 - 47 COS 48 ISG 07 |
49 CLX
50 RCL IND 07 51 * 52 + 53 RCL 09 54 RCL 10 55 - 56 COS 57 ISG 07 58 CLX 59 RCL IND 07 60 * 61 + 62 RCL 09 63 RCL 10 64 + 65 COS 66 ISG 07 67 CLX 68 RCL IND 07 69 * 70 + 71 RCL 09 72 RCL 10 |
73 ST+ X
74 + 75 COS 76 ISG 07 77 CLX 78 RCL IND 07 79 * 80 + 81 ISG 06 82 RCL IND 06 83 * 84 ST+ 08 85 ISG 07 86 CLX 87 ISG 06 88 GTO 03 89 RCL 08 90 RCL IND 04 91 - 92 STO IND 03 93 ST+ 02 94 X^2 95 ST+ 01 96 DSE 03 |
97 DSE 04
98 DSE 05 99 4000 100 RCL 04 101 X>Y? 102 GTO 02 103 RCL 00 104 RCL 02 105 * 106 ST+ IND 11 107 RCL 11 108 STO 06 109 501 110 STO 07 111 ISG 06 112 LBL 04 113 CLX 114 STO 12 115 STO 15 116 3500 117 STO 05 118 8500 119 STO 03 120 LBL 05 |
121 RCL IND 05
122 RCL IND 07 123 * 124 RCL IND 03 125 P-R 126 ST+ 12 127 X<>Y 128 ST+ 15 129 DSE 03 130 DSE 05 131 1500 132 RCL 05 133 X>Y? 134 GTO 05 135 RCL 00 136 ST* 12 137 ST* 15 138 RCL IND 06 139 ISG 06 140 RCL IND 06 141 P-R 142 X<>Y 143 RCL 15 144 - |
145 X<>Y
146 RCL 12 147 + 148 R-P 149 STO IND 06 150 X<>Y 151 DSE 06 152 STO X 153 STO IND 06 154 CLX 155 SIGN 156 ST+ 06 157 5 158 ST+ 07 159 ISG 06 160 GTO 04 161 RCL 01 162 ENTER 163 X<> 16 164 X<>Y 165 VIEW 01 166 X<Y? 167 GTO 01 168 END |
( 285 bytes / SIZE 8501 )
STACK | INPUTS | OUTPUTS |
X | / | SUM errors^2 |
Example: Find the harmonic
constituents in Brest ( France )
-The French "SHOM" ( Service Hydrographique et Océanographique
de la Marine ) gives the water-levels in many ports.
-Unfortunately - for an unknown reason - they refuse to publish the
constants and even the 143 waves that they employ.
-So, I've used 168 waves - listed below - to estimate the harmonic constituents from 2000 water-levels in 2018-2019:
-With d = the number of days since 01/01/2000 at 0h UT
h = (279.97°) + 0.98564736°
d
( all angles are expressed in degrees )
s = (211.73°) + 13.17639648° d
p = (83.30°) + 0.11140352°
d
p1 = (282.94°) + 0.00004708°
d
With 168 WAVES ( 7+21+39+12+23+10+22+5+16+9+4 )
Wave Speed (deg/day) a/b/c/d Expression
SA 0.98564736
0/0/0/0
h
SSA 1.97129472
0/0/0/0
2h
MSM 11.31650528 0/-0.072/-0.065/0
s-2h+p
Mm 13.06499296 0/-0.066/-0.065/0
s-p
MSf 24.38149824 0/-0.072/-0.065/0
2s-2h
Mf 26.35279296
0/0/0.415/0.039 2s
MTM 39.41778592 0/0/0.414/0.039
3s-p
-------------------------------------------------------
2Q1 308.50286848 0/0.189/0/0
360d-4s+h+2p
SIG1 310.25135616 -0.006/0.189/0/0
360d-4s+3h
Q1 321.56786144 -0.006/0.189/0/0
360d-3s+h+p
RHO1 323.31634912 -0.005/0.189/0/0
360d-3s+3h-p
O1 334.63285440 -0.006/0.189/0/0
360d-2s+h
MP1 336.60414912 0/-0.037/-0.011/0
360d-2s+3h
A19 345.94935968 -0.013/-0.229/0/0
360d-s-h+p
M1 347.92065440 0/-0.029/0.201/-0.006
360d-s+h+p
M1B 347.69784736 -0.016/0.185/0/0
360d-s+h-p
CHI1 349.66914208 0/-0.029/0.219/-0.005 360d-s+3h-p
PI1 358.02875236 0/0/0/0
360d-2s+p1
P1 359.01435264 0/0/0/0
360d-h
S1 360
0/0/0/0
360d
K1 360.98564736 0/-0.020/0.136/-1:343
360d+h
PSI1 361.97124764 0/0.004/0.019/0
360d+2h-p1
PHI1 362.95694208 0/0/-0.039/-0.019
360d+3h
THET1 372.30215264 0/-0.032/0.198/-0.004 360d+s-h+p
J1 374.05064032 0/-0.029/0.199/0
360d+s+h-p
SO1 385.36714560 0/0/0.189/0
360d+2s-h
OO1 387.33844032 0/0/0.640/0.134/0.009 360d+2s+h
UPS1 400.40343328 0/0/0.640/0.134
360d+3s+h-p
--------------------------------------------------------
2MN2S2 633.79051232 0/-0.112/0.004/0
720d-7s+6h+p
3MKS2 644.88421056 0.032/0.186/-0.011/0 720d-6s+4h
2NS2 645.10701760 0/-0.075/0/0
720d-6s+4h+2p
3M2S2 646.85550528 0/-0.112/0.004/0
720d-6s+6h
OQ2 656.20071584 -0.012/0.378/0/0
720d-5s+2h+p
??? 656.42352208
0/0/0/0
720d-5s+2h+3p
MNS2 658.17201056 0/-0.075/0/0
720d-5s+4h+p
MNUS2 659.92049824 0/-0.075/0.002/0
720d-5s+6h-p
2MS2K2 667.29441408 0.032/0.596/-0.026/0 720d-4s
2MK2 669.26570880 0.032/0.223/-0.013/0
720d-4s+2h
2N2 669.48851584
0/-0.037/0/0
720d-4s+2h+2p
MU2 671.23700352 0/-0.038/0/0
720d-4s+4h
??? 672.22260380
0/-0.037/0/0
720d-4s+5h-p1
NA2 681.56790852 0/-0.032/0/0
720d-3s+h+p+p1
N2 682.55350880
0/-0.037/0/0
720d-3s+2h+p
NU2 684.30199648 0/-0.038/0/0
720d-3s+4h-p
MKL2S2 686.27329128 0/-0.088/0.302/0.032 720d-3s+6h-p
OP2 693.64720704 0/0.178/0/0
720d-2s
GAM2 693.87001408 0/-0.035/0/0
720d-2s+2p
ALPH2 694.63290148 0/0/0/0
720d-2s+h+p1
M2 695.61850176
0/-0.037/0/0
720d-2s+2h
BET2 696.60410204 0/-0.021/0/0
720d-2s+3h-p1
DEL2 697.58979648 0/-0.037/0/0
720d-2s+4h
M2KS2 699.56109120 0/-0.063/0.600/0.064
720d-2s+6h
2SNMK2 704.96371232 0.032/0.227/-0.050/0 720d-s-2h+p
LAM2 706.93500704 0/-0.045/0/0
720d-s+p
L2 708.68349472
0/-0.037/0/0
720d-s+2h-p
L2B 708.90630172 0/-0.015/0.441/0.062
720d-s+2h+p
T2 719.01439972
0/0/0/0
720d-h+p1
S2
720 0/0.002/0/0
720d
R2 720.98560028
0/0/0/0
720d+h-p1
K2 721.97129472
0/-0.013/0.298/0.032 720d+2h
MSNU2 731.31650528 0/-0.035/-0.038/0
720d+s-2h+p
MSN2 733.06499296 0/-0.035/-0.037/0
720d+s-p
XI2 733.28780000
0/-0.021/0.436/0.047 720d+s+p
KJ2 735.03628768
0/-0.049/0.335/-0.003 720d+s+2h-p
2KMSN2 737.00758240 0/-0.063/0.561/0.064
720d+s+4h-p
2SM2 744.38149824 0/-0.004/-0.037/0
720d+2s-2h
SKM2 746.35279296 0/-0.011/0.261/0.032
720d+2s
------------------------------------------------------------
MQ3 1017.18636320 -0.006/0.152/0/0
1080d-5s+3h+p
2MK3 1030.25135616 0/0.061/-0.020/0
1080d-4s+3h
2MP3 1032.22265088 0/-0.075/0/0
1080d-4s+5h
M3 1043.42775264 0/-0.056/0/0
1080d-3s+3h
SO3 1054.63285440 -0.006/0.191/0/0
1080d-2s+h
MK3 1056.60414912 0/-0.057/0.136/0
1080d-2s+3h
A87 1069.78054560 0/-0.038/0.439/0.048
1080d-s+3h
SP3 1079.01435264 0/-0.009/0/0
1080d-h
S3 1080
0/0/0/0
1080d
SK3 1080.98564736 0/-0.018/0.136/-1:343
1080d+h
K3 1082.95694208 0/-0.060/0.408/0.010
1080d+3h
2SO3 1105.36714560 0/0.004/0.189/-0.006
1080d+2s-h
------------------------------------------------------------
2NMS4 1340.72551936 0/-0.112/0.002/0
1440d-8s+6h+2p
2MMUS4 1342.47400704 0/-0.112/0.002/0
1440d-8s+8h
2MNS4 1353.79051232 0/-0.112/0.002/0
1440d-7s+6h+p
2MNUS4 1355.53900000 0/-0.112/0.002/0
1440d-7s+8h-p
3MK4 1364.88421056 0.032/0.187/-0.013/0
1440d-6s+4h
N4 1365.10701760 0/-0.075/0/0
1440d-6s+4h+2p
3MS4 1366.85550528 0/-0.112/0.002/0
1440d-6s+6h
MN4 1378.17201056 0/-0.075/0/0
1440d-5s+4h+p
MNU4 1379.92049824 0/-0.075/0/0
1440d-5s+6h-p
2MSK4 1389.26570880 0.032/0.223/-0.013/0
1440d-4s+2h
M4 1391.23700352 0/-0.075/0/0
1440d-4s+4h
2MKS4 1393.20829824 0/-0.088/0.298/0.002
1440d-4s+6h
SN4 1402.55350880 0/-0.035/0/0
1440d-3s+2h+p
3MN4 1404.30199648 0/-0.112/-0.037/0
1440d-3s+4h-p
NK4 1404.52480352 0/-0.050/0.298/0
1440d-3s+4h+p
MT4 1414.63290148 0/-0.037/0/0
1440d-2s+h+p1
MS4 1415.61850176 0/-0.035/0/0
1440d-2s+2h
MK4 1417.58979648 0/-0.050/0.298/0
1440d-2s+4h
2SNM4 1426.93500704 0/-0.035/-0.037/0
1440d-s+p
2MSN4 1428.68349472 0/-0.075/-0.037/0
1440d-s+2h-p
2MKN4 1430.65478944 0/-0.088/0.261/0.032
1440d-s+4h-p
S4 1440
0/0/0/0
1440d
SK4 1441.97129472 0/-0.011/0.298/0.032
1440d+2h
--------------------------------------------------------------
MNO5 1712.80486496 0/0.115/0/0
1800d-7s+5h+p
2MO5 1725.86985792 0/0.115/0/0
1800d-6s+5h
3MP5 1727.84115264 0/-0.112/-0.011/0
1800d-6s+7h
M5 1739.04625440 0/-0.094/0/0
1800d-5s+5h
MNK5 1739.15765792 0/-0.095/0.134/-0.003
1800d-5s+5h+p
2MP5 1750.25135616 0/-0.086/0/0
1800d-4s+3h
2MK5 1752.22265088 0/-0.095/0.136/-0.003
1800d-4s+5h
MSK5 1776.60414912 0/-0.055/0.136/-0.003
1800d-2s+3h
3KM5 1778.57544384 0/-0.097/0.408/-0.009
1800d-2s+5h
2SK5 1800.98564736 0/-0.016/0.136/-0.003
1800d+h
--------------------------------------------------------------
3MNK6 2047.43771936 0.032/0.186/-0.013/0
2160d-9s+6h+p
3MNS6 2049.40901408 0/-0.149/0.002/0
2160d-9s+8h+p
3MNUS6 2051.15750176 0/-0.150/0.002/0
2160d-9s+10h-p
4MK6 2060.50271232 0.032/0.149/-0.013/0
2160d-8s+6h
2NM6 2060.72551936 0/-0.112/0/0
2160d-8s+6h+2p
4MS6 2062.47400704 0/-0.147/0/0
2160d-8s+8h
2MN6 2073.79051232 0/-0.112/0/0
2160d-7s+6h+p
2MNU6 2075.53900000 0/-0.113/0/0
2160d-7s+8h-p
3MSK6 2084.88421056 0.032/0.188/-0.013/0
2160d-6s+4h
M6 2086.85550528 0/-0.112/0/0
2160d-6s+6h
3MKS6 2088.82680000 0/-0.125/0.300/0.032
2160d-6s+8h
MSN6 2098.17201056 0/-0.073/0/0
2160d-5s+4h+p
4MN6 2099.92049824 0/-0.149/-0.037/0
2160d-5s+6h-p
MNK6 2100.14330528 0/-0.088/0.298/0.032
2160d-5s+6h+p
2MT6 2110.25140324 0/-0.075/0/0
2160d-4s+3h+p1
2MS6 2111.23700352 0/-0.073/0/0
2160d-4s+4h
2MK6 2113.20829824 0/-0.088/0.298/0.032
2160d-4s+6h
2SN6 2122.55350880 0/-0.033/0/0
2160d-3s+2h+p
3MSN6 2124.30199648 0/-0.110/-0.037/0
2160d-3s+4h-p
3MKN6 2126.27329120 0/-0.125/0.261/0.032
2160d-3s+6h-p
2SM6 2135.61850176 0/-0.033/0/0
2160d-2s+2h
MSK6 2137.58979648 0/-0.048/0.298/0.032
2160d-2s+4h
--------------------------------------------------------------
2MNO7 2408.42336672 -0.006/0.077/0/0
2520d-9s+7h+p
2NMK7 2421.71116672 0/-0.132/0.136/-0.003
2520d-8s+7h+2p
M7 2434.77615968 0/-0.129/0/0
2520d-7s+7h+p
2MSO7 2445.86985792 -0.006/0.116/0/0
2520d-6s+5h
MSKO7 2472.22265088 -0.006/0.141/0.298/0.032 2520d-4s+5h
--------------------------------------------------------------
2MNS8 2745.02751584 0/-0.110/0/0
2880d-11s+10h+p
2(MN)8 2756.34402112 0/-0.149/0/0
2880d-10s+8h+2p
3MN8 2769.40901408 0/-0.149/0/0
2880d-9s+8h+p
3MNU8 2771.15750176 0/-0.149/0/0
2880d-9s+10h-p
4MSK8 2780.50271232 0.032/0.151/-0.013/0
2880d-8s+6h
M8 2782.47400704 0/-0.149/0/0
2880d-8s+8h
2MSN8 2793.79051232 0/-0.109/0/0
2880d-7s+6h+p
3ML8 2795.53900000 0/-0.149/0/0
2880d-7s+8h-p
2MNK8 2795.76180704 0/-0.125/0.298/0.032
2880d-7s+8h+p
3MS8 2806.85550528 0/-0.110/0/0
2880d-6s+6h
3MK8 2808.82680000 0/-0.125/0.298/0.032
2880d-6s+8h
2SMN8 2818.17201056 0/-0.071/0/0
2880d-5s+4h+p
4MSN8 2819.92049824 0/-0.147/-0.037/0
2880d-5s+6h-p
MSNK8 2820.14330528 0/-0.086/0.298/0.032
2880d-5s+6h+p
2(MS)8 2831.23700352 0/-0.071/0/0
2880d-4s+4h
2MSK8 2833.20829824 0/-0.086/0.298/0.032
2880d-4s+6h
---------------------------------------------------------------
5MNS10 3440.64601760 0/-0.224/0.002/0
3600d-13s+12h+p
3M2N10 3451.96251288 0/-0.187/0/0
3600d-12s+10h+2p
4MN10 3465.02751584 0/-0.187/0/0
3600d-11s+10h+p
M10 3478.09250880 0/-0.187/0/0
3600d-10s+10h
3MSN10 3489.40901408 0/-0.147/0/0
3600d-9s+8h+p
4MS10 3502.47400704 0/-0.147/0/0
3600d-8s+8h
4MK10 3504.44530176 0/-0.162/0.298/0.032
3600d-8s+10h
5MSN10 3515.53900000 0/-0.186/-0.037/0
3600d-7s+8h-P
3M2S10 3526.85550528 0/-0.098/0/0
3600d-6s+6h
---------------------------------------------------------------
4MNS12 4185.02751584 0/-0.183/0/0
4320d-11s+10h+p
5MS12 4198.09250880 0/-0.183/0/0
4320d-10s+10h
4MSL12 4211.15750176 0/-0.183/0/0
4320d-9s+10h-p
4M2S12 4222.47400704 0/-0.146/0/0
4320d-8s+8h
-Store the angular speeds of the waves and the coefficients a b c d
in registers R501 to R1340
-Then, the times ( in days since 2000/01/01 0h UT ) in R1501 thru R3500
and the corresponding water-levels in R4001 thru R6000
-If you have approximate values for the phases and amplitudes, store
them in R101 thru R436
( otherwise, store an approximate value of the mean-sea-level
in R100 & zero in R101 to R436 )
-Then, XEQ "HCST" >>>> free42 will display the successive R01
= sum of errors^2
-The program will stop when R01 starts to increase ( it may last 1
or 2 hours )
-If the routine doesn't stop, stop it when R01 becomes almost constant
and enough small.
-You can also set flag F21 and "HCST" will stop at each iteration.
-It will work with free42decimal but free42binary is faster !
-With 168 waves, each iteration lasts about 5 seconds with free42binary.
-The gradient method employs the 1st derivatives. I've neglected the
nodal corrections a b c d to compute them.
-For the "gradient parameter" in R00, I've used -0.0001 but
another value is perhaps better:
-Change line 02 or store another value in R00 before running the routine
again.
>>>> The results I've obtained are used in the routine "BREST" listed
in "Brest Water-Level for the HP41"
References:
[1] Bernard Simon - " La Marée Océanique Côtière"
[2] Harmonic
Constituents with Nodal Corrections - November 2006 - Edition n°1
[3] Hartmann and Wenzel - ( 1995 ) - Tidal Potential Catalogue ( HW95
)
[4] Cartwright, Tayler and Edden - Tidal Potential Catalogue
( 1971 & 1973 ).