hp41programs

Geogravity

Earth's Gravity for the HP-41


Overview
 

 1°)  Somigliana's Formula
 2°)  Somigliana's Formula + Taylor expansion
 3°)  Ellipsoidal Gravity: Rigorous Formulae
 4°)  Via Earth's Gravitational Potential
 
 

1°)  Somigliana's Formula
 

-The gravity at the surface of an ellipsoid of revolution is given by the exact formula:

     g = gE ( 1 + k sin2 b ) ( 1 - e2 sin2 b ) -1/2

                  gE = equatorial gravity = 9.780325336 m/s2
  where       k  = ( b' gP/a/gE ) - 1 = 0.00193185265241   with   gP = polar gravity = 9.8321849378 m/s2
                  a   =  6378137 m =  equatorial radius of the Earth  ,  b' = 6.356752.314 m = polar radius

    and         e  =  eccentricity of the Earth's meridian = 0.08181919084
                  b  =  geographic ( geodetic ) latitude

-If an accuracy of  10-6 m/s2 is enough and in order to save bytes, Somigliana's formula may be re-written:

    g = 9.780325 + 0.051631 sin2 b + 0.000228 sin4 b + . . .

-A correction of  - 3.086 10 -6 h ( m/s2 ) is added where h = altitude ( in meters ).
-This is not very accurate but it is acceptable if h is small
 

Data Registers: /
Flags: /
Subroutines: /
 
 

 01  LBL "GRV"
 02  DEG
 03  X<>Y
 04  HR
 05  SIN
 06  X^2
 07  RCL X
 08  228
 09  *
 10  51631
 11  +
 12  *
 13  9780325
 14  +
 15  X<>Y
 16  3.086
 17  *
 18  -
 19   E6
 20  /
 21  END

 
( 47 bytes / SIZE 000 )
 
 

      STACK        INPUTS      OUTPUTS
           Y         b ( ° ' " )             h
           X          h ( m )        g ( m/s2 )

Example:     b = 38°55'17"2     h = 67m

  38.55172   ENTER^
       67         XEQ "GRV"  >>>>   g = 9.800533 m/s2        ---Execution time = 2s---
 

Notes:

-The longitude is not taken into account.
-Line 15 corresponds to the "free-air" correction.

-Another correction ( the so-called "Bouguer anomaly" ) may also be added.
-It takes into accout the extra-mass for an altitude h > 0. One usually takes:  rock density = 2.67  which leads to add  1.119 10 -6 h
-In this case,  replace line 15 by 1.967
-In the example above, it yields g = 9.800608 m/s2
 

2°)  Somigliana's Formula + Taylor Expansion
 

-A more accurate result is obtained if we use a Taylor series ( truncated to the terms in h2 ) to take the altitude into account:

    g(h) = g(0) [ 1 - (2 h/a ) ( 1 + f + m - 2 f sin2 b ) + 3 h2/a2 ]

 where       m =  ( omega )2 a2 b' / GM = 0.00344978650684

          omega = Earth's angular velogity = 7.292115 10 -5 rad/s
  with        a   =  6378137 m =  equatorial radius of the Earth  ,  b' = 6.356752.314 m = polar radius
             GM =  3.986004418 1014  m3/s2 = geocentric gravitational constant

-"GRV2" uses  g(h) = g(0) [ 1 - ( h/a ) ( 2.013605194 - 0.013411243 sin2 b ) + 3 h2/a2 ]
 

Data Registers:  R00 & R01: temp
Flags: /
Subroutines: /
 
 

01  LBL "GRV2"
02  DEG
03  X<>Y
04  HR
05  SIN
06  X^2
07  ENTER^
08  STO 00
09  228
10  *
11  51631
12  +
13  *
14  9780325     
15  +
16   E6
17  /
18  X<>Y
19  6378137      
20  /
21  STO 01
22  3
23  *
24  RCL 00
25  74.5643
26  /
27  2.013605    
28  -
29  +
30  RCL 01       
31  *
32  1
33  +
34  *
35  END

 
   ( 76 bytes / size 002 )
 
 

      STACK        INPUTS      OUTPUTS
           Y         b ( ° ' " )        g0 ( m/s2 )
           X          h ( m )        gh ( m/s2 )

Example1:     b = 38°55'17"2     h = 67m

  38.55172   ENTER^
       67         XEQ "GRV2"  >>>>   gh = 9.800533 m/s2                   ---Execution time = 3s---
                                           RDN    g0 = 9.800739 m/s2

Example2:     b = 38°55'17"2     h = 23456 m

  38.55172   ENTER^
    23456         R/S        >>>>   gh = 9.728752 m/s2
                                     RDN    g0 = 9.800739 m/s2

Note:

-We can also use Somigliana's original formula to get even more accurate results at low altitudes:
 
 

01  LBL "GRV2B"
02  DEG
03  6378137
04  /
05  STO 00
06  X<>Y
07  HR
08  SIN
09  X^2
10  STO 01
11  .0188941474
12  *
13  9.780325336
14  +
15  1
16  RCL 01
17  .00669438
18  *
19  -
20  SQRT
21  /
22  RCL 00         
23  3
24  *
25  .0134112427
26  RCL 01
27  *
28  +
29  2.013605194
30  -
31  RCL 00         
32  *
33  1
34  +
35  *
36  END

 
   ( 100 bytes / SIZE 002 )
 
 

      STACK        INPUTS      OUTPUTS
           Y         b ( ° ' " )        g0 ( m/s2 )
           X          h ( m )        gh ( m/s2 )

Example:     b = 38°55'17"2     h = 67m

  38.55172   ENTER^
       67         XEQ "GRV2B"  >>>>   gh = 9.800532949 m/s2                   ---Execution time = 4s---
                                              RDN    g0 = 9.800739708 m/s2
 

3°)  Ellipsoidal Gravity: Rigorous Formulae
 

-Let  b = geographic ( geodetic ) latitude and  h = altitude
-The gravity g above an ellipsoid of revolution may be computed by the rigorous formulae ( cf reference [1] ):

             g  =  ( p2+ q2 )1/2

 where   p =  { - [ GM + ( omega )2 a2 E ( q' / 2q0 ) ( sin2 F - 1/3 ) ] / ( u2 + E2 ) + ( omega )2 u cos2 F } / w
  and     q =   [ a2 ( q / q0 ) ( u2 + E2 ) -1/2 - ( u2 + E2 )1/2 ] ( omega )2 ( sin F cos F ) / w

            u  =  { [ ( x2 + y2 + z2 - E2 ) / 2 ] [ 1 + { 1 + 4 E2 z2 / ( x2 + y2 + z2 - E2 )2 }1/2 ] }1/2
  with    E =   a ( 2 f - f 2 )1/2  ,   sin F = z / u   ,   cos F = ( x2 + y2 )1/2 / ( u2 + E2 )1/2
            w =  [ ( u2 + E2 sin2 F )1/2 / ( u2 + E2 )1/2 ]1/2

            q  = (1/2) [ ( 1 + 3 u2 / E2 ) Atan ( E / u )  - 3 E / u ]                                                            ( x2 + y2 )1/2  = ( N + h ) cos b
  and    q0 = (1/2) [ ( 1 + 3 b' 2 / E2 ) Atan ( E / b' ) - 3 E / b' ]         ( b' = polar radius )                          z            = [ ( b'/a )2 N + h ] sin b
            q' =   3 ( 1 + u2 / E2 ) [ 1 - ( u / E ) Atan ( E / u ) ] - 1                                                                 N          = a ( 1 - e2 sin2 b ) -1/2
 

-If, however, we use ATAN to calculate  q , q0 and q' , the results will not be accurate because of cancellation of leading digits.
-So, the following program employs ascending series to compute:

       Atan t + 3 [ ( Atan t ) / t - 1 ] / t      =  4 t3  Sumk=0,1,2,.....  ( k + 1 ) ( - t2 )k / [ ( 2 k + 3 ) ( 2 k + 5 ) ]
    3 ( 1 + 1 / t2 ) [ 1 - ( Atan t ) / t ] - 1  =  6 t2  Sumk=0,1,2,.....  ( - t2 )k / [ ( 2 k + 3 ) ( 2 k + 5 ) ]

-Since the argument t never exceeds 0.0821 for the Earth, only a few terms must be calculated.
 

Data Registers:   R00 = a = Equatorial radius               R03 to R13: temp
                              R01 = f = Earth's flattening
                              R02 = ( omega )^2  where  omega = angular velocity of the Earth.

Flag:  F10 is cleared at the end
Subroutines: /
 
 

  01  LBL "GRV3"    
  02  DEG
  03  6378137
  04  STO 00
  05  /
  06  X<>Y
  07  HR
  08  STO 04
  09  SIN
  10  STO 07
  11  X^2
  12  298.257
  13  1/X
  14  STO 01
  15  ENTER^
  16  ST+ Y
  17  X^2
  18  -
  19  STO 05
  20  *
  21  1
  22  X<>Y
  23  -
  24  SQRT
  25  1/X
  26  STO 06
  27  +
  28  RCL 04
  29  COS
  30  *
  31  STO 03
  32  X^2
  33  1
  34  RCL 01            
  35  -
  36  STO 02
  37  X^2
  38  RCL 06
  39  *
  40  R^
  41  +
  42  RCL 07
  43  *
  44  STO 04
  45  X^2
  46  STO 09
  47  +
  48  RCL 05
  49  -
  50  2
  51  /
  52  ENTER^
  53  X^2
  54  RCL 05
  55  RCL 09
  56  *
  57  +
  58  SQRT
  59  +
  60  STO 06
  61  ST/ 09
  62  RCL 05
  63  X<>Y
  64  /
  65  SQRT
  66  STO 07            
  67  SF 10
  68  XEQ 01
  69  3
  70  *
  71  X<> 07
  72  XEQ 01
  73  STO 08
  74  RCL 05
  75  SQRT
  76  RCL 02
  77  /
  78  XEQ 01
  79  ST/ 08
  80  ST+ X
  81  ST/ 07
  82  RCL 09
  83  3
  84  1/X
  85  -
  86  RCL 05
  87  SQRT
  88  *
  89  RCL 07
  90  *
  91  7.292115 E-5
  92  X^2
  93  STO 02
  94  *
 95  3986004.418 E8
  96  RCL 00
  97  3
  98  Y^X
  99  /
100  +
101  RCL 02
102  RCL 03
103  X^2
104  *
105  RCL 06
106  SQRT
107  *
108  -
109  RCL 08
110  RCL 05
111  RCL 06
112  +
113  STO 07
114  -
115  RCL 02
116  *
117  RCL 03
118  *
119  RCL 09
120  SQRT
121  *
122  R-P
123  RCL 05
124  RCL 09
125  *
126  RCL 06            
127  +
128  RCL 07
129  *
130  SQRT
131  /
132  RCL 04
133  RCL 03
134  R-P
135  RCL 00
136  ST* T
137  *
138  R^
139  RTN
140  LBL 01
141  STO 10
142  X^2
143  STO 11
144  SIGN
145  STO 12
146  LASTX
147  7.5
148  /
149  STO 13
150  LBL 02
151  RCL 11
152  RCL 13
153  *
154  CHS
155  RCL 12            
156  1
157  +
158  STO 12
159  ST+ X
160  LASTX
161  -
162  ST* Y
163  4
164  +
165  /
166  STO 13
167  RCL 12
168  FS? 10
169  SIGN
170  *
171  +
172  X#Y?
173  GTO 02
174  FS?C 10
175  RTN
176  RCL 10
177  *
178  END

 
  ( 242 bytes / SIZE 014 )
 
 

      STACK        INPUTS      OUTPUTS
           Z             /         B ( deg )
           Y         b ( ° ' " )          R ( m )
           X          h ( m )       g ( m/s2 )

   where   R = distance from the center of the Earth
    and      B = geocentric latitude

Example1:     b = 38°55'17"2     h = 23456 m

  38.55172   ENTER^
    23456      XEQ "GRV3"  >>>>   g = 9.728750374 m/s2                               ---Execution time = 22s---
                                           RDN    R = 6393195.112 m
                                           RDN    B = 38°73415897
 

Example2:     b = 38°55'17"2     h = 12345678 m

  38.55172   ENTER^
 12345678   XEQ "GRV3"  >>>>   g = 1.078713288 m/s2                            ---Execution time = 19s---
                                            RDN   R = 18715394.62 m
                                            RDN   B = 38°85746766

Notes:

-If you don't want to calculate R & B, delete lines 136-134-133-132

-If you replace line 12 by  298.2572236 ( WGS84 ), you'll get:

   with b =  0°  &  h = 0 ,  g = 9.780325335     ( almost exactly  gE = 9.7803253359 )
   with b = 90° &  h = 0 ,  g = 9.832184940     ( almost exactly  gP = 9.8321849379 )

-When h = 0, these formulas are equivalent to Somigliana's formula.

-More recent evaluations suggest  a = 6378136.61 m  and  1/f = 298.256421
-With  b = 38°55'17"2  &  h = 23456 m , it yields  g = 9.728751603 m/s2

-One can use an M-Code routine to compute the ascending series, for instance:

    Delete lines 139 to 177
    replace line 67 by CHS  and lines  68-72-78 by @GR where @GR is listed hereunder:

 ( the arguments are always positive.  CHS is used to set CPU-flag 9 )
 

092   "R"
007   "G"
000   "@"
2A0   SETDEC              this routine does not check for alpha data
0F8   READ 3(X)
128   WRIT 4(L)
244   CLRF 9
2FE   ?C#0 MS
013   JNC +02
248   SETF 9
05E   C=0 MS          C= | C |
10E   A=C ALL
135   ?NCXQ             C=
060   184D                A*C
070   N=C ALL
04E   C=0 ALL            C
35C   PT=12                =
090    LD@PT-2          2
268    WRIT 9(Q)
0B0   C=N ALL
10E   A=C ALL
068   WRIT 1(Z)
04E   C=0 ALL            C
35C   PT=12
050    LD@PT-1          =
150    LD@PT-5
226    C=C+1 S&X     15
261    ?NCXQ            C=
060    1898                A/C
0E8    WRIT 3(X)
0B0    C=N ALL         loop begins here
10E    A=C ALL
078    READ 1(Z)
135    ?NCXQ            C=
060    184D                A*C
2BE   C=-C-1 MS     C=-C
068    WRIT 1(Z)
278    READ 9(Q)
028    WRIT 0(T)
00E   A=0 ALL            A
35C   PT=12                =
162    A=A+1@PT      1
01D   ?NCXQ            C=
060    1807                A+C
268    WRIT 9(Q)
10E   A=C ALL
01D   ?NCXQ            C=
060    1807                A+C
10E   A=C ALL
135    ?NCXQ            C=
060    184D                A*C
00E   A=0 ALL            A
1BE   A=A-1 MS         =
35C   PT=12
162    A=A+1@PT      -1
01D   ?NCXQ            C=
060    1807                A+C
10E   A=C ALL
078    READ 1(Z)
0AE   A<>C ALL
261    ?NCXQ            C=
060    1898                A/C
10E   A=C ALL
046   C=0 S&X           C
270   RAMSLCT         =
038   READDATA      T
0AE   A<>C ALL
24C   ?FSET 9
135    ?NCXQ            C=
060    184D                A*C
10E   A=C ALL
0F8   READ 3(X)
01D   ?NCXQ            C=
060    1807                A+C
10E   A=C ALL
0F8   READ 3(X)
0AE   A<>C ALL
0E8    WRIT 3(X)
3CC   ?KEY                       these 2 words written in blue may be deleted if you have a "newest" HP-41
360    ?C RTN                    simply press  ENTER^  ON  to stop an infinite loop
36E    ?A#C ALL
26F    JC -33h=-51d           If you have deleted  3CC  360 , replace this line by  27F  JC -31h=-49d
138    READ 4(L)
05E   C=0 MS
0AE   A<>C ALL
24C   ?FSET 9
135    ?NCXQ            C=
060    184D                A*C
0E8    WRIT 3(X)
3E0    RTN
 

-Now, flag F10 is unused and SIZE 010 is enough.
-The same results are returned in 13 seconds instead of 22s
-Registers  Z , T and Q are used
-The arguments must remain small ( for x = 1 execution time would be prohibitive )
-Press any key to stop the routine
 
 

4°)  Via Earth's Gravitational Potential
 
 

-The Earth's gravitational potential U may be computed by the formula ( spherical harmonics ):

    U(R,L,B) = (GM/R) { 1 + Sumn=2,3,......,N  (a/R)n  Summ=0,1,2,.....,n  ( Cn,m cos m L + Sn,m sin m L ) [ k (2n+1) (n-m)! / (n+m)! ] Pn,m (sin B) }

    with     R = distance from the center of the Earth ,  L = longitude,  B = geocentric latitude

                GM = 3.986004415 1014  m3/s2 = geocentric gravitational constant                                         k = 1  if  m = 0
     and        a   =  6378137 m =  equatorial radius of the Earth                                                                  k = 2  if  m # 0
               Pn,m = (-1)m  Pnm  with  Pnm = associated Legendre function of the first kind.

-The dimensionless coefficients Cn,m and Sn,m are given in reference [2] up to degree and order N = 360
-"GRV3" takes  N = 5 but it's easy to use more terms if needed ( unfortunately not all terms however).

-Then, Earth's gravity vector  g = ( gR , gL , gB ) = Grad [ U(R,L,B) + (1/2)(omega)2 R2 cos2 B ]

     where  omega = 7.292115 10 -5 rad/s = angular velocity of the Earth.

-Therefore, in spherical coordinates, the modulus   | g | = [ ( U/R )2 + ( 1/( R2 cos2B ) ) ( U/L )2 + ( 1/R2 ) ( U/B )2 ]1/2

-"GRV+" also uses the following recurrence relations:

    Pn,m+1 - 2 m x ( 1 - x2 ) -1/2 Pn,m  =  [ m ( m - 1 ) - n ( n + 1 ) ]  Pn,m-1             ( x = sin B )
    Pn,m+1 -  m x ( 1 - x2 ) -1/2 Pn,m  =  ( 1 - x2 )1/2 dPn,m/dx

 with the starting values:   Pn,n  = ( 2 n - 1 ) !!  ( 1 - x2 )n/2  ,  Pn,n+1 = 0       where   ( 2 n - 1 ) !! = (2n-1)(2n-3)(2n-5)........5x3x1
 

Data Registers:    R00 & R17: temp                                     ( Registers R19 thru R54 are to be initialized before executing "GRV4" )

                               R01 = gR    R04 = partial sum   R07 = R          R10 = sin B    R13 = m             R16 = n(n+1)
                               R02 = gL    R05 = partial sum   R08 = L           R11 = a/R      R14 = Pn,m+1     R18 = counter
                               R03 = gB    R06 = partial sum   R09 = cos B     R12 = n         R15 = Pn,m     •  R19 thru R54 = Cn,m and Sn,m

                                         •  R19 =  C2,0 = -0.484165339915E-03          •  R20 =  S2,0 =   0.000000000000E+00 = 0
                                         •  R21 =  C2,1 =  -0.186987635955E-09         •  R22 =  S2,1 =  0.119528012031E-08
                                         •  R23 =  C2,2 = 0.243920233891E-05            •  R24 =  S2,2 =  -0.140020057884E-05

                                         •  R25 =  C3,0 = 0.957154667712E-06            •  R26 =  S3,0 =   0.000000000000E+00 = 0
                                         •  R27 =  C3,1 = 0.202992864498E-05            •  R28 =  S3,1 =  0.248453317303E-06
                                         •  R29 =  C3,2 = 0.904685216567E-06            •  R30 =  S3,2 = -0.618942656224E-06
                                         •  R31 =  C3,3 = 0.721158450151E-06            •  R32 =  S3,3 =  0.141415394144E-05

                                         •  R33 =  C4,0 = 0.539712296562E-06            •  R34 =  S4,0 =  0.000000000000E+00 = 0
                                         •  R35 =  C4,1 = -0.536248859309E-06           •  R36 =  S4,1 = -0.473399003951E-06
                                         •  R37 =  C4,2 = 0.350533469375E-06            •  R38 =  S4,2 =  0.662728713246E-06
                                         •  R39 =  C4,3 = 0.990675816205E-06            •  R40 =  S4,3 = -0.200968156744E-06
                                         •  R41 =  C4,4 = -0.188541606328E-06           •  R42 =  S4,4 =  0.308839948776E-06

                                         •  R43 =  C5,0 = 0.686667576471E-07            •  R44 =  S5,0 =  0.000000000000E+00 = 0
                                         •  R45 =  C5,1 = -0.621297740620E-07           •  R46 =  S5,1 = -0.941990411149E-07
                                         •  R47 =  C5,2 = 0.652584722977E-06            •  R48 =  S5,2 = -0.323524051490E-06
                                         •  R49 =  C5,3 = -0.452076694386E-06           •  R50 =  S5,3 = -0.214963972058E-06
                                         •  R51 =  C5,4 = -0.295228720666E-06           •  R52 =  S5,4 =  0.498925339599E-07
                                         •  R53 =  C5,5 = 0.174947930421E-06            •  R54 =  S5,5 = -0.669381580606E-06

Flags: /
Subroutines: /

-Line 04,  6378136.3  should be better
-Lines 19 and 21 must be changed according to the number of terms you want to use in the gravitational potential
-Line 150 is a three-byte GTO 01
-Line 151 may be replaced by 3986004.418 E8
 
 

  01  LBL "GRV4"     
  02  DEG
  03  STO 07
  04  6378137
  05  X<>Y
  06  /
  07  STO 11
  08  RDN
  09  STO 08
  10  CLX
  11  STO 01
  12  STO 02
  13  STO 03
  14  SIGN
  15  P-R
  16  STO 09
  17  X<>Y
  18  STO 10
  19  5     
  20  STO 12
  21  54
  22  STO 18
  23  LBL 01
  24  CLX
  25  STO 04
  26  STO 05
  27  STO 06
  28  STO 14
  29  RCL 12
  30  ENTER^
  31  STO 13             
  32  ST* Y
  33  +
  34  STO 16
  35  LASTX
  36  ST+ X
  37  DSE X
  38  FACT
  39  RCL 12
  40  DSE X
  41  FACT
  42  2
  43  LASTX
  44  Y^X
  45  *
  46  /
  47  RCL 09
  48  RCL 12
  49  Y^X
  50  *
  51  LBL 02
  52  STO 15
  53  RCL 13
  54  X#0?
  55  SIGN
  56  RCL 12
  57  ENTER^
  58  ST+ Y
  59  RCL 13
  60  -
  61  FACT
  62  ST* Y
  63  +
  64  ST* Y
  65  +
  66  RCL 12
  67  RCL 13             
  68  +
  69  FACT
  70  /
  71  SQRT
  72  STO 17
  73  RCL 08
  74  RCL 13
  75  *
  76  STO 00
  77  RCL IND 18
  78  P-R
  79  RCL 00
  80  DSE 18
  81  RCL IND 18
  82  P-R
  83  R^
  84  +
  85  STO 00
  86  RCL 15
  87  *
  88  RCL 17
  89  *
  90  ST+ 04
  91  RDN
  92  -
  93  RCL 13
  94  *
  95  RCL 15
  96  *
  97  RCL 17             
  98  *
  99  ST+ 05
100  X<> 00
101  RCL 14
102  RCL 15
103  RCL 10
104  *
105  RCL 13
106  *
107  RCL 09
108  /
109  STO 00
110  -
111  *
112  RCL 17
113  *
114  ST+ 06
115  RCL 15
116  X<> 14
117  RCL 00
118  ST+ X
119  -
120  RCL 13
121  DSE 18
122  X=0?
123  GTO 00
124  ENTER^
125  DSE X
126  ""
127  STO 13             
128  *
129  RCL 16
130  -
131  /
132  GTO 02
133  LBL 00
134  RCL 11
135  ST* 01
136  ST* 02
137  ST* 03
138  RCL 12
139  RCL 04
140  ST* Y
141  +
142  ST+ 01
143  RCL 05
144  ST+ 02
145  RCL 06
146  ST+ 03
147  DSE 12
148  RCL 12
149  DSE X
150  GTO 01
151  3986004.415 E8
152  RCL 07
153  X^2
154  /
155  ST* 02
156  ST* 03
157  CHS
158  ST* 01
159  ST+ 01
160  RCL 09
161  ST/ 02
162  7.292115 E-5
163  X^2
164  RCL 07
165  *
166  RCL 09
167  *
168  *
169  ST+ 01
170  RCL 10
171  LASTX
172  *
173  ST- 03
174  RCL 01
175  RCL 02
176  R-P
177  RCL 03
178  R-P
179  END

 
  ( 262 bytes / SIZE 055 )
 
 

      STACK        INPUTS      OUTPUTS
           Z          B (deg)             /
           Y          L (deg)             /
           X          R  (m)        g ( m/s2)

  where  R , L , B  are the geocentric coordinates.

      R = distance from the center of the Earth
      L = longitude,
      B = geocentric latitude ( not geographic latitude )

-A program listed in "Terrestrial Geodesic Distance for the HP-41" ( paragraph 5-a )
  may be used to calculate R & B from the altitude and the geographic latitude.

Example:      R = 6369806 m    L = -77.065556°    B = 38.733471°

     38.733471   ENTER^
   -77.065556    ENTER^
      6369806     XEQ "GRV4"  >>>>   g = 9.800330872 m/s2            ---Execution time = 79s---

         gR = R01 = -9.800278350  m/s2
         gL = R02 =  0.000091744  m/s2
         gB = R03 = -0.032085272  m/s2

 •  If you want to use the spherical harmonics up to, say degree and order 10:

-Store the required coefficients in registers R19 to R144 ( in the order given in reference [2] )
-Replace line 19 by 10 and line 21 by 144

-With the same example, it yields ( in 4mn23s )     g = 9.800265047 m/s2

  •  Likewise, with the spherical harmonics up to degree and order 12

-Store the coefficients in registers R19 to R194  ( 176 coefficients )
-Replace line 19 by 12 and line 21 by 194

-The HP-41 returns   g = 9.800287689 m/s2  ( in 6mn05s )
 

Notes:

-"GRV4" doesn't work if the latitude is exactly +/-90°
-The coefficients given in the reference below decrease very slowly and even with 176 coefficients,  the 4th decimal is still doubtful.
-EGM96 provides the spherical harmonics up to degree and order N = 360.
-The number of coefficients is  N2 + 3 N - 4
-So, it seems "difficult" to store all these numbers in a HP-41.

-With a SIZE 319, you can use the spherical harmonics up to degree and order 16.
-But you can also create a DATA file of 594 numbers ( store them in reverse order, delete the DSE 18 and replace  RCL IND 18 by  GETX )
 and use the terms of order and degree 23.

-In fact, all the coefficients are needed at sea-level.
-But at high altitudes, say 1000 km, truncated series up to degree & order 12 provide a good accuracy.
 

Improvements:

-The component gL has actually a negligible effect on the modulus g
-So, the program may be simplified if we do not compute it!

-Furthermore, we can also save execution time if we multiply the coefficients C , S by the normalization factors.
-This may be done by the following routine:

  LBL "CS-CS"          LBL 01            ST+ Y               ST* Y              /                          RTN               STO 02
  STO 00                   RCL 02           RCL 02             +                    SQRT                   ISG 02            ISG 01
  2                              INT                  INT                  RCL 01          ST* IND 00         GTO 01           CLX
  STO 01                   X#0?                 -                      RCL 02           ISG 00                 RCL 02           GTO 01
   E3                          SIGN                FACT              INT                ST* IND 00          INT                 END
  /                              RCL 01             ST* Y              +                    ISG 00                   E3
  STO 02                  ENTER^            +                     FACT             X=0?                     /                      ( 70 bytes )

-It takes the control number of the block of registers that contain Cn,m and Sn,m and it multiplies them by the normalization factors.
-This control number bbb.eee  must verify  eee = bbb + N2 + 3 N - 5  and   bbb > 002  ( bb = 15 now ).

-After that, we can use the simplified version hereunder:
 

Data Registers:    R00 = a/R                                                     ( Registers R15 thru R50 are to be initialized before executing "GRV5" )

                               R01 = gR    R03 = partial sum   R05 = R          R08 = sin B    R11 = n(n+1)
                               R02 = gB    R04 = partial sum   R06 = L           R09 = n         R12 = Pn,m+1           R14 = counter
                                                                               R07 = cos B     R10 = m        R13 = Pn,m

                           •  R15 thru  •  R50 = Cn,m and Sn,m  in the same order as above

Flags: /
Subroutines: /

-Lines 18 and 20 must be changed according to the number of terms you want to use in the gravitational potential
 
 

  01  LBL "GRV5"     
  02  DEG
  03  STO 05
  04  6378137
  05  X<>Y
  06  /
  07  STO 00
  08  RDN
  09  STO 06
  10  CLX
  11  STO 01
  12  STO 02
  13  SIGN
  14  P-R
  15  STO 07
  16  X<>Y
  17  STO 08
  18  5
  19  STO 09
  20  50
  21  STO 14
  22  LBL 01
  23  CLX
  24  STO 03
  25  STO 04
  26  STO 12
  27  RCL 09
  28  ENTER^
  29  STO 10             
  30  ST* Y
  31  +
  32  STO 11
  33  LASTX
  34  ST+ X
  35  DSE X
  36  FACT
  37  RCL 09
  38  DSE X
  39  FACT
  40  2
  41  LASTX
  42  Y^X
  43  *
  44  /
  45  RCL 07
  46  RCL 09
  47  Y^X
  48  *
  49  LBL 02
  50  STO 13
  51  RCL 06
  52  RCL 10
  53  *
  54  1
  55  P-R
  56  X<>Y
  57  RCL IND 14     
  58  *
  59  DSE 14
  60  X<>Y
  61  RCL IND 14
  62  *
  63  +
  64  *
  65  ST+ 03
  66  LASTX
  67  RCL 12
  68  RCL 08
  69  RCL 13
  70  STO 12
  71  *
  72  RCL 10
  73  *
  74  RCL 07
  75  /
  76  STO T
  77  -
  78  *
  79  ST+ 04
  80  LASTX
  81  R^
  82  -
  83  RCL 10
  84  DSE 14             
  85  X=0?
  86  GTO 00
  87  ENTER^
  88  DSE X
  89  "" 
  90  STO 10
  91  *
  92  RCL 11
  93  -
  94  /
  95  GTO 02
  96  LBL 00
  97  RCL 00
  98  ST* 01
  99  ST* 02
100  RCL 09
101  RCL 03
102  ST* Y
103  +
104  ST+ 01
105  RCL 04
106  ST+ 02
107  DSE 09
108  RCL 09
109  DSE X
110  GTO 01
111  3986004.415 E8
112  RCL 05
113  X^2
114  /
115  ST* 02
116  CHS
117  ST* 01
118  ST+ 01
119  RCL 07
120  7.292115 E-5
121  X^2
122  RCL 05
123  *
124  RCL 07
125  *
126  *
127  ST+ 01
128  RCL 08
129  LASTX
130  *
131  ST- 02
132  RCL 01
133  RCL 02
134  R-P
135  END

 
  ( 200 bytes / SIZE 051 )
 
 

      STACK        INPUTS      OUTPUTS
           Z          B (deg)             /
           Y          L (deg)             /
           X          R  (m)        g ( m/s2)

  where  R , L , B  are the geocentric coordinates.

      R = distance from the center of the Earth
      L = longitude,
      B = geocentric latitude

-Before using "GRV5" , store the coefficients in R15 thru R50 and key in   15.050  XEQ "CS-CS"
 

Example:   With the same values:   R = 6369806 m    L = -77.065556°    B = 38.733471°

     38.733471   ENTER^
   -77.065556    ENTER^
      6369806     XEQ "GRV5"  >>>>   g = 9.800330872 m/s2            ---Execution time = 47s---     ( instead of 77s )
 

 •  If you want to use the spherical harmonics up to, say degree and order 10:

-Store the required coefficients in registers R15 to R140
-Replace line 18 by 10 and line 20 by 140
-Key in  15.140  XEQ "CS-CS"

-With the same example, it yields     g = 9.800265047 m/s2   ( in 2m30s instead of 4mn23s )

  •  Likewise, with the spherical harmonics up to degree and order 12

-Store the coefficients in registers R15 to R190  ( 176 coefficients )
-Replace line 18 by 12 and line 20 by 190
-Key in  15.190  XEQ "CS-CS"

-The HP-41 returns   g = 9.800287689 m/s2  ( in 3m26s instead of 6m05s )
 

References:

[1]   http://earth-info.nga.mil/GandG/publications/tr8350.2/wgs84fin.pdf
[2]   http://cddis.nasa.gov/926/egm96/egm96.html
[3]   http://earth-info.nga.mil/GandG/wgs84/gravitymod/egm2008/index.html

-The new gravity model EGM2008 uses spherical harmonics up to order and degree 2159 + a few additional terms!
-Even more impossible for an HP-41...