# hp41programs

Tides for the HP-41

# Tides for the HP-41

Overview

1°)    "WL"             calculates the water level using the harmonic method.
2°) "TIDE1"          gives the high tides or low tides using 5 tabular values.
3°) "TIDE2"          yields these results more directly.

1°)  Water Level

-The water level may be computed by a trigonometric series:       wl(t) = A0 + A1 cos ( V1 - G1 ) + ............ + Ai cos ( Vi - Gi ) + ..........

where     A0 = the mean sea level ;  Ai and Gi = the harmonic constituents of a port = constants.
and       Vi  are linear combinations of astronomical arguments.

-The following program uses a few terms ( Sa ; Q1 ; O1 ; K1 ; N2 ; M2 ; S2 ; MN4 ; M4 ; MS4 )
-Under simplifying assumptions , 11 other terms are calculated ( namely: P1 ; o1 ; k1 ; 2N2 ; µ2 ; nu2 ; L2 ; K2 ; T2 ; m2 ; k2 )
-The results are good but not very accurate: errors can reach about 20cm.
-More than 100 sinusoidal functions would be needed to achieve full accuracy

-You can find other harmonic constituents at   http://co-ops.nos.noaa.gov/data_retrieve.shtml?input_code=100201001har
-For accurate tide predictions , cf also  www.shom.fr

Data Registers:             R00 = d = the number of days since 01/01/2000      ( Registers R07 thru R27 are to be initialized before executing "WL" )

R01 thru R06:  temp

•   R07 thru R27 = the harmonic constituents of the port.

Flags: /
Subroutine:  none if you have a Time-Module
"J0" otherwise  ( cf "Julian & Gregorian Calendars for the HP-41" )

-The harmonic constituents of a few ports are listed below:  Ai  are given in millimeters and  Gi  in degrees.

 Port  Latitude Longitude A0=R07 A1=R08 A2=R09 A3=R10 A4=R11 A5=R12 A6=R13 A7=R14 A8=R15 A9=R16 A10=R17 Time Scale / G1=R18 G2=R19 G3=R20 G4=R21 G5=R22 G6=R23 G7=R24 G8=R25 G9=R26 G10=R27

 Bombay    18°55'N    72°50'E 2520 43 41 201 425 287 1227 479 7 35 32 Time Scale = UT+5h30mn / 33 58 52 56 327 345 25 296 332 43
-
 Boston  42°21'N    71°02'W 1490 32 20 111 140 301 1345 219 0 20 9 Time Scale = UT-5h / 131 110 119 132 300 326 356 0 98 118
-
 Brest    48°23'N    04°30'W 4020 47 20 67 65 415 2040 746 19 54 34 Time Scale = UT+1h / 243 294 342 89 119 138 178 117 164 239
-
 Colombo    6°57'N    79°51'E 380 95 10 29 73 22 176 119 7 5 3 Time Scale = UT+5h30mn / 308 82 59 36 31 50 100 269 169 258
-
 Dakar   14°40'N     17°25'W 1010 87 12 38 63 91 461 166 0 10 6 Time Scale = UT / 153 194 251 350 235 257 293 0 282 0
-
 Dar Es-Salaam   6°49'S  39°19'E 1530 35 22 106 171 191 1074 536 4 11 7 Time Scale = UT+3h / 311 30 43 42 86 111 156 250 316 31
-
 Djibouti  11°35'N     43°09'E 1870 107 38 192 386 126 463 205 0 0 0 Time Scale = UT+3h / 6 41 39 39 222 229 250 0 0 0
-
 Hong-Kong  22°17'N   114°11'E 1380 100 54 289 359 85 404 162 8 25 17 Time Scale = UT+8h / 215 225 249 299 250 268 299 268 333 19
-
 Libreville     0°23'N      9°26'E 1290 90 6 17 95 120 595 193 9 28 17 Time Scale = UT+1h / 282 126 328 8 140 146 176 34 82 148
-
 Lisbon   38°42'N     09°08'W 2200 20 15 61 68 238 1150 401 0 77 48 Time Scale = UT+1h / 33 277 334 73 89 106 136 0 303 342
-
 Los Angeles  33°43'N   118°16'W 850 65 39 216 339 119 515 203 0 0 0 Time Scale = UT-8h / 186 77 81 88 257 275 261 0 0 0
-
 Madras    13°06'N    80°18'E 650 102 1 28 90 72 332 137 1 2 2 Time Scale = UT+5h30mn / 221 86 313 341 235 243 279 77 102 179
-
 Melbourne  37°52'S   144°55'E 560 0 10 70 90 40 240 60 0 10 0 Time Scale = UT+10h / 0 88 96 135 14 64 198 0 95 0
-
 Miami    25°46'N    80°08'W 380 88 6 33 41 84 365 73 0 0 0 Time Scale = UT-5h / 199 214 199 170 219 236 255 0 0 0
-
 Montevideo  34°55'S    56°13'W 640 53 31 78 23 55 136 38 19 39 13 Time Scale = UT-3h / 314 104 139 315 352 30 106 147 181 268
-
 Nassau  25°05'N     77°21'W 850 95 12 65 87 92 379 64 0 5 0 Time Scale = UT-5h / 144 128 132 122 204 223 242 0 85 0
-
 New-York  40°42'N    74°01'W 700 83 13 52 98 143 641 133 0 14 16 Time Scale = UT-5h / 134 123 111 107 222 237 258 0 335 308
-
 Oslo     59°55'N     10°44'E 150 137 8 21 3 32 112 36 0 19 12 Time Scale = UT+1h / 185 223 287 222 99 136 97 0 21 117
-
 Plymouth (GB) 50°22'N  4°11'W 3350 121 16 59 74 316 1691 603 51 144 95 Time Scale = UT / 219 312 341 109 137 154 207 107 135 188
-
 Port-au-Prince 18°33'N  72°21'W 180 74 0 41 70 33 145 42 0 0 0 Time Scale = UT-5h / 164 0 145 154 242 249 260 0 0 0
-
 Rio de Janeiro  22°53'S  43°10'W 690 27 26 92 62 26 318 179 20 48 31 Time Scale = UT-3h / 21 110 104 144 174 93 88 224 96 186
-
 Rotterdam  51°55'N     4°30'E 940 90 40 80 60 90 660 140 0 110 70 Time Scale = UT+1h / 315 170 221 32 137 153 213 0 245 301
-
 San Francisco 37°48'N  122°27'W 910 30 40 230 369 116 543 123 0 23 9 Time Scale = UT-8h / 199 97 99 108 320 343 339 0 50 47
-
 Singapore    1°16'N   103°51'E 1600 131 61 283 294 143 796 326 6 15 19 Time Scale = UT+8h / 281 25 64 117 306 326 21 333 298 348
-
 Seattle      47°36'N  122°20'W 2010 74 75 458 831 212 1060 258 0 21 10 Time Scale = UT-8h / 289 143 144 157 113 140 158 0 92 120
-
 Sydney (Aus)  33°51'S   151°14'E 910 33 25 96 147 111 518 131 1 4 3 Time Scale = UT+10h / 61 54 82 121 222 239 264 132 149 149
-
 Ushuaia    54°49'S    68°13'W 1100 45 34 155 199 148 560 64 6 16 8 Time Scale = UT-3h / 66 349 13 59 114 154 163 299 346 67
-
 Valparaiso  33°02'S    71°38'W 910 36 20 102 159 96 441 146 0 0 0 Time Scale = UT-4h / 4 268 301 341 275 305 323 0 0 0
-
 Vancouver  49°17'N   123°07'W 3060 0 89 470 860 179 940 230 0 0 0 Time Scale = UT-8h / 0 134 154 169 144 164 186 0 0 0
-
 Vera Cruz  19°11'N    96°07'W 310 53 37 153 155 23 88 27 0 0 0 Time Scale = UT-6h / 184 281 289 289 57 69 71 0 0 0
-
 Washington  38°52'N    77°01'W 460 89 0 32 48 81 423 62 0 34 0 Time Scale = UT-5h / 120 0 307 278 218 237 273 0 27 0

-If you don't have a Time Module, replace lines 06-07-08 by:     XEQ "J0"    +

 01  LBL "WL"   02  HR   03  24   04  /   05  X<>Y   06  1.012       07  DDAYS   08  -   09  LBL "T"   10  STO 00   11  DEG   12  .985647   13  *   14  STO 01   15  10   16  +   17  RCL 18   18  -   19  SIN   20  RCL 08   21  *   22  RCL 07   23  +   24  RCL 00   25  360   26  *   27  STO 02   28  RCL 01   29  +   30  STO 04   31  10   32  +   33  RCL 21   34  -   35  COS   36  RCL 11   37  *   38  +   39  RCL 04   40  .052954   41  RCL 00   42  *   43  STO 06   44  +   45  65   46  +   47  RCL 21 48  -   49  COS   50  RCL 11   51  *   52  7.4   53  /   54  -   55  RCL 02   56  ST+ 02   57  RCL 01   58  -   59  10   60  -   61  RCL 21   62  -   63  COS   64  RCL 11   65  *   66  3   67  /   68  +   69  RCL 04   70  ST+ 04   71  26.352793   72  RCL 00   73  *   74  STO 03   75  -   76  STO 05   77  53   78  -   79  RCL 20   80  -   81  COS   82  RCL 10   83  *   84  -   85  RCL 05   86  RCL 06   87  -   88  72   89  +   90  RCL 20   91  -   92  COS   93  RCL 10   94  * 95  5.3   96  /   97  -   98  RCL 05   99  13.064993 100  RCL 00 101  * 102  STO 05 103  - 104  2 105  - 106  RCL 19 107  - 108  COS 109  RCL 09 110  * 111  + 112  RCL 02 113  RCL 24 114  - 115  COS 116  RCL 14      117  * 118  + 119  RCL 04 120  20 121  + 122  RCL 24 123  - 124  COS 125  RCL 14 126  * 127  3.7 128  / 129  - 130  RCL 04 131  RCL 06 132  + 133  75 134  + 135  RCL 24 136  - 137  COS 138  RCL 14 139  * 140  12 141  / 142  + 143  RCL 04 144  RCL 03 145  - 146  STO 04 147  43.5 148  - 149  RCL 23 150  - 151  COS 152  RCL 13 153  * 154  - 155  RCL 04 156  RCL 06 157  - 158  8 159  - 160  RCL 23 161  - 162  SIN 163  RCL 13      164  * 165  27 166  / 167  - 168  RCL 04 169  RCL 05 170  + 171  5 172  - 173  RCL 23 174  - 175  SIN 176  RCL 13 177  * 178  35 179  / 180  - 181  RCL 02 182  RCL 01 183  - 184  3 185  + 186  RCL 24 187  - 188  COS 189  RCL 14 190  * 191  17 192  / 193  + 194  RCL 04 195  RCL 05 196  - 197  8 198  + 199  RCL 22 200  - 201  COS 202  RCL 12 203  * 204  + 205  RCL 04 206  RCL 05 207  ST+ X 208  - 209  60 210  + 211  RCL 22      212  - 213  COS 214  RCL 12 215  * 216  7.6 217  / 218  - 219  RCL 02 220  RCL 04 221  + 222  44 223  - 224  RCL 27 225  - 226  COS 227  RCL 17 228  * 229  - 230  RCL 04 231  ST+ X 232  STO 01 233  3 234  + 235  RCL 26 236  - 237  SIN 238  RCL 16 239  * 240  + 241  RCL 01 242  RCL 02 243  - 244  STO 06 245  3 246  + 247  RCL 22 248  - 249  SIN 250  RCL 12 251  * 252  6.3 253  / 254  + 255  RCL 05 256  RCL 06      257  + 258  41 259  + 260  RCL 22 261  - 262  COS 263  RCL 12 264  * 265  5.3 266  / 267  + 268  RCL 01 269  RCL 05 270  - 271  35 272  - 273  RCL 25 274  - 275  COS 276  RCL 15 277  * 278  - 279   E3 280  / 281  END

( 387 bytes / SIZE 028 )

 STACK INPUTS OUTPUTS Y Date / X hh.mnss water level (m)

Example:     Calculate the water level in Seattle on   11/11/2003  at 14h45mn  ( local time = UT-8h )

-First, we initialize registers R07 to R27   ( 2010 STO 07   74 STO 08   75 STO 09 ...................  92  STO 26  120  STO 27 )

-Then,

11.112003 ENTER^
14.45         XEQ "WL"   yields   2.75m    ( in 24 seconds )

( Key in  2003.1111 instead of  11.112003  if you are using "J0" )

-Similar computations produce the following results:

 time 0h 1h 2h 3h 4h 5h 6h 7h 8h 9h 10h 11h 12h 13h 14h 15h 16h 17h 18h 19h 20h 21h 22h 23h 24h wl -0.35 -0.06 0.56 1.35 2.15 2.82 3.28 3.48 3.43 3.18 2.82 2.49 2.31 2.34 2.54 2.82 3.03 3.08 2.91 2.52 1.93 1.23 0.52 -0.05 -0.34

Water Level - SEATTLE - 11/11/2003
|
|                      -   -
|               -               -                                           -
|          -                          -                        -                      -
|       -                                      -     -                                    -
|     -                                                                                       -
|   -                                                                                            -
|  -                                                                                               -
----|----------------------------------|----------------------------------|------ ( local time = UT-8h )
0h                                              12h                                               24h

2°) Tides  ( with 5 tabular values )

-   "TIDE1"  uses 5 tabular water levels  wl(t1)  wl(t2)  wl(t3)  wl(t4)  wl(t5)  where    t5 - t4  =  t4 - t3  =  t3 - t2  =  t2 - t1  =  h   ( equally spaced abcissas )
-The extremum of a polynomial of degree 4 is found by an iterative method.

Data Registers:             R00 and  R28 thru R32:  temp  ,   R07 thru R27 are undisturbed.

•   R01 =  wl(t1)
•   R02 =  wl(t2)
•   R03 =  wl(t3)                      ( These 5 registers are to be initialized before executing "TIDE1" )
•   R04 =  wl(t4)
•   R05 =  wl(t5)

Flags: /
Subroutines:  /

 01  LBL "TIDE1" 02  STO 28 03  X<>Y 04  STO 00 05  CLX 06  STO 06 07  RCL 05 08  RCL 01 09  - 10  RCL 02 11  RCL 04 12  - 13  ST+ X 14  + 15  STO 29 16  CHS 17  LASTX 18  3 19  * 20  - 21  STO 30 22  RCL 01         23  RCL 05 24  + 25  RCL 02 26  RCL 04 27  + 28  16 29  * 30  - 31  RCL 03 32  30 33  * 34  + 35  STO 31 36  RCL 03 37  24 38  * 39  - 40  RCL 02 41  RCL 04         42  + 43  12 44  * 45  + 46  STO 32 47  LBL 01 48  RCL 32 49  ST+ X 50  RCL 06 51  * 52  RCL 29 53  3 54  * 55  + 56  RCL 06 57  X^2 58  * 59  RCL 30 60  + 61  RCL 31 62  / 63  ENTER^ 64  X<> 06 65  - 66  ABS 67   E-4 68  X

( 135 bytes / SIZE 033 )

 STACK INPUTS OUTPUTS Y h water level X t1 ( hh.mnss ) hh.mnss

Example:    With

wl(5) = 2.82  STO 01
wl(6) = 3.28  STO 02
wl(7) = 3.48  STO 03
wl(8) = 3.43  STO 04
wl(9) = 3.18  STO 05

1  ENTER^
5  XEQ "TIDE1"  yields    7.1654   ( in 6 seconds )
X<>Y   3.4898

-Thus, there is a high tide at 7h17mn and the corresponding water level = 3.49m  ( error = 15 minutes )

3°) Tides ( without tabular values )

-The following program calculates 3 water levels.
-Then, it finds the extremum of the parabola thus defined and its abscissa replaces one of the 3 first abscissas.
-The process is repeated until the difference between 2 abscissas is smaller than E-4 day ( line 65 )

Data Registers:             R28 thru R33:  temp  (  R07 thru R27 are undisturbed  )

Flags: /
Subroutine:  "T" ( line 9 of the program "WL")
(  and "J0" & "DT" if you don't have a Time Module - cf "Julian & Gregorian Calendars for the HP-41" )

-If you don't have a Time Module:

replace lines 77-78-79-80 by  XEQ "DT"  RCL 01  X<> Z
add  STO 01 after line 69
and replace lines 06-07-08 by:     XEQ "J0"    +

 01  LBL "TIDE2" 02  HR 03  24 04  / 05  X<>Y 06  1.012 07  DDAYS   08  - 09  STO 29 10  XEQ "T" 11  STO 31 12  RCL 00 13  .01 14  - 15  STO 28 16  XEQ "T" 17  STO 30 18  .02 19  ST+ 00 20  LBL 01 21  RCL 00        22  VIEW X 23  XEQ "T" 24  STO 32 25  RCL 31 26  - 27  RCL 00 28  RCL 29 29  - 30  / 31  RCL 31 32  RCL 30 33  - 34  RCL 29 35  RCL 28 36  - 37  / 38  - 39  RCL 28 40  RCL 00        41  - 42  / 43  STO 33 44  RCL 29 45  RCL 00 46  - 47  * 48  + 49  RCL 33 50  ST+ X 51  X#0? 52  / 53  RCL 00 54  + 55  X<> 00 56  X<> 29 57  STO 28 58  RCL 32 59  X<> 31 60  STO 30 61  RCL 00        62  RCL 29 63  - 64  ABS 65   E-4 66  XY? 74  DSE X 75  LBL 02 76  ST- Y 77  1.012 78  X<>Y 79  DATE+ 80  X<>Y 81  24 82  * 83  HMS 84  RCL 33         85  X#0? 86  SIGN 87  RDN 88  CLD 89  END

( 154 bytes / SIZE 034 )

 STACK INPUTS OUTPUTS T / +1  or  -1 * Z / water level Y Date Date X approximate time hh.mnss

*  +1  for a  "High Tide"  ,   -1  for a  "Low Tide"

Example:    Once again , in Seattle , on 11/11/2003  near 7 AM

11.112003    ENTER^
7                 XEQ "TIDE2"  >>>>  7.1718             ( the successive d-approximations are displayed )    ---Execution time = 2m26s---
RDN                    11.112003
RDN                      3.4915
RDN                         1

-Thus, there is a high tide at 7h17mn and the corresponding water level = 3.49m  ( exact time = 7h02mn according to the "Shom" )

( Key in  2003.1111 instead of  11.112003  if you are using "J0" & "DT" )